<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Seagame</id>
	<title>Izara Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://izara.io/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Seagame"/>
	<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php/Special:Contributions/Seagame"/>
	<updated>2026-05-02T06:07:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4326</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4326"/>
		<updated>2026-05-01T06:17:08Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Upload AMI to aws account */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
= Download and Upload AMIs on EC2 =&lt;br /&gt;
== Download AMI from aws account == &lt;br /&gt;
&lt;br /&gt;
* '''Create vmimport Role'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
       &amp;quot;Service&amp;quot;: &amp;quot;vmie.amazonaws.com&amp;quot;&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;,&lt;br /&gt;
     &amp;quot;Condition&amp;quot;: {}&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Permissions in vmImportPolicy'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:GetBucketLocation&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:ListBucket&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema&amp;quot;, &lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:PutObject&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;ec2:ModifySnapshotAttribute&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:CopySnapshot&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:RegisterImage&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:Describe*&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Create Role Permission'''&lt;br /&gt;
** can create  from EC2 instance &amp;gt;&amp;gt;Action &amp;gt; security &amp;gt; Modify IAM role&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;ec2:ExportImage&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeImages&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeExportImageTasks&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:PutObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:GetBucketLocation&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''Set AWS config'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AWS Access Key ID [****************SVVH]: xxxxxxxxx&lt;br /&gt;
AWS Secret Access Key [****************XESH]:  yyyyyyyyy&lt;br /&gt;
Default region name [us-east-2]: us-east-2&lt;br /&gt;
Default output format [json]: json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  Start export task&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 export-image \&lt;br /&gt;
  --region us-east-2  \&lt;br /&gt;
  --image-id &amp;lt;ami-01547ffae334d2ca4&amp;gt; \ &lt;br /&gt;
  --disk-image-format VMDK \&lt;br /&gt;
  --s3-export-location S3Bucket=object-schema,S3Prefix=exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to check progress&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 describe-export-image-tasks \&lt;br /&gt;
  --export-image-task-ids &amp;lt;export-ami-69b4fce2df0ce647t&amp;gt; \&lt;br /&gt;
  --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download AMIs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp s3://schema-accounting/exports/&amp;lt;export-ami-69b4fce2df0ce647t.vmdk&amp;gt; .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload AMI to aws account == &lt;br /&gt;
** If ami download exist in s3 / aws account  can run: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; containers.json &amp;lt;&amp;lt; 'EOF'&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;neo4j-ami-accounting&amp;quot;,&lt;br /&gt;
 &amp;quot;Format&amp;quot;: &amp;quot;vmdk&amp;quot;,&lt;br /&gt;
 &amp;quot;UserBucket&amp;quot;: {&lt;br /&gt;
   &amp;quot;S3Bucket&amp;quot;: &amp;quot;schema-accounting&amp;quot;,&lt;br /&gt;
   &amp;quot;S3Key&amp;quot;: &amp;quot;exports/export-ami-69b4fce2df0ce647t.vmdk&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
}]&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** If file export-ami-xxx in local terminal | that download from another account, then want to upload into s3 / other aws account run before:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp ~/JangProgramer/export-ami-819afd57ae1eb750t.vmdk \&lt;br /&gt;
         s3://schema-accounting/exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 import-image \&lt;br /&gt;
 --description &amp;quot;Neo4j AMI Import&amp;quot; \&lt;br /&gt;
 --disk-containers file://containers.json \&lt;br /&gt;
 --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
* check status&lt;br /&gt;
aws ec2 describe-export-image-tasks // check status&lt;br /&gt;
aws ec2 describe-import-image-tasks //&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4325</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4325"/>
		<updated>2026-05-01T05:51:30Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Upload AMI to aws account */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
= Download and Upload AMIs on EC2 =&lt;br /&gt;
== Download AMI from aws account == &lt;br /&gt;
&lt;br /&gt;
* '''Create vmimport Role'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
       &amp;quot;Service&amp;quot;: &amp;quot;vmie.amazonaws.com&amp;quot;&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;,&lt;br /&gt;
     &amp;quot;Condition&amp;quot;: {}&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Permissions in vmImportPolicy'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:GetBucketLocation&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:ListBucket&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema&amp;quot;, &lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:PutObject&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;ec2:ModifySnapshotAttribute&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:CopySnapshot&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:RegisterImage&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:Describe*&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Create Role Permission'''&lt;br /&gt;
** can create  from EC2 instance &amp;gt;&amp;gt;Action &amp;gt; security &amp;gt; Modify IAM role&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;ec2:ExportImage&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeImages&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeExportImageTasks&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:PutObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:GetBucketLocation&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''Set AWS config'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AWS Access Key ID [****************SVVH]: xxxxxxxxx&lt;br /&gt;
AWS Secret Access Key [****************XESH]:  yyyyyyyyy&lt;br /&gt;
Default region name [us-east-2]: us-east-2&lt;br /&gt;
Default output format [json]: json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  Start export task&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 export-image \&lt;br /&gt;
  --region us-east-2  \&lt;br /&gt;
  --image-id &amp;lt;ami-01547ffae334d2ca4&amp;gt; \ &lt;br /&gt;
  --disk-image-format VMDK \&lt;br /&gt;
  --s3-export-location S3Bucket=object-schema,S3Prefix=exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to check progress&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 describe-export-image-tasks \&lt;br /&gt;
  --export-image-task-ids &amp;lt;export-ami-69b4fce2df0ce647t&amp;gt; \&lt;br /&gt;
  --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download AMIs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp s3://schema-accounting/exports/&amp;lt;export-ami-69b4fce2df0ce647t.vmdk&amp;gt; .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload AMI to aws account == &lt;br /&gt;
** If ami download exist in s3 / aws account  can run: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; containers.json &amp;lt;&amp;lt; 'EOF'&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;neo4j-ami-accounting&amp;quot;,&lt;br /&gt;
 &amp;quot;Format&amp;quot;: &amp;quot;vmdk&amp;quot;,&lt;br /&gt;
 &amp;quot;UserBucket&amp;quot;: {&lt;br /&gt;
   &amp;quot;S3Bucket&amp;quot;: &amp;quot;schema-accounting&amp;quot;,&lt;br /&gt;
   &amp;quot;S3Key&amp;quot;: &amp;quot;exports/export-ami-69b4fce2df0ce647t.vmdk&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
}]&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** If file export-ami-xxx in local terminal | that download from another account, then want to upload into s3 / other aws account run before:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp ~/JangProgramer/export-ami-819afd57ae1eb750t.vmdk \&lt;br /&gt;
         s3://schema-accounting/exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 import-image \&lt;br /&gt;
 --description &amp;quot;Neo4j AMI Import&amp;quot; \&lt;br /&gt;
 --disk-containers file://containers.json \&lt;br /&gt;
 --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 describe-export-image-tasks // check status&lt;br /&gt;
aws ec2 describe-import-image-tasks //&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4324</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4324"/>
		<updated>2026-05-01T05:50:52Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Upload AMI to aws account */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
= Download and Upload AMIs on EC2 =&lt;br /&gt;
== Download AMI from aws account == &lt;br /&gt;
&lt;br /&gt;
* '''Create vmimport Role'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
       &amp;quot;Service&amp;quot;: &amp;quot;vmie.amazonaws.com&amp;quot;&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;,&lt;br /&gt;
     &amp;quot;Condition&amp;quot;: {}&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Permissions in vmImportPolicy'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:GetBucketLocation&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:ListBucket&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema&amp;quot;, &lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:PutObject&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;ec2:ModifySnapshotAttribute&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:CopySnapshot&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:RegisterImage&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:Describe*&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Create Role Permission'''&lt;br /&gt;
** can create  from EC2 instance &amp;gt;&amp;gt;Action &amp;gt; security &amp;gt; Modify IAM role&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;ec2:ExportImage&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeImages&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeExportImageTasks&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:PutObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:GetBucketLocation&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''Set AWS config'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AWS Access Key ID [****************SVVH]: xxxxxxxxx&lt;br /&gt;
AWS Secret Access Key [****************XESH]:  yyyyyyyyy&lt;br /&gt;
Default region name [us-east-2]: us-east-2&lt;br /&gt;
Default output format [json]: json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  Start export task&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 export-image \&lt;br /&gt;
  --region us-east-2  \&lt;br /&gt;
  --image-id &amp;lt;ami-01547ffae334d2ca4&amp;gt; \ &lt;br /&gt;
  --disk-image-format VMDK \&lt;br /&gt;
  --s3-export-location S3Bucket=object-schema,S3Prefix=exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to check progress&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 describe-export-image-tasks \&lt;br /&gt;
  --export-image-task-ids &amp;lt;export-ami-69b4fce2df0ce647t&amp;gt; \&lt;br /&gt;
  --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download AMIs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp s3://schema-accounting/exports/&amp;lt;export-ami-69b4fce2df0ce647t.vmdk&amp;gt; .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload AMI to aws account == &lt;br /&gt;
** If ami download exist in s3 / aws account  can run: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; containers.json &amp;lt;&amp;lt; 'EOF'&lt;br /&gt;
[{&lt;br /&gt;
  &amp;quot;Description&amp;quot;: &amp;quot;neo4j-ami-accounting&amp;quot;,&lt;br /&gt;
 &amp;quot;Format&amp;quot;: &amp;quot;vmdk&amp;quot;,&lt;br /&gt;
 &amp;quot;UserBucket&amp;quot;: {&lt;br /&gt;
   &amp;quot;S3Bucket&amp;quot;: &amp;quot;schema-accounting&amp;quot;,&lt;br /&gt;
   &amp;quot;S3Key&amp;quot;: &amp;quot;exports/export-ami-69b4fce2df0ce647t.vmdk&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
}]&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
** If file export-ami-xxx in local terminal | that download from another account, then want to upload into s3 / other aws account run before:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp ~/JangProgramer/export-ami-819afd57ae1eb750t.vmdk \&lt;br /&gt;
         s3://schema-accounting/exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 import-image \&lt;br /&gt;
 --description &amp;quot;Neo4j AMI Import&amp;quot; \&lt;br /&gt;
 --disk-containers file://containers.json \&lt;br /&gt;
 --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
aws ec2 describe-export-image-tasks // check status&lt;br /&gt;
aws ec2 describe-import-image-tasks //&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4323</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4323"/>
		<updated>2026-05-01T05:37:46Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Download and Upload AMIs on EC2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
= Download and Upload AMIs on EC2 =&lt;br /&gt;
== Download AMI from aws account == &lt;br /&gt;
&lt;br /&gt;
* '''Create vmimport Role'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
       &amp;quot;Service&amp;quot;: &amp;quot;vmie.amazonaws.com&amp;quot;&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;,&lt;br /&gt;
     &amp;quot;Condition&amp;quot;: {}&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Permissions in vmImportPolicy'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:GetBucketLocation&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:ListBucket&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema&amp;quot;, &lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:PutObject&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;ec2:ModifySnapshotAttribute&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:CopySnapshot&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:RegisterImage&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:Describe*&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Create Role Permission'''&lt;br /&gt;
** can create  from EC2 instance &amp;gt;&amp;gt;Action &amp;gt; security &amp;gt; Modify IAM role&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;ec2:ExportImage&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeImages&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeExportImageTasks&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:PutObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:GetBucketLocation&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''Set AWS config'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
AWS Access Key ID [****************SVVH]: xxxxxxxxx&lt;br /&gt;
AWS Secret Access Key [****************XESH]:  yyyyyyyyy&lt;br /&gt;
Default region name [us-east-2]: us-east-2&lt;br /&gt;
Default output format [json]: json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*  Start export task&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 export-image \&lt;br /&gt;
  --region us-east-2  \&lt;br /&gt;
  --image-id &amp;lt;ami-01547ffae334d2ca4&amp;gt; \ &lt;br /&gt;
  --disk-image-format VMDK \&lt;br /&gt;
  --s3-export-location S3Bucket=object-schema,S3Prefix=exports/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* How to check progress&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws ec2 describe-export-image-tasks \&lt;br /&gt;
  --export-image-task-ids &amp;lt;export-ami-69b4fce2df0ce647t&amp;gt; \&lt;br /&gt;
  --region us-east-2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download AMIs&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp s3://schema-accounting/exports/&amp;lt;export-ami-69b4fce2df0ce647t.vmdk&amp;gt; .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload AMI to aws account == &lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4322</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4322"/>
		<updated>2026-05-01T05:26:31Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Download and Upload AMIs on EC2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
= Download and Upload AMIs on EC2 =&lt;br /&gt;
* '''Create vmimport Role'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
       &amp;quot;Service&amp;quot;: &amp;quot;vmie.amazonaws.com&amp;quot;&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;,&lt;br /&gt;
     &amp;quot;Condition&amp;quot;: {}&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Permissions in vmImportPolicy'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
 &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:GetBucketLocation&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
       &amp;quot;s3:ListBucket&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: [&lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema&amp;quot;, &lt;br /&gt;
       &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;s3:PutObject&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::object-schema/*&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
     &amp;quot;Action&amp;quot;: [&lt;br /&gt;
       &amp;quot;ec2:ModifySnapshotAttribute&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:CopySnapshot&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:RegisterImage&amp;quot;,&lt;br /&gt;
       &amp;quot;ec2:Describe*&amp;quot;&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Create Role Permission'''&lt;br /&gt;
** can create  from EC2 instance &amp;gt;&amp;gt;Action &amp;gt; security &amp;gt; Modify IAM role&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;ec2:ExportImage&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeImages&amp;quot;,&lt;br /&gt;
               &amp;quot;ec2:DescribeExportImageTasks&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       },&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: [&lt;br /&gt;
               &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:ListBucket&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:PutObject&amp;quot;,&lt;br /&gt;
               &amp;quot;s3:GetBucketLocation&amp;quot;&lt;br /&gt;
           ],&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Set AWS config'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4321</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4321"/>
		<updated>2026-05-01T05:20:30Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
= Download and Upload AMIs on EC2 =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4245</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4245"/>
		<updated>2026-03-26T08:29:37Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Install neo4j using .tar */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  If use AMIs exist from another account neo4j browser/backend database will be use old password from that AMIs&lt;br /&gt;
* If want to change password with new EC2 instance after install neo4j package &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
#bash: &lt;br /&gt;
sudo systemctl stop neo4j&lt;br /&gt;
rm -rf data/dbms/*&lt;br /&gt;
rm -rf data/databases/system&lt;br /&gt;
rm -rf data/transactions/system&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password neo4jComAcc&lt;br /&gt;
sudo systemctl start neo4j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2025-04-08_-_Frontend_Styles&amp;diff=4239</id>
		<title>2025-04-08 - Frontend Styles</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2025-04-08_-_Frontend_Styles&amp;diff=4239"/>
		<updated>2026-03-22T03:15:45Z</updated>

		<summary type="html">&lt;p&gt;Seagame: add example of styles usage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= styled-components concept=&lt;br /&gt;
==Concept==&lt;br /&gt;
*Every styleComponet tag can use the same fotmat and every html Tag can use the same styleComponet tag and send propperties to each styleComponet tag for use different cssStyle.&lt;br /&gt;
*store all css as object in themeStylesDefault.js.&lt;br /&gt;
*mixed cssStyle from defaultCss and objTypeCss.&lt;br /&gt;
*defaultCss is look like &amp;quot;tabulation_section_dataType_sort&amp;quot;, It only first index of cssPrefix join by &amp;quot;_&amp;quot; with cssSuffix &lt;br /&gt;
*objTypeCss is look the same daefaultCss but insert serviceTag and objectType after fist index separate by &amp;quot;_&amp;quot;,It look like &amp;quot;tabulation_serviceTag_objectType_section_dataType_sort&amp;quot;&lt;br /&gt;
*objTypeCss can cut objectType and left only serviceTag, So objTypeCss can have 2 style.It look like &amp;quot;tabulation_serviceTag_section_dataType_sort&amp;quot;&lt;br /&gt;
*objTypeCss will always ovewrite defaultCss (can read more in createComponent function process)&lt;br /&gt;
&lt;br /&gt;
==StyleTag Name Format==&lt;br /&gt;
&lt;br /&gt;
* use &amp;quot;Izara&amp;quot; + html tag + &amp;quot;Style&amp;quot;&lt;br /&gt;
* html tag = same tag with styled.tag&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
const IzaraInputStyle = styled.input&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==StyleTag Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
export const IzaraTextSpanStyle = styled.span`&lt;br /&gt;
  ${(props) =&amp;gt; createComponent(props)}&lt;br /&gt;
`;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=function=&lt;br /&gt;
&lt;br /&gt;
==createComponent==&lt;br /&gt;
===Parameter===&lt;br /&gt;
===themeStyle=== &lt;br /&gt;
*type object(can be undefined)&lt;br /&gt;
*object from userStyles get from userDetail in store after login, It store styletag as key and css as value&lt;br /&gt;
eg.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
themeStyle = {&lt;br /&gt;
  styles: {&lt;br /&gt;
    &amp;quot;tableConfig_serviceTag_buyingNavbar_datatype&amp;quot;: &amp;quot;width: auto; padding: 5px;  padding-right: 10px;  background: rgb(204, 214, 166);  transition: 0.3s;  z-index: 5;  height: 35px;&amp;quot;,&lt;br /&gt;
    &amp;quot;tableConfig_buyingNavbar_datatype&amp;quot;: &amp;quot;width: auto;    flex-direction: row;   padding: 5px;   padding-right: 10px;    background: rgb(199, 242, 164);   transition: 0.3s;   z-index: 5;  height: 35px;&amp;quot;,&lt;br /&gt;
    &amp;quot;tableConfig_serviceTag_buyingNavbar_datatype&amp;quot;: &amp;quot;width: auto;   flex-direction: row;   padding: 5px;   padding-right: 10px;  background: rgb(223, 232, 204);   transition: 0.3s;  z-index: 5;  35px;&amp;quot;,&lt;br /&gt;
    &amp;quot;tableOutput_serviceTag_objectType_buyingNavbar_datatype&amp;quot;: &amp;quot;width: auto;  flex-direction: row; padding: 5px; padding-right: 10px;  transition: 0.3s;  z-index: 5;   height: 35px;&amp;quot;,&lt;br /&gt;
    &amp;quot;tableOutput_buyingNavbar_navbar_datatype&amp;quot;: &amp;quot;width: auto;   flex-direction: row; padding: 5px;  padding-right: 10px; background: rgb(204, 214, 166);  transition: 0.3s;  z-index: 5;  height: 35px;&amp;quot;,&lt;br /&gt;
    &amp;quot;tableOutput_datatype&amp;quot;: &amp;quot;width: auto;   flex-direction: row;   padding: 5px;   padding-right: 10px;    background: rgb(199, 242, 164);  transition: 0.3s;   z-index: 5;   height: 35px;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===styletags===&lt;br /&gt;
*type array(can be undefined)&lt;br /&gt;
*list of use styletag create from createStyleTags function &lt;br /&gt;
eg.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&amp;quot;tableConfig_serviceTag_objectType_section_dataType_sort&amp;quot;,&amp;quot;tableConfig_serviceTag_section_dataType_sort&amp;quot;,&amp;quot;tableConfig_section_dataType_sort&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===overwritecssstyles=== &lt;br /&gt;
*type string(can be undefined)&lt;br /&gt;
*Css value obtained from the objectConfig followed by the style tag as a key.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
 `color: blue;&lt;br /&gt;
  margin: 0px 3px;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  transition: 0.3s;&lt;br /&gt;
  font-size: 17px;`&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===function process===&lt;br /&gt;
*Use styleTags to get CssStyle from themeStyle and themeStylesDefault&lt;br /&gt;
*When searching for styleTag in themeStylesDefault, the function starts searching for styleTag from the last index first, then searches the second index, and then the first index.&lt;br /&gt;
*The last index is defaultStyleTag , which does not specify an objType , but the remaining two indexes are objTypeStyeTag , which does specify an objType , with this process objTypeStyeTag will overwrite defaultStyleTag .&lt;br /&gt;
*ThemeStylesDefault is object from local create by dev,It store styletag as key and css as value like themeStyle object&lt;br /&gt;
*Create usingCss style by mixed cssStyle from styleTags with cssStyle from overwritecssstyles&lt;br /&gt;
===return result===&lt;br /&gt;
*type string&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
  `color: blue;&lt;br /&gt;
  margin: 0px 3px;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  transition: 0.3s;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  display: flex;&lt;br /&gt;
  align-items: center;&lt;br /&gt;
    :hover{&lt;br /&gt;
      opacity: 0.6;&lt;br /&gt;
      color: #B3DBD8 ;&lt;br /&gt;
    }&lt;br /&gt;
  color: red;`&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* About CSS, if the same property exists, such as in the CSS example above, with two color properties, the CSS will cause the bottom line property to overwrite the top line property. In the example, red overwrites blue.&lt;br /&gt;
&lt;br /&gt;
==createStyleTags==&lt;br /&gt;
===Parameter===&lt;br /&gt;
===cssPrefixs=== &lt;br /&gt;
*type array(requried)&lt;br /&gt;
*List of string create by createCssPrefixs function store at least 1 item but not more than 3 item. &lt;br /&gt;
*Reade more and watch example in createCssPrefixs function.&lt;br /&gt;
===suffix=== &lt;br /&gt;
*type string(requried)&lt;br /&gt;
*A string generated by the createCssSuffix function that indicates where this cssStyle will be applied on the page, such as rows, cells, or table. &lt;br /&gt;
*Conditions can be added after the &amp;quot;_&amp;quot; to further specify or describe the style, such as color, row range, or column range.&lt;br /&gt;
*Reade more and watch example in createCssSuffix function.&lt;br /&gt;
===return result===&lt;br /&gt;
*type array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&amp;quot;tableOutput_serviceTag_objectType_section_dataType_sort&amp;quot;,&amp;quot;tableOutput_objectType_section_dataType_sort&amp;quot;,&amp;quot;tableOutput_section_dataType_sort&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==createCssPrefixs==&lt;br /&gt;
===Parameter===&lt;br /&gt;
===defaultPrefix=== &lt;br /&gt;
*type string(requried)&lt;br /&gt;
*Specifies which objectConfig is using this cssStyle. eg. menuOutput, tableConfig, sitePageConfig, tableOutput.&lt;br /&gt;
===cssPrefixes=== &lt;br /&gt;
*type array(can be undefined)&lt;br /&gt;
*List of ObjTypes must have 2 items, fist index is serviceTag second is objectType.It look like [&amp;quot;serviceTag&amp;quot;, &amp;quot;objectType&amp;quot;]&lt;br /&gt;
===return result===&lt;br /&gt;
type array&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
//if not have cssPrefixes&lt;br /&gt;
[&amp;quot;tableConfig&amp;quot;]&lt;br /&gt;
//have cssPrefixes&lt;br /&gt;
[&amp;quot;tableConfig&amp;quot;, &amp;quot;serviceTag&amp;quot;, &amp;quot;objectType&amp;quot;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==createCssSuffix==&lt;br /&gt;
===Parameter===&lt;br /&gt;
===defaultSuffix=== &lt;br /&gt;
*type string(requried)&lt;br /&gt;
*Specifies where this cssStyle will be applied on the page, such as rows, cells, or tables.&lt;br /&gt;
===localSuffix=== &lt;br /&gt;
*type string(can be undefined)&lt;br /&gt;
*Specify or further explain defaultSuffix. A string can be a single word or a combination of words, and each word must be separated by &amp;quot;_&amp;quot;. eg. &amp;quot;background_blue&amp;quot;, &amp;quot;rowSpan_2&amp;quot;&lt;br /&gt;
===return result===&lt;br /&gt;
*type string&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
//if not have localSuffix&lt;br /&gt;
&amp;quot;row&amp;quot;&lt;br /&gt;
//have localSuffix&lt;br /&gt;
&amp;quot;row_rowSpan_2&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Using Styles =&lt;br /&gt;
&lt;br /&gt;
Describes how style tags are generated and merged when using &amp;lt;code&amp;gt;IzaraDivStyle&amp;lt;/code&amp;gt; together with helper functions and theme style objects.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;createCssPrefixs(defaultPrefix, cssPrefixes)&amp;lt;/code&amp;gt; composes an array of prefixes starting with &amp;lt;code&amp;gt;defaultPrefix&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;createStyleTags(cssPrefixes, suffix)&amp;lt;/code&amp;gt; builds class-like tags from those prefixes (most specific first).&lt;br /&gt;
* Styles are merged from defaults to backend/theme overrides in order of specificity.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
# Single extra prefix:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;IzaraDivStyle&lt;br /&gt;
  styletags={createStyleTags(&lt;br /&gt;
    createCssPrefixs('formEditConfig', ['output_Testt']),&lt;br /&gt;
    'div'&lt;br /&gt;
  )}&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated tags (ordered from most specific to least):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
['formEditConfig_output_Testt_div', 'formEditConfig_div']&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Multiple prefixes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;IzaraDivStyle&lt;br /&gt;
  styletags={createStyleTags(&lt;br /&gt;
    createCssPrefixs('formEditConfig', ['output', 'Testt']),&lt;br /&gt;
    'div'&lt;br /&gt;
  )}&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  'formEditConfig_output_Testt_div',&lt;br /&gt;
  'formEditConfig_output_div',&lt;br /&gt;
  'formEditConfig_div'&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Merge behavior (how CSS is composed) ==&lt;br /&gt;
&lt;br /&gt;
Given these theme objects:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
export const themeStylesDefault = {&lt;br /&gt;
  formEditConfig_div: `&lt;br /&gt;
    display:flex;&lt;br /&gt;
  `,&lt;br /&gt;
  formEditConfig_output_div: `&lt;br /&gt;
    color:red;&lt;br /&gt;
  `,&lt;br /&gt;
  formEditConfig_output_Testt_div: `&lt;br /&gt;
    background-color: coral;&lt;br /&gt;
  `&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
export const themeStylesBackend = {&lt;br /&gt;
  formEditConfig_div: `&lt;br /&gt;
    display:flex;&lt;br /&gt;
    justify-content:center;&lt;br /&gt;
  `,&lt;br /&gt;
  formEditConfig_output_div: `&lt;br /&gt;
    color:green;&lt;br /&gt;
  `&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The merged result for the tags above becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  display:flex;&lt;br /&gt;
  justify-content:center; /* from backend override */&lt;br /&gt;
  color:green;            /* backend overrides default */&lt;br /&gt;
  background-color: coral;/* most specific default */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* Styles are combined by iterating &amp;lt;code&amp;gt;styletags&amp;lt;/code&amp;gt; from most specific to least specific, collecting backend/theme overrides first (if present) and falling back to defaults.&lt;br /&gt;
* The final CSS string concatenates defaults first, then theme/backend values to ensure overrides apply.&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;createCssPrefixs&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;createStyleTags&amp;lt;/code&amp;gt; to derive style keys.&lt;br /&gt;
* Provide &amp;lt;code&amp;gt;themeStyle&amp;lt;/code&amp;gt; (backend overrides) and &amp;lt;code&amp;gt;themeStylesDefault&amp;lt;/code&amp;gt; (defaults) to the component.&lt;br /&gt;
* The merge order ensures more specific and backend-provided styles override defaults.&lt;br /&gt;
&lt;br /&gt;
== Note ==&lt;br /&gt;
&lt;br /&gt;
Now we receive &amp;lt;code&amp;gt;themeStyle&amp;lt;/code&amp;gt; from props of IzaraDivStyle component , but in the future it will come from the backend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2025-04-08]]&lt;br /&gt;
[[Category:Working documents - Frontend Styles| 2025-04-08]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Per_Service_Schemas&amp;diff=4229</id>
		<title>Per Service Schemas</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Per_Service_Schemas&amp;diff=4229"/>
		<updated>2026-03-21T05:34:05Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Relationships Schema | ObjectRelationships.js */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each service manages a schema of object/resources that it is responsible for, this schema is available to other services and frontends. The schema includes a list of fields available for each object.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
&lt;br /&gt;
* see [[Repository structure#schemas|Repository structure]]&lt;br /&gt;
&lt;br /&gt;
= ObjectSchema | ObjectFieldSchema.js =&lt;br /&gt;
&lt;br /&gt;
== Not extendObjType ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;xx&amp;quot;,&lt;br /&gt;
	shortNameObjectType:&amp;quot;x&amp;quot;, // optional, use when generate code create lambda role with long name&lt;br /&gt;
	canDelete: false, // whether any fields can be deleted // default = false&lt;br /&gt;
	    belongTo: { &lt;br /&gt;
		serviceTag:&amp;quot;iii&amp;quot;,&lt;br /&gt;
		objectType:&amp;quot;jjj&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    // how is the object created&lt;br /&gt;
    // userGenerated there will be generated endpoints for api or sqs (used in importBatchMain) to create object&lt;br /&gt;
    // systemGenerated must be created by flow/s&lt;br /&gt;
    // searchResultGenerated see separate notes below&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot; || &amp;quot;systemGenerated&amp;quot; || &amp;quot;searchResultGenerated&amp;quot; // required&lt;br /&gt;
    searchResultGeneratedFlowType: {}, // for generatedBy = searchResultGenerated&lt;br /&gt;
	addOnDataStructure: [ // optional, add for additional setting to objectType&lt;br /&gt;
		{&lt;br /&gt;
			// all fields that a user can edit must be in versionedData, and all fields in versionedData must be editable by user&lt;br /&gt;
			type:&amp;quot;versionedData&amp;quot;,&lt;br /&gt;
			versionedDataLabel: &amp;quot;xx&amp;quot;, // versionedData label name&lt;br /&gt;
			storageResourceTag : &amp;quot;xx&amp;quot;, // ref to storegeResourceTag&lt;br /&gt;
			fieldNames: { // fieldName in versionedData cannot have in in main objectSchema.fieldNames&lt;br /&gt;
				&amp;quot;aaa&amp;quot;:{ // fieldName&lt;br /&gt;
					type: &amp;quot;xx&amp;quot;, // string|integer|number|timestamp|currency|currencyValue|float|special|object|boolean|arrayMixed|arrayNumeric|arrayString&lt;br /&gt;
					requiredOnCreate: false, // default = false&lt;br /&gt;
					optionalOnCreate: false, // default = false,&lt;br /&gt;
					validation: {&lt;br /&gt;
                      itemValidation:{} // for validate item in array&lt;br /&gt;
                    },&lt;br /&gt;
                    // probably impossible to have fromObjType, because data can be changed by user here&lt;br /&gt;
					fromObjType:{&lt;br /&gt;
						serviceTag: &amp;quot;xxx&amp;quot;, &lt;br /&gt;
						objectType: &amp;quot;xxx&amp;quot; &lt;br /&gt;
					},&lt;br /&gt;
				},&lt;br /&gt;
				// ...&lt;br /&gt;
			}&lt;br /&gt;
        },&lt;br /&gt;
        { // can have multiple addOn of type attributeTree&lt;br /&gt;
          type:&amp;quot;attributeTree&amp;quot;,           &lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;translation&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;propertyValue&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;mediaLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		// ...&lt;br /&gt;
	],&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{ // storageResourceTag&lt;br /&gt;
			storageType: &amp;quot;xx&amp;quot;, // graph			&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;, // setting for storageType graph&lt;br /&gt;
            additionalGraphIndexes:[['fieldName1', 'fieldName2', ...], [...]]  // will make graph index with specific fieldName &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;zzz&amp;quot;:{ // storageResourceTag&lt;br /&gt;
			storageType: &amp;quot;xx&amp;quot;, // dynamoDB&lt;br /&gt;
			// setting for storageType dynamoDB&lt;br /&gt;
			tableName: &amp;quot;xx&amp;quot;,&lt;br /&gt;
			groupByPartitionKeyField: &amp;quot;xx&amp;quot;, // use groupByPartitionKeyField as partition key and not have sort key in dynamoDB, if have multiple identifiers will concat it. And use it as partitionKey.&lt;br /&gt;
            serviceTag:&amp;quot;zz&amp;quot;// default own service.&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		xxx: { // fieldName&lt;br /&gt;
			type: &amp;quot;xx&amp;quot;,  // string|integer|number|timestamp|currency|currencyValue|float|special|object|boolean|arrayMixed|arrayNumeric|arrayString&lt;br /&gt;
            randomOnCreate: false,   // default = false , can set true in fieldName that part of identifiers and identifiers have single identifierFieldname&lt;br /&gt;
			requiredOnCreate: false, // default = false&lt;br /&gt;
			optionalOnCreate: false, // default = false&lt;br /&gt;
			canUpdate: true, // default = true (only system/flows can edit, no history of changes unless flow manually adds)&lt;br /&gt;
			validation: {&lt;br /&gt;
			  itemValidation:{}  // for validate item in array&lt;br /&gt;
            }, // maybe ajv syntax&lt;br /&gt;
			storageResourceTags: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // reference to storageResources property&lt;br /&gt;
		    fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;xxx&amp;quot;, &lt;br /&gt;
			  objectType: &amp;quot;xxx&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
            hashOnCreate: [&amp;quot;xx&amp;quot;, &amp;quot;yy&amp;quot;], // reference to other fieldName, &lt;br /&gt;
            statusField: true, // use for objectSchema inside flowSchema, identify which field is statusField &lt;br /&gt;
		},&lt;br /&gt;
		// ...&lt;br /&gt;
	},&lt;br /&gt;
    compositeKeyDeliminator: &amp;quot;xx&amp;quot;, // join partitionKey and sortKey&lt;br /&gt;
	identifiers: [&lt;br /&gt;
    // for dynamoDB storageType &lt;br /&gt;
	{&lt;br /&gt;
		type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // composite partition keys in DynamoDB&lt;br /&gt;
		deliminator: &amp;quot;xx&amp;quot;,  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
		name: &amp;quot;zz&amp;quot;, // name of field in database&lt;br /&gt;
		// or&lt;br /&gt;
		fieldName: &amp;quot;xx&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // composite partition keys in DynamoDB&lt;br /&gt;
		deliminator: &amp;quot;xx&amp;quot;,  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
		name: &amp;quot;zz&amp;quot;, // name of field in database&lt;br /&gt;
		// or&lt;br /&gt;
		fieldName: &amp;quot;xx&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
   &lt;br /&gt;
    // for graph storageType&lt;br /&gt;
	{&lt;br /&gt;
		type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
		fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // identifier field in graph or composite partition keys in DynamoDB&lt;br /&gt;
        name: &amp;quot;zzz&amp;quot;              // use when save in dynamoDB partitionKey&lt;br /&gt;
		deliminator: &amp;quot;xx&amp;quot;,  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
		// or&lt;br /&gt;
		fieldName: &amp;quot;xx&amp;quot;	&lt;br /&gt;
	},&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== extendObjType ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	// for objects stored in graph this will add another node label&lt;br /&gt;
	objectType: &amp;quot;xx&amp;quot;, // new label to add&lt;br /&gt;
	extendObjType: { // core object that this object extends&lt;br /&gt;
		serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources:{ // these are the storageResources that carry the extended objects settings, &lt;br /&gt;
		// (see above)&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		// (see above) &lt;br /&gt;
	},&lt;br /&gt;
	// canDelete/identifiers come from the core object&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== searchResultGenerated ==&lt;br /&gt;
&lt;br /&gt;
* must be created by flow&lt;br /&gt;
* eg: variantProduct&lt;br /&gt;
* not have any storageResources&lt;br /&gt;
* identifiers are automatically searchResultData identifiers&lt;br /&gt;
* a searchResult request for this object will enter the searchResultGeneratedFlowType flow which creates searchResultData that can then be queried/sorted&lt;br /&gt;
* all relationships must be storageType = lambda, eg translate from variantProduct to variant uses a translateId flow to query the variantProduct identifier (searchResultData) to find the variantId in it's requiredData results&lt;br /&gt;
* searchResultGeneratedFlowType takes over after creating searchResultMain record until processRequiredData&lt;br /&gt;
* if objectSchema defines any fieldnames, then they are found using a flow, maybe as hooks in per service findData&lt;br /&gt;
* when finding direct fieldname, will need to check if requireData already exists, if not enter flow/findData to create&lt;br /&gt;
* no fields can be edited, so can show in forms but no updates performed&lt;br /&gt;
&lt;br /&gt;
= Relationships Schema | ObjectRelationships.js =&lt;br /&gt;
&lt;br /&gt;
* stored in top level schemas folder&lt;br /&gt;
* parent/child determines relationship direction for graph relationships&lt;br /&gt;
* have one service that contains information of each relationship &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// relationship schema in responsible service&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;xxx&amp;quot;: { // relationshipTag - name of relationship type stored in graph&lt;br /&gt;
      generatedBy: &amp;quot;userGenerated&amp;quot; || &amp;quot;systemGenerated&amp;quot; // default=&amp;quot;userGenerated&amp;quot;&lt;br /&gt;
      canChangeToRelTypes: [&lt;br /&gt;
		{&lt;br /&gt;
			relType: { // relType that this relType can change to &lt;br /&gt;
			  serviceTag:&amp;quot;xxx&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			changeBy: &amp;quot;user&amp;quot; // &amp;quot;systemNoUserId&amp;quot; | &amp;quot;systemWithUserId&amp;quot; | &amp;quot;user&amp;quot;, default=&amp;quot;user&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
        // another relType&lt;br /&gt;
      ],&lt;br /&gt;
      // moveBy allows the relationship to be moved between 2 instances of the same objType only&lt;br /&gt;
	  moveBy: &amp;quot;none&amp;quot; // &amp;quot;systemNoUserId&amp;quot; | &amp;quot;systemWithUserId&amp;quot; | &amp;quot;user&amp;quot; | &amp;quot;none&amp;quot;, default=&amp;quot;none&amp;quot;&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{ // storageResourceTag&lt;br /&gt;
			storageType: &amp;quot;xx&amp;quot;, // dynamoDB | graph | lambda&lt;br /&gt;
		    // if storageType=&amp;quot;dynamoDB&amp;quot;  will not specify tableName in relationship schema&lt;br /&gt;
&lt;br /&gt;
			// setting for storageType graph&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
            additionalGraphIndexes:[['fieldName1', 'fieldName2', ...], [...]],  // will make graph index with specific fieldName &lt;br /&gt;
&lt;br /&gt;
			// setting for storageType lambda&lt;br /&gt;
			serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
			functionName: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      fieldNames: {&lt;br /&gt;
		&amp;quot;xxx&amp;quot;: { // relationship property name&lt;br /&gt;
			type: &amp;quot;string&amp;quot;, // &amp;quot;string&amp;quot; | &amp;quot;number&amp;quot; ...&lt;br /&gt;
			requiredOnCreate: false, // default=false&lt;br /&gt;
			optionalOnCreate: false, // default = false&lt;br /&gt;
			updateBy: &amp;quot;user&amp;quot; // &amp;quot;systemNoUserId&amp;quot; | &amp;quot;systemWithUserId&amp;quot; | &amp;quot;user&amp;quot; | &amp;quot;none&amp;quot;, default=&amp;quot;user&amp;quot;&lt;br /&gt;
			validation: {} // ajv syntax&lt;br /&gt;
		},&lt;br /&gt;
		//...other relationship properties&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],   // reference from storageResources property&lt;br /&gt;
          canDelete: false                // default = false, if set true will allow delete relationship between 2 objType&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;xx&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            requiredOnCreate: true, // if set true will create relationshipTag when create objType data, if both &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; linkType=&amp;quot;many&amp;quot; should not have requiredOnCreate, exists in &amp;quot;from&amp;quot; or &amp;quot;to&amp;quot; only&lt;br /&gt;
            linkType: &amp;quot;&amp;quot;,   // one | many&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;yy&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;yy&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;&amp;quot;,   // one | many&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            // if storageType is Lambda and translateIds/linkPath requires properties set them here (eg sellOffer&amp;gt;orderPrice)&lt;br /&gt;
            tag_deliverTo: {&lt;br /&gt;
              requestPropertyType: &amp;quot;objectIdentifier&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot; // deliversToLocationNode&lt;br /&gt;
              },&lt;br /&gt;
              identifiersFieldName: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            // ... other request properties&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // ...other link&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reference Relationships Schema | RefObjectRelationships.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// reference to relationshipTag in external service&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    objectType: &amp;quot;zz&amp;quot;,              // objectType in local service&lt;br /&gt;
    relationshipTag: &amp;quot;xxx&amp;quot;,        // name of relationshiptag of objType&lt;br /&gt;
    relationshipServiceTag: &amp;quot;xx&amp;quot;   // point to service tag that contain data of relationshipTag of objType&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Flow Schema | FlowSchemas.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
 { &lt;br /&gt;
    flowTag: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
    initiateBy:&amp;quot;user&amp;quot;,         // &amp;quot;user&amp;quot; | &amp;quot;system&amp;quot; -- if receive plugin should be user &lt;br /&gt;
    handleObj:&amp;quot;one&amp;quot;,           // &amp;quot;one&amp;quot; | &amp;quot;multi&amp;quot;&lt;br /&gt;
    statusType:&amp;quot;statusField&amp;quot;,  // &amp;quot;statusField&amp;quot; | &amp;quot;storedCache&amp;quot; | &amp;quot;none&amp;quot; | &amp;quot;triggerCache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    // statusType=&amp;quot;triggerCache&amp;quot; setting &lt;br /&gt;
    triggerType: &amp;quot;storedCache&amp;quot;, // &amp;quot;storedCache&amp;quot; | &amp;quot;switch&amp;quot;&lt;br /&gt;
    triggerFlowTypes:[&lt;br /&gt;
      //... triggerFlowType&lt;br /&gt;
    ],&lt;br /&gt;
&lt;br /&gt;
	// statusType=&amp;quot;statusField&amp;quot; | &amp;quot;triggerCache&amp;quot; | &amp;quot;storedCache&amp;quot; setting:&lt;br /&gt;
    objType:{},&lt;br /&gt;
&lt;br /&gt;
    event:[&amp;quot;ownTopic&amp;quot;],  // &amp;quot;ownTopic&amp;quot; | &amp;quot;extTopic&amp;quot; | &amp;quot;s3&amp;quot; | &amp;quot;eventBridge&amp;quot; | &amp;quot;lambdaSyncInv&amp;quot; | &amp;quot;lambdaSyncApi&amp;quot; | &amp;quot;generatedCode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    // event=&amp;quot;s3&amp;quot; setting&lt;br /&gt;
    bucketName: &amp;quot;xxx&amp;quot;, // bucket for s3 event&lt;br /&gt;
    createBucket: boolean, // if true will generate new bucket with bucketName if false will point to old bucket that already have &lt;br /&gt;
&lt;br /&gt;
    // event=&amp;quot;eventBridge&amp;quot; setting&lt;br /&gt;
    schedules:[&lt;br /&gt;
      {&lt;br /&gt;
        name: 'your-scheduled-rate-event-name',&lt;br /&gt;
        description: 'your scheduled rate event description',&lt;br /&gt;
        rate: [&amp;quot;rate(1 minute)&amp;quot;, ],&lt;br /&gt;
        input:{}&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
&lt;br /&gt;
    // event=&amp;quot;generatedCode&amp;quot; setting&lt;br /&gt;
	generatedCodeConfig:{&lt;br /&gt;
		generatedCodeTag: &amp;quot;create&amp;quot;, // tag for generated code, eg &amp;quot;create&amp;quot; | &amp;quot;update&amp;quot; | &amp;quot;delete&amp;quot;&lt;br /&gt;
		codeHookTag: &amp;quot;xx&amp;quot;, // which codeHook to initiate flow from&lt;br /&gt;
		// maybe validate: invocationType must exist in &amp;quot;event&amp;quot; array, so don't need to check 2 places when eg creating sns topic&lt;br /&gt;
		invocationType: &amp;quot;ownTopic&amp;quot;, // &amp;quot;ownTopic&amp;quot; | &amp;quot;lambdaSyncInv&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		objType: {}, // which cases in the generated code trigger the flow&lt;br /&gt;
		// .. other settings depending on generated code&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    outputTopic: boolean, &lt;br /&gt;
&lt;br /&gt;
    flowSteps:[&lt;br /&gt;
      In:{ // will generate Topic serviceTag_stage_yyy_In&lt;br /&gt;
        properties:[], // reference to stepProperties key&lt;br /&gt;
        messageAttributes: [] // reference to stepProperties key&lt;br /&gt;
      },&lt;br /&gt;
      // another flow steps&lt;br /&gt;
      flowStep1:{ // will generate Topic serviceTag_stage_yyy_Flow1&lt;br /&gt;
        properties:[], // reference to stepProperties key&lt;br /&gt;
        messageAttributes: [] // reference to stepProperties key&lt;br /&gt;
        event:[&amp;quot;ownTopic&amp;quot;],  // &amp;quot;ownTopic&amp;quot; | &amp;quot;extTopic&amp;quot; | &amp;quot;s3&amp;quot; | &amp;quot;eventBridge&amp;quot; | &amp;quot;lambdaSyncInv&amp;quot; | &amp;quot;lambdaSyncApi&amp;quot; | &amp;quot;generatedCode&amp;quot;&lt;br /&gt;
        // handle splitting logic into awaitingStep/awaitingMultipleSteps&lt;br /&gt;
        // handle splitting logic into paginated lambda&lt;br /&gt;
&lt;br /&gt;
        plugInHooks: [&lt;br /&gt;
			{&lt;br /&gt;
				plugInHookTag: &amp;quot;&amp;quot;,&lt;br /&gt;
				objType:{}, // used to query connection dynamo for an object instance in current flow&lt;br /&gt;
			},&lt;br /&gt;
        ]&lt;br /&gt;
      },&lt;br /&gt;
      Out:{ // will generate Topic serviceTag_stage_yyy_Out&lt;br /&gt;
        properties:[], // reference to stepProperties key&lt;br /&gt;
        messageAttributes: [] // reference to stepProperties key&lt;br /&gt;
      },&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
    stepProperties:{&lt;br /&gt;
      &amp;quot;uuid&amp;quot;:{&lt;br /&gt;
        propertyName:&amp;quot;xxx&amp;quot;,&lt;br /&gt;
        type:&amp;quot;string&amp;quot;,&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;uuid2&amp;quot;:{&lt;br /&gt;
        objectField:{ &lt;br /&gt;
          objType:{},&lt;br /&gt;
          fieldName:&amp;quot;xx&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        overwritePropertyName:&amp;quot;xx&amp;quot; // optional, if have objectField and have overwritePropertyName will overwrite fieldName &lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System Text Schema | SystemTextSchemas.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
	{&lt;br /&gt;
		namespace: &amp;quot;xxx&amp;quot;, // groups files downloaded by frontend&lt;br /&gt;
		systemTextTag: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Auto generated systemText and namespaces ==&lt;br /&gt;
&lt;br /&gt;
=== systemNotification names ===&lt;br /&gt;
&lt;br /&gt;
* namespace: &amp;quot;sysNotification_{notificationGrouping}&amp;quot;&lt;br /&gt;
* systemTextTag: &amp;quot;{notificationTag}&amp;quot;&lt;br /&gt;
* eg shown on notification settings page&lt;br /&gt;
&lt;br /&gt;
=== objType names ===&lt;br /&gt;
&lt;br /&gt;
* namespace: &amp;quot;objTypes&amp;quot;&lt;br /&gt;
* systemTextTag: &amp;quot;{serviceTag}_{objectType}&amp;quot;&lt;br /&gt;
* eg shown on config pages, eg pulldown list of object types&lt;br /&gt;
&lt;br /&gt;
=== objType field name descriptions ===&lt;br /&gt;
&lt;br /&gt;
* namespace: &amp;quot;objType_fielddesc_{serviceTag}_{objectType}&amp;quot;&lt;br /&gt;
* systemTextTag: &amp;quot;{fieldname}&amp;quot;&lt;br /&gt;
* eg shown on config pages, eg info box for each field name&lt;br /&gt;
&lt;br /&gt;
= System Notification Schema | SystemNotificationSchemas.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
	{&lt;br /&gt;
		notificationTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		notificationGrouping: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
		weight: &amp;quot;##&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Generated S3 files =&lt;br /&gt;
&lt;br /&gt;
* generate multiple files for different uses, eg:&lt;br /&gt;
*# list of saved fieldNames for Create&lt;br /&gt;
*# list of saved+calculated for Update/Info pages&lt;br /&gt;
*# graphSchemas&lt;br /&gt;
*# relationships (used by Search/Sort Results)&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== Find Deployed Service Name ==&lt;br /&gt;
&lt;br /&gt;
* other services can use fixed serviceTag to get deployed serviceName from serviceSchema on S3&lt;br /&gt;
* used to build resource names for external services&lt;br /&gt;
* eg when one service needs to send a message into an SNS belonging to a different service&lt;br /&gt;
&lt;br /&gt;
== Standard Create, Update, List, Delete pages ==&lt;br /&gt;
&lt;br /&gt;
* List and Delete are maybe not required, use table data system instead.&lt;br /&gt;
* object schema can add validation information that can be used on the frontend to check before sending to backend, and by the backend to validate the data before handling&lt;br /&gt;
&lt;br /&gt;
=== Create Object ===&lt;br /&gt;
&lt;br /&gt;
* can configure what fields are shown&lt;br /&gt;
* requiredOnCreate fields must be shown &lt;br /&gt;
&lt;br /&gt;
=== Edit Object ===&lt;br /&gt;
&lt;br /&gt;
* users setup any number of pages for object types with configurable fields shown&lt;br /&gt;
* fields can be either display only or edit&lt;br /&gt;
* each field can adjust it's display properties (perhaps via cssStyles)&lt;br /&gt;
&lt;br /&gt;
== Menu Config ==&lt;br /&gt;
&lt;br /&gt;
When adding menu items can add links to create, update, list, delete objects, user chooses the service then from that service's list of objects and what action is being performed. For update/delete perhaps links to a standard page that asks for the identifier before presenting the page.&lt;br /&gt;
&lt;br /&gt;
== Tabled Data ==&lt;br /&gt;
&lt;br /&gt;
When viewing tabled data the frontend pulls the tableId's config from backend, then when requesting the data also requests the serviceTag &amp;gt; objectType schema for use when displaying the data.&lt;br /&gt;
&lt;br /&gt;
== Code Standardization ==&lt;br /&gt;
&lt;br /&gt;
Code such as middleware validation schema and saving data to databases can be standardized.&lt;br /&gt;
&lt;br /&gt;
== Code Generation ==&lt;br /&gt;
&lt;br /&gt;
Endpoints per object for actions such as Create/Delete/Update can be automatically generated from objectSchema.&lt;br /&gt;
&lt;br /&gt;
=== Code Generation Structure ===&lt;br /&gt;
&lt;br /&gt;
* npm for generic code generation, can be used in any project, includes functions for generating Source files from templates and developer files&lt;br /&gt;
* npm for per project specific files, eg templates for the project (Create/Update/.. code)&lt;br /&gt;
* Empty Service Template has GenerateCode.js script file in root dir that is run to generate code, it invokes a generation function from generic npm with param that points to per project npm's templates&lt;br /&gt;
* generated Source retains hook tags (and any developer added code), so if developer wants to update developer's file with updated template code they can generate code and simply copy generated Source to src folder&lt;br /&gt;
&lt;br /&gt;
= Graph Server Config =&lt;br /&gt;
&lt;br /&gt;
* S3 has a list of graphServerTag's linking to the GraphHandler serviceTag responsible for the graph&lt;br /&gt;
* multiple graphServerTags can point to one GraphHandler, combining graphs into one server&lt;br /&gt;
* when creating each GraphHandler's graph schemas, for each field split out the fields into each GraphHandler using the graphServerTag, if multiple graphServerTags for a field point to the same GraphHandler combine the fields to create GraphHandler's graph schema&lt;br /&gt;
* every GraphHandler an object is saved into will require it's identifiers&lt;br /&gt;
* when eg updating fields for an object separate the fields per GraphHandler before sending the request to update each graph&lt;br /&gt;
&lt;br /&gt;
= Extended Object Types =&lt;br /&gt;
&lt;br /&gt;
* Allows for one graph node to have multiple labels&lt;br /&gt;
* graph schema is created for both the core object and the extended object&lt;br /&gt;
* eg Media Manager's has a node schema for &amp;quot;media&amp;quot; object type, and Image service has a node schema for &amp;quot;image&amp;quot; object type&lt;br /&gt;
* the extended object builds it's schema by combining core + extended settings&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Per Service Schemas|Per Service Schemas]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4228</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4228"/>
		<updated>2026-03-20T04:32:10Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Schedules Instance using AWS EventBridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
*'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
*''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
*'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4227</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4227"/>
		<updated>2026-03-20T04:31:11Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Schedules Instance using AWS EventBridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
[[File:CronExpression.png |1000px]]&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
[[File:EventBridgeTargetDetial.png|1000px]]&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:EventBridgeTargetDetial.png&amp;diff=4226</id>
		<title>File:EventBridgeTargetDetial.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:EventBridgeTargetDetial.png&amp;diff=4226"/>
		<updated>2026-03-20T04:28:30Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:CronExpression.png&amp;diff=4225</id>
		<title>File:CronExpression.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:CronExpression.png&amp;diff=4225"/>
		<updated>2026-03-20T04:26:27Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4224</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4224"/>
		<updated>2026-03-20T03:57:08Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Schedules Instance using AWS EventBridge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
[[File:Step1CreateSpecifyTagEvenBridge.png |1000px]]&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:Step1CreateSpecifyTagEvenBridge.png&amp;diff=4223</id>
		<title>File:Step1CreateSpecifyTagEvenBridge.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:Step1CreateSpecifyTagEvenBridge.png&amp;diff=4223"/>
		<updated>2026-03-20T03:54:36Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4222</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4222"/>
		<updated>2026-03-20T03:51:12Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Resource Ec2 settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
[[File:AddSettingSequrityGroup.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:AddSettingSequrityGroup.png&amp;diff=4221</id>
		<title>File:AddSettingSequrityGroup.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:AddSettingSequrityGroup.png&amp;diff=4221"/>
		<updated>2026-03-20T03:50:52Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4220</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4220"/>
		<updated>2026-03-20T03:46:08Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Internet Gateway */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4219</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4219"/>
		<updated>2026-03-20T03:45:14Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create VPC Endpoint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
[[File:Screenshot from 2026-03-18 15-32-04.png|1000px]]&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
[[File:AddSubNet.png |1000px]]&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
[[File:AddSequrityGroup.png |1000px]]&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:AddSequrityGroup.png&amp;diff=4218</id>
		<title>File:AddSequrityGroup.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:AddSequrityGroup.png&amp;diff=4218"/>
		<updated>2026-03-20T03:44:41Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:AddSubNet.png&amp;diff=4217</id>
		<title>File:AddSubNet.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:AddSubNet.png&amp;diff=4217"/>
		<updated>2026-03-20T03:42:30Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:Screenshot_from_2026-03-18_15-32-04.png&amp;diff=4216</id>
		<title>File:Screenshot from 2026-03-18 15-32-04.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:Screenshot_from_2026-03-18_15-32-04.png&amp;diff=4216"/>
		<updated>2026-03-20T02:58:49Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4215</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4215"/>
		<updated>2026-03-20T02:55:44Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Route Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
[[File:CreateRouteTable.png |1000px ]]&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
[[File:SubnetAssociations.png |1000px]]&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
[[File:EditRoute.png |1000px ]]&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created&lt;br /&gt;
&lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:EditRoute.png&amp;diff=4214</id>
		<title>File:EditRoute.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:EditRoute.png&amp;diff=4214"/>
		<updated>2026-03-20T02:40:48Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:SubnetAssociations.png&amp;diff=4213</id>
		<title>File:SubnetAssociations.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:SubnetAssociations.png&amp;diff=4213"/>
		<updated>2026-03-20T02:39:12Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:CreateRouteTable.png&amp;diff=4212</id>
		<title>File:CreateRouteTable.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:CreateRouteTable.png&amp;diff=4212"/>
		<updated>2026-03-20T02:37:23Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4211</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4211"/>
		<updated>2026-03-20T02:35:36Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Subnet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
[[File:CreateSubNet.png |1000px ]]&lt;br /&gt;
* Select VPC&lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-55-26.png |1000px ]]&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:Screenshot_from_2026-03-18_14-55-26.png&amp;diff=4210</id>
		<title>File:Screenshot from 2026-03-18 14-55-26.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:Screenshot_from_2026-03-18_14-55-26.png&amp;diff=4210"/>
		<updated>2026-03-20T02:34:36Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:CreateSubNet.png&amp;diff=4209</id>
		<title>File:CreateSubNet.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:CreateSubNet.png&amp;diff=4209"/>
		<updated>2026-03-20T02:33:05Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4208</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4208"/>
		<updated>2026-03-20T02:31:00Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create VPC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
[[File:CreateVPCifExist.png |1000px ]]&lt;br /&gt;
*'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
[[File:Screenshot from 2026-03-18 14-28-11.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:Screenshot_from_2026-03-18_14-28-11.png&amp;diff=4207</id>
		<title>File:Screenshot from 2026-03-18 14-28-11.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:Screenshot_from_2026-03-18_14-28-11.png&amp;diff=4207"/>
		<updated>2026-03-20T02:29:18Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:CreateVPCifExist.png&amp;diff=4206</id>
		<title>File:CreateVPCifExist.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:CreateVPCifExist.png&amp;diff=4206"/>
		<updated>2026-03-20T02:27:07Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4205</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4205"/>
		<updated>2026-03-20T02:21:41Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create VPC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
[[File:CreateVPCIfNotExist.png |1000px ]]&lt;br /&gt;
&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:CreateVPCIfNotExist.png&amp;diff=4204</id>
		<title>File:CreateVPCIfNotExist.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:CreateVPCIfNotExist.png&amp;diff=4204"/>
		<updated>2026-03-20T02:20:40Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4203</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4203"/>
		<updated>2026-03-20T02:04:57Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Key pairs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1000px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4202</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4202"/>
		<updated>2026-03-20T02:03:56Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Key pairs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |1500px ]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4201</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4201"/>
		<updated>2026-03-19T09:37:49Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Key pairs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4200</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4200"/>
		<updated>2026-03-19T09:33:11Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Key pairs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png 200px|thumb|left]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4199</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4199"/>
		<updated>2026-03-19T09:32:06Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create Key pairs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
[[File:CreateKeyPairs.png |frame|center|]]&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later&lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-09_-_Microfrontend_Deployment_Guide_to_AWS&amp;diff=4198</id>
		<title>2026-03-09 - Microfrontend Deployment Guide to AWS</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-09_-_Microfrontend_Deployment_Guide_to_AWS&amp;diff=4198"/>
		<updated>2026-03-19T09:28:51Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Building a Microfrontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Microfrontend Deployment Guide to AWS =&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
# [[#Build_Process|Build Process]]&lt;br /&gt;
# [[#Deploying_Individual_Microfrontends|Deploying Individual Microfrontends]]&lt;br /&gt;
# [[#RootConfig_Deployment|RootConfig Deployment]]&lt;br /&gt;
# [[#CloudFront_Configuration_for_RootConfig|CloudFront Configuration for RootConfig]]&lt;br /&gt;
# [[#Deployment_Checklist|Deployment Checklist]]&lt;br /&gt;
# [[#Troubleshooting|Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Build Process ==&lt;br /&gt;
&lt;br /&gt;
=== Building a Microfrontend ===&lt;br /&gt;
&lt;br /&gt;
Each microfrontend project contains a build script in &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[File:MfeBuildScript.png |frame|center|package.json file in mfe]]&lt;br /&gt;
&lt;br /&gt;
To build the microfrontend, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm run build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command will create a &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder containing the compiled assets:&lt;br /&gt;
&lt;br /&gt;
[[File:MfeFileWhenBuild.png |frame|center|output file when build]]&lt;br /&gt;
&lt;br /&gt;
=== Uploading to S3 ===&lt;br /&gt;
&lt;br /&gt;
After building, upload the contents of the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder to your S3 bucket:&lt;br /&gt;
&lt;br /&gt;
Note|Upload only the '''contents''' of the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder, not the folder itself.&lt;br /&gt;
=== S3 Bucket Configuration ===&lt;br /&gt;
&lt;br /&gt;
==== CORS Configuration ====&lt;br /&gt;
&lt;br /&gt;
Configure CORS (Cross-Origin Resource Sharing) on your S3 bucket to allow CloudFront and browsers to access the files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;AllowedHeaders&amp;quot;: [],&lt;br /&gt;
        &amp;quot;AllowedMethods&amp;quot;: [&lt;br /&gt;
            &amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;POST&amp;quot;,&lt;br /&gt;
            &amp;quot;DELETE&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;AllowedOrigins&amp;quot;: [&lt;br /&gt;
            &amp;quot;*&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;ExposeHeaders&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''To configure CORS:'''&lt;br /&gt;
# Go to AWS S3 Console&lt;br /&gt;
# Select your bucket&lt;br /&gt;
# Navigate to '''Permissions''' &amp;gt; '''CORS'''&lt;br /&gt;
# Paste the JSON configuration above&lt;br /&gt;
# Save changes&lt;br /&gt;
&lt;br /&gt;
==== Bucket Policy ====&lt;br /&gt;
&lt;br /&gt;
Configure bucket permissions to allow CloudFront to access the S3 objects.&lt;br /&gt;
&lt;br /&gt;
'''Option 1: Restrict to Specific CloudFront Distributions (Recommended)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;2008-10-17&amp;quot;,&lt;br /&gt;
    &amp;quot;Id&amp;quot;: &amp;quot;PolicyForCloudFrontPrivateContent&amp;quot;,&lt;br /&gt;
    &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Sid&amp;quot;: &amp;quot;AllowCloudFrontServicePrincipal&amp;quot;,&lt;br /&gt;
            &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
            &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
                &amp;quot;Service&amp;quot;: &amp;quot;cloudfront.amazonaws.com&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Action&amp;quot;: &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
            &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::{bucketName}/*&amp;quot;,&lt;br /&gt;
            &amp;quot;Condition&amp;quot;: {&lt;br /&gt;
                &amp;quot;ArnLike&amp;quot;: {&lt;br /&gt;
                    &amp;quot;AWS:SourceArn&amp;quot;: [&lt;br /&gt;
                        &amp;quot;arn:aws:cloudfront::{accountId}:distribution/E3PN5E1PT6G23P&amp;quot;,&lt;br /&gt;
                        &amp;quot;arn:aws:cloudfront::{accountId}:distribution/E2Y6DGLLYQFVWW&amp;quot;&lt;br /&gt;
                    ]&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Replace:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;{bucketName}&amp;lt;/code&amp;gt; with your actual S3 bucket name&lt;br /&gt;
* &amp;lt;code&amp;gt;{accountId}&amp;lt;/code&amp;gt; with your AWS account ID&lt;br /&gt;
* Distribution IDs with your actual CloudFront distribution IDs&lt;br /&gt;
&lt;br /&gt;
'''Option 2: Allow Public Read Access'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
    &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Sid&amp;quot;: &amp;quot;AllowPublicReadAccess&amp;quot;,&lt;br /&gt;
            &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
            &amp;quot;Principal&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
            &amp;quot;Action&amp;quot;: &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
            &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::{bucketName}/*&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Replace:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;{bucketName}&amp;lt;/code&amp;gt; with your actual S3 bucket name&lt;br /&gt;
&lt;br /&gt;
Important|Option 1 is more secure as it restricts access to specific CloudFront distributions only.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Deploying Individual Microfrontends ==&lt;br /&gt;
&lt;br /&gt;
Each microfrontend needs its own CloudFront distribution for global content delivery.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: General Settings ===&lt;br /&gt;
&lt;br /&gt;
Configure the CloudFront distribution with the following general settings:&lt;br /&gt;
&lt;br /&gt;
[[File:generalSettingMfe.png |frame|center|cloudfront general setting of mfe]]&lt;br /&gt;
&lt;br /&gt;
'''Key Points:'''&lt;br /&gt;
* Set a descriptive name for the distribution&lt;br /&gt;
* Enable IPv6 if required&lt;br /&gt;
* Choose appropriate price class based on your target regions&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Origin Settings ===&lt;br /&gt;
&lt;br /&gt;
Configure the S3 bucket as the origin:&lt;br /&gt;
&lt;br /&gt;
[[File:originSettingMfe.png |frame|center|cloudfront origin setting of mfe]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Origin Domain:''' Select your S3 bucket&lt;br /&gt;
* '''Origin Path:''' Leave empty or specify the microfrontend folder path&lt;br /&gt;
* '''Origin Access:''' Use Origin Access Control (OAC) for security&lt;br /&gt;
* '''Enable Origin Shield:''' Optional, for better caching&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Behaviors Settings ===&lt;br /&gt;
&lt;br /&gt;
Configure caching behavior:&lt;br /&gt;
&lt;br /&gt;
[[File:behaviorsSettingMfe.png |frame|center|cloudfront behaviors setting of mfe]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Path Pattern:''' Default (*)&lt;br /&gt;
* '''Viewer Protocol Policy:''' Redirect HTTP to HTTPS&lt;br /&gt;
* '''Allowed HTTP Methods:''' GET, HEAD, OPTIONS&lt;br /&gt;
* '''Cache Policy:''' CachingOptimized or custom&lt;br /&gt;
* '''Origin Request Policy:''' Configure as needed&lt;br /&gt;
* '''Response Headers Policy:''' Add CORS headers if required&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== RootConfig Deployment ==&lt;br /&gt;
&lt;br /&gt;
The RootConfig serves as the main entry point and orchestrates all microfrontends.&lt;br /&gt;
&lt;br /&gt;
=== Import Configuration ===&lt;br /&gt;
&lt;br /&gt;
==== Local Development Import ====&lt;br /&gt;
&lt;br /&gt;
For local development, use local imports:&lt;br /&gt;
&lt;br /&gt;
[[File:importLocalRootConfig.png |frame|center|rootconfig import local]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;@org/microfrontend-name&amp;quot;: &amp;quot;http://localhost:8080/org-microfrontend-name.js&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Production Deployment Import ====&lt;br /&gt;
&lt;br /&gt;
For production, use CloudFront URLs:&lt;br /&gt;
&lt;br /&gt;
[[File:importDeploymentRootConfig.png |frame|center|rootconfig import deployment]]&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;@org/microfrontend-name&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-microfrontend-name.js&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Content Security Policy (CSP) ===&lt;br /&gt;
&lt;br /&gt;
Add Content-Security-Policy meta tag to the &amp;lt;code&amp;gt;index.ejs&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
[[File:importCspRootConfig.png |frame|center|rootconfig import csp]]&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Security-Policy&amp;quot;&lt;br /&gt;
      content=&amp;quot;default-src 'self';&lt;br /&gt;
               script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net *.cloudfront.net *.amazonaws.com;&lt;br /&gt;
               style-src 'self' 'unsafe-inline';&lt;br /&gt;
               connect-src 'self' *.amazonaws.com;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ImportMap File in S3 ===&lt;br /&gt;
&lt;br /&gt;
The import map defines module resolution for all microfrontends:&lt;br /&gt;
&lt;br /&gt;
[[File:importMapFileRootConfig.png |frame|center|rootconfig importmap]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Structure:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;imports&amp;quot;: {&lt;br /&gt;
    &amp;quot;@org/root-config&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-root-config.js&amp;quot;,&lt;br /&gt;
    &amp;quot;@org/microfrontend-1&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-microfrontend-1.js&amp;quot;,&lt;br /&gt;
    &amp;quot;@org/microfrontend-2&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-microfrontend-2.js&amp;quot;,&lt;br /&gt;
    &amp;quot;react&amp;quot;: &amp;quot;https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js&amp;quot;,&lt;br /&gt;
    &amp;quot;react-dom&amp;quot;: &amp;quot;https://cdn.jsdelivr.net/npm/react-dom@17/umd/react-dom.production.min.js&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload this file to S3:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp importmap.json s3://izarafrontend/importmap.json --content-type &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== CloudFront Configuration for RootConfig ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: General Configuration ===&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigGeneral.png |frame|center|cloudfront general setting of root config]]&lt;br /&gt;
&lt;br /&gt;
'''Key Configuration:'''&lt;br /&gt;
* '''Default Root Object:''' &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Description:''' Descriptive name for the distribution&lt;br /&gt;
* '''Enable IPv6:''' Yes (recommended)&lt;br /&gt;
* '''Price Class:''' Choose based on regions&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Origins Configuration ===&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigOrigins.png |frame|center|cloudfront origin setting of root config]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Origin Domain:''' Select RootConfig S3 bucket&lt;br /&gt;
* '''Origin Access:''' Use Origin Access Control (OAC)&lt;br /&gt;
* '''Origin Shield:''' Optional&lt;br /&gt;
* '''Ensure S3 bucket policy allows CloudFront access'''&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Behaviors Configuration ===&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigBehaviors.png |frame|center|cloudfront behaviors setting of root config]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Path Pattern:''' Default (*)&lt;br /&gt;
* '''Viewer Protocol Policy:''' Redirect HTTP to HTTPS&lt;br /&gt;
* '''Allowed HTTP Methods:''' GET, HEAD, OPTIONS&lt;br /&gt;
* '''Cache Policy:''' CachingOptimized&lt;br /&gt;
* '''Origin Request Policy:''' CORS-CustomOrigin or custom&lt;br /&gt;
* '''Response Headers Policy:''' SimpleCORS&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Error Pages Configuration ===&lt;br /&gt;
&lt;br /&gt;
Configure custom error responses for SPA routing:&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigErrorPages.png |frame|center|cloudfront errorPages setting of root config]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Required Error Page:'''&lt;br /&gt;
* '''HTTP Error Code:''' 403 (Forbidden) and 404 (Not Found)&lt;br /&gt;
* '''Customize Error Response:''' Yes&lt;br /&gt;
* '''Response Page Path:''' &amp;lt;code&amp;gt;/index.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''HTTP Response Code:''' 200 (OK)&lt;br /&gt;
* '''Error Caching Minimum TTL:''' 300 seconds&lt;br /&gt;
&lt;br /&gt;
Important|This configuration ensures that client-side routing works correctly and handles redirects during login/logout flows.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Deployment Checklist ==&lt;br /&gt;
&lt;br /&gt;
=== For Each Microfrontend ===&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create S3 bucket (if not exists)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure S3 bucket CORS policy&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Run &amp;lt;code&amp;gt;npm run build&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Upload &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder contents to S3&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create CloudFront distribution&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure Origin (S3 bucket)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure Behaviors (caching, HTTPS)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Update S3 bucket policy to allow CloudFront access&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Note the CloudFront URL&lt;br /&gt;
&lt;br /&gt;
=== For RootConfig ===&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create S3 bucket for RootConfig (if not exists)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure S3 bucket CORS policy&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Update import map with production URLs&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Add Content-Security-Policy meta tag&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Upload import map to S3&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Run &amp;lt;code&amp;gt;npm run build&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Upload &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder contents to S3&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create CloudFront distribution with &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; as default root object&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure error pages (403/404 → 200)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Update S3 bucket policy to allow CloudFront access&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Test all microfrontends load correctly&lt;br /&gt;
&lt;br /&gt;
=== Post-Deployment ===&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Test all routes work correctly&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Verify login/logout redirects&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Check console for CSP violations&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Test on different browsers&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Verify HTTPS is enforced&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Issue: Microfrontend not loading ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Check CloudFront URL in import map&lt;br /&gt;
* Verify S3 bucket permissions&lt;br /&gt;
* Check CORS configuration&lt;br /&gt;
* Inspect browser console for errors&lt;br /&gt;
&lt;br /&gt;
=== Issue: 403/404 errors on page refresh ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Configure CloudFront error pages to redirect to &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; with 200 response code&lt;br /&gt;
&lt;br /&gt;
=== Issue: CSP violations ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Update Content-Security-Policy meta tag to allow required domains&lt;br /&gt;
* Check browser console for specific violations&lt;br /&gt;
&lt;br /&gt;
=== Issue: Module not found errors ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Verify import map JSON is valid&lt;br /&gt;
* Check that all microfrontend URLs are correct&lt;br /&gt;
* Ensure import map is accessible (CORS, permissions)&lt;br /&gt;
&lt;br /&gt;
=== Issue: CORS errors or Access Denied ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Verify S3 bucket CORS configuration is set correctly&lt;br /&gt;
* Check S3 bucket policy allows CloudFront access&lt;br /&gt;
* Ensure CloudFront distribution ARN is included in bucket policy&lt;br /&gt;
* Verify CloudFront Origin Access Control (OAC) is configured&lt;br /&gt;
* Check that S3 bucket is not blocking public access if using public policy&lt;br /&gt;
* Clear CloudFront cache after policy changes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://single-spa.js.org/ Single-SPA Documentation]&lt;br /&gt;
* [https://docs.aws.amazon.com/cloudfront/ AWS CloudFront Documentation]&lt;br /&gt;
* [https://github.com/systemjs/systemjs SystemJS Import Maps]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-09]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-09_-_Microfrontend_Deployment_Guide_to_AWS&amp;diff=4197</id>
		<title>2026-03-09 - Microfrontend Deployment Guide to AWS</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-09_-_Microfrontend_Deployment_Guide_to_AWS&amp;diff=4197"/>
		<updated>2026-03-19T09:26:07Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Building a Microfrontend */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Microfrontend Deployment Guide to AWS =&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
# [[#Build_Process|Build Process]]&lt;br /&gt;
# [[#Deploying_Individual_Microfrontends|Deploying Individual Microfrontends]]&lt;br /&gt;
# [[#RootConfig_Deployment|RootConfig Deployment]]&lt;br /&gt;
# [[#CloudFront_Configuration_for_RootConfig|CloudFront Configuration for RootConfig]]&lt;br /&gt;
# [[#Deployment_Checklist|Deployment Checklist]]&lt;br /&gt;
# [[#Troubleshooting|Troubleshooting]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Build Process ==&lt;br /&gt;
&lt;br /&gt;
=== Building a Microfrontend ===&lt;br /&gt;
&lt;br /&gt;
Each microfrontend project contains a build script in &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
[[File:CreateKeyPairs.png]]&lt;br /&gt;
&lt;br /&gt;
To build the microfrontend, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
npm run build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command will create a &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder containing the compiled assets:&lt;br /&gt;
&lt;br /&gt;
[[File:MfeFileWhenBuild.png |frame|center|output file when build]]&lt;br /&gt;
&lt;br /&gt;
=== Uploading to S3 ===&lt;br /&gt;
&lt;br /&gt;
After building, upload the contents of the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder to your S3 bucket:&lt;br /&gt;
&lt;br /&gt;
Note|Upload only the '''contents''' of the &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder, not the folder itself.&lt;br /&gt;
=== S3 Bucket Configuration ===&lt;br /&gt;
&lt;br /&gt;
==== CORS Configuration ====&lt;br /&gt;
&lt;br /&gt;
Configure CORS (Cross-Origin Resource Sharing) on your S3 bucket to allow CloudFront and browsers to access the files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;AllowedHeaders&amp;quot;: [],&lt;br /&gt;
        &amp;quot;AllowedMethods&amp;quot;: [&lt;br /&gt;
            &amp;quot;GET&amp;quot;,&lt;br /&gt;
            &amp;quot;PUT&amp;quot;,&lt;br /&gt;
            &amp;quot;POST&amp;quot;,&lt;br /&gt;
            &amp;quot;DELETE&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;AllowedOrigins&amp;quot;: [&lt;br /&gt;
            &amp;quot;*&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;ExposeHeaders&amp;quot;: []&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''To configure CORS:'''&lt;br /&gt;
# Go to AWS S3 Console&lt;br /&gt;
# Select your bucket&lt;br /&gt;
# Navigate to '''Permissions''' &amp;gt; '''CORS'''&lt;br /&gt;
# Paste the JSON configuration above&lt;br /&gt;
# Save changes&lt;br /&gt;
&lt;br /&gt;
==== Bucket Policy ====&lt;br /&gt;
&lt;br /&gt;
Configure bucket permissions to allow CloudFront to access the S3 objects.&lt;br /&gt;
&lt;br /&gt;
'''Option 1: Restrict to Specific CloudFront Distributions (Recommended)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;2008-10-17&amp;quot;,&lt;br /&gt;
    &amp;quot;Id&amp;quot;: &amp;quot;PolicyForCloudFrontPrivateContent&amp;quot;,&lt;br /&gt;
    &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Sid&amp;quot;: &amp;quot;AllowCloudFrontServicePrincipal&amp;quot;,&lt;br /&gt;
            &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
            &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
                &amp;quot;Service&amp;quot;: &amp;quot;cloudfront.amazonaws.com&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;Action&amp;quot;: &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
            &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::{bucketName}/*&amp;quot;,&lt;br /&gt;
            &amp;quot;Condition&amp;quot;: {&lt;br /&gt;
                &amp;quot;ArnLike&amp;quot;: {&lt;br /&gt;
                    &amp;quot;AWS:SourceArn&amp;quot;: [&lt;br /&gt;
                        &amp;quot;arn:aws:cloudfront::{accountId}:distribution/E3PN5E1PT6G23P&amp;quot;,&lt;br /&gt;
                        &amp;quot;arn:aws:cloudfront::{accountId}:distribution/E2Y6DGLLYQFVWW&amp;quot;&lt;br /&gt;
                    ]&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Replace:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;{bucketName}&amp;lt;/code&amp;gt; with your actual S3 bucket name&lt;br /&gt;
* &amp;lt;code&amp;gt;{accountId}&amp;lt;/code&amp;gt; with your AWS account ID&lt;br /&gt;
* Distribution IDs with your actual CloudFront distribution IDs&lt;br /&gt;
&lt;br /&gt;
'''Option 2: Allow Public Read Access'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
    &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;quot;Sid&amp;quot;: &amp;quot;AllowPublicReadAccess&amp;quot;,&lt;br /&gt;
            &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
            &amp;quot;Principal&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
            &amp;quot;Action&amp;quot;: &amp;quot;s3:GetObject&amp;quot;,&lt;br /&gt;
            &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:s3:::{bucketName}/*&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Replace:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;{bucketName}&amp;lt;/code&amp;gt; with your actual S3 bucket name&lt;br /&gt;
&lt;br /&gt;
Important|Option 1 is more secure as it restricts access to specific CloudFront distributions only.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Deploying Individual Microfrontends ==&lt;br /&gt;
&lt;br /&gt;
Each microfrontend needs its own CloudFront distribution for global content delivery.&lt;br /&gt;
&lt;br /&gt;
=== Step 1: General Settings ===&lt;br /&gt;
&lt;br /&gt;
Configure the CloudFront distribution with the following general settings:&lt;br /&gt;
&lt;br /&gt;
[[File:generalSettingMfe.png |frame|center|cloudfront general setting of mfe]]&lt;br /&gt;
&lt;br /&gt;
'''Key Points:'''&lt;br /&gt;
* Set a descriptive name for the distribution&lt;br /&gt;
* Enable IPv6 if required&lt;br /&gt;
* Choose appropriate price class based on your target regions&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Origin Settings ===&lt;br /&gt;
&lt;br /&gt;
Configure the S3 bucket as the origin:&lt;br /&gt;
&lt;br /&gt;
[[File:originSettingMfe.png |frame|center|cloudfront origin setting of mfe]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Origin Domain:''' Select your S3 bucket&lt;br /&gt;
* '''Origin Path:''' Leave empty or specify the microfrontend folder path&lt;br /&gt;
* '''Origin Access:''' Use Origin Access Control (OAC) for security&lt;br /&gt;
* '''Enable Origin Shield:''' Optional, for better caching&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Behaviors Settings ===&lt;br /&gt;
&lt;br /&gt;
Configure caching behavior:&lt;br /&gt;
&lt;br /&gt;
[[File:behaviorsSettingMfe.png |frame|center|cloudfront behaviors setting of mfe]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Path Pattern:''' Default (*)&lt;br /&gt;
* '''Viewer Protocol Policy:''' Redirect HTTP to HTTPS&lt;br /&gt;
* '''Allowed HTTP Methods:''' GET, HEAD, OPTIONS&lt;br /&gt;
* '''Cache Policy:''' CachingOptimized or custom&lt;br /&gt;
* '''Origin Request Policy:''' Configure as needed&lt;br /&gt;
* '''Response Headers Policy:''' Add CORS headers if required&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== RootConfig Deployment ==&lt;br /&gt;
&lt;br /&gt;
The RootConfig serves as the main entry point and orchestrates all microfrontends.&lt;br /&gt;
&lt;br /&gt;
=== Import Configuration ===&lt;br /&gt;
&lt;br /&gt;
==== Local Development Import ====&lt;br /&gt;
&lt;br /&gt;
For local development, use local imports:&lt;br /&gt;
&lt;br /&gt;
[[File:importLocalRootConfig.png |frame|center|rootconfig import local]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;@org/microfrontend-name&amp;quot;: &amp;quot;http://localhost:8080/org-microfrontend-name.js&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Production Deployment Import ====&lt;br /&gt;
&lt;br /&gt;
For production, use CloudFront URLs:&lt;br /&gt;
&lt;br /&gt;
[[File:importDeploymentRootConfig.png |frame|center|rootconfig import deployment]]&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;@org/microfrontend-name&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-microfrontend-name.js&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Content Security Policy (CSP) ===&lt;br /&gt;
&lt;br /&gt;
Add Content-Security-Policy meta tag to the &amp;lt;code&amp;gt;index.ejs&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
[[File:importCspRootConfig.png |frame|center|rootconfig import csp]]&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Security-Policy&amp;quot;&lt;br /&gt;
      content=&amp;quot;default-src 'self';&lt;br /&gt;
               script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net *.cloudfront.net *.amazonaws.com;&lt;br /&gt;
               style-src 'self' 'unsafe-inline';&lt;br /&gt;
               connect-src 'self' *.amazonaws.com;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ImportMap File in S3 ===&lt;br /&gt;
&lt;br /&gt;
The import map defines module resolution for all microfrontends:&lt;br /&gt;
&lt;br /&gt;
[[File:importMapFileRootConfig.png |frame|center|rootconfig importmap]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Structure:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;imports&amp;quot;: {&lt;br /&gt;
    &amp;quot;@org/root-config&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-root-config.js&amp;quot;,&lt;br /&gt;
    &amp;quot;@org/microfrontend-1&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-microfrontend-1.js&amp;quot;,&lt;br /&gt;
    &amp;quot;@org/microfrontend-2&amp;quot;: &amp;quot;https://d123456789.cloudfront.net/org-microfrontend-2.js&amp;quot;,&lt;br /&gt;
    &amp;quot;react&amp;quot;: &amp;quot;https://cdn.jsdelivr.net/npm/react@17/umd/react.production.min.js&amp;quot;,&lt;br /&gt;
    &amp;quot;react-dom&amp;quot;: &amp;quot;https://cdn.jsdelivr.net/npm/react-dom@17/umd/react-dom.production.min.js&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload this file to S3:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
aws s3 cp importmap.json s3://izarafrontend/importmap.json --content-type &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== CloudFront Configuration for RootConfig ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1: General Configuration ===&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigGeneral.png |frame|center|cloudfront general setting of root config]]&lt;br /&gt;
&lt;br /&gt;
'''Key Configuration:'''&lt;br /&gt;
* '''Default Root Object:''' &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Description:''' Descriptive name for the distribution&lt;br /&gt;
* '''Enable IPv6:''' Yes (recommended)&lt;br /&gt;
* '''Price Class:''' Choose based on regions&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Origins Configuration ===&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigOrigins.png |frame|center|cloudfront origin setting of root config]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Origin Domain:''' Select RootConfig S3 bucket&lt;br /&gt;
* '''Origin Access:''' Use Origin Access Control (OAC)&lt;br /&gt;
* '''Origin Shield:''' Optional&lt;br /&gt;
* '''Ensure S3 bucket policy allows CloudFront access'''&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Behaviors Configuration ===&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigBehaviors.png |frame|center|cloudfront behaviors setting of root config]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
* '''Path Pattern:''' Default (*)&lt;br /&gt;
* '''Viewer Protocol Policy:''' Redirect HTTP to HTTPS&lt;br /&gt;
* '''Allowed HTTP Methods:''' GET, HEAD, OPTIONS&lt;br /&gt;
* '''Cache Policy:''' CachingOptimized&lt;br /&gt;
* '''Origin Request Policy:''' CORS-CustomOrigin or custom&lt;br /&gt;
* '''Response Headers Policy:''' SimpleCORS&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Error Pages Configuration ===&lt;br /&gt;
&lt;br /&gt;
Configure custom error responses for SPA routing:&lt;br /&gt;
&lt;br /&gt;
[[File:cloudFrontRootConfigErrorPages.png |frame|center|cloudfront errorPages setting of root config]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Required Error Page:'''&lt;br /&gt;
* '''HTTP Error Code:''' 403 (Forbidden) and 404 (Not Found)&lt;br /&gt;
* '''Customize Error Response:''' Yes&lt;br /&gt;
* '''Response Page Path:''' &amp;lt;code&amp;gt;/index.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''HTTP Response Code:''' 200 (OK)&lt;br /&gt;
* '''Error Caching Minimum TTL:''' 300 seconds&lt;br /&gt;
&lt;br /&gt;
Important|This configuration ensures that client-side routing works correctly and handles redirects during login/logout flows.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Deployment Checklist ==&lt;br /&gt;
&lt;br /&gt;
=== For Each Microfrontend ===&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create S3 bucket (if not exists)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure S3 bucket CORS policy&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Run &amp;lt;code&amp;gt;npm run build&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Upload &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder contents to S3&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create CloudFront distribution&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure Origin (S3 bucket)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure Behaviors (caching, HTTPS)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Update S3 bucket policy to allow CloudFront access&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Note the CloudFront URL&lt;br /&gt;
&lt;br /&gt;
=== For RootConfig ===&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create S3 bucket for RootConfig (if not exists)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure S3 bucket CORS policy&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Update import map with production URLs&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Add Content-Security-Policy meta tag&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Upload import map to S3&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Run &amp;lt;code&amp;gt;npm run build&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Upload &amp;lt;code&amp;gt;dist&amp;lt;/code&amp;gt; folder contents to S3&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Create CloudFront distribution with &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; as default root object&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Configure error pages (403/404 → 200)&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Update S3 bucket policy to allow CloudFront access&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Test all microfrontends load correctly&lt;br /&gt;
&lt;br /&gt;
=== Post-Deployment ===&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Test all routes work correctly&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Verify login/logout redirects&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Check console for CSP violations&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Test on different browsers&lt;br /&gt;
* &amp;lt;span&amp;gt;&amp;amp;#9744;&amp;lt;/span&amp;gt; Verify HTTPS is enforced&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Issue: Microfrontend not loading ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Check CloudFront URL in import map&lt;br /&gt;
* Verify S3 bucket permissions&lt;br /&gt;
* Check CORS configuration&lt;br /&gt;
* Inspect browser console for errors&lt;br /&gt;
&lt;br /&gt;
=== Issue: 403/404 errors on page refresh ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Configure CloudFront error pages to redirect to &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; with 200 response code&lt;br /&gt;
&lt;br /&gt;
=== Issue: CSP violations ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Update Content-Security-Policy meta tag to allow required domains&lt;br /&gt;
* Check browser console for specific violations&lt;br /&gt;
&lt;br /&gt;
=== Issue: Module not found errors ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Verify import map JSON is valid&lt;br /&gt;
* Check that all microfrontend URLs are correct&lt;br /&gt;
* Ensure import map is accessible (CORS, permissions)&lt;br /&gt;
&lt;br /&gt;
=== Issue: CORS errors or Access Denied ===&lt;br /&gt;
&lt;br /&gt;
'''Solution:'''&lt;br /&gt;
* Verify S3 bucket CORS configuration is set correctly&lt;br /&gt;
* Check S3 bucket policy allows CloudFront access&lt;br /&gt;
* Ensure CloudFront distribution ARN is included in bucket policy&lt;br /&gt;
* Verify CloudFront Origin Access Control (OAC) is configured&lt;br /&gt;
* Check that S3 bucket is not blocking public access if using public policy&lt;br /&gt;
* Clear CloudFront cache after policy changes&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://single-spa.js.org/ Single-SPA Documentation]&lt;br /&gt;
* [https://docs.aws.amazon.com/cloudfront/ AWS CloudFront Documentation]&lt;br /&gt;
* [https://github.com/systemjs/systemjs SystemJS Import Maps]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-09]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=File:CreateKeyPairs.png&amp;diff=4196</id>
		<title>File:CreateKeyPairs.png</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=File:CreateKeyPairs.png&amp;diff=4196"/>
		<updated>2026-03-19T09:25:08Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4195</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4195"/>
		<updated>2026-03-19T09:19:46Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* Create VPC Endpoint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later &lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2 finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4194</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4194"/>
		<updated>2026-03-19T09:15:21Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later &lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
* enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar -xzf neo4j.tar.gz&lt;br /&gt;
&lt;br /&gt;
mv neo4j-community-* neo4j&lt;br /&gt;
&lt;br /&gt;
cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
nano conf/neo4j.conf&lt;br /&gt;
&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4193</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4193"/>
		<updated>2026-03-19T09:06:15Z</updated>

		<summary type="html">&lt;p&gt;Seagame: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Deploy EC2 Instance =&lt;br /&gt;
* EC2 instance types are purpose-built configurations of virtual servers, designed with different resource combinations to help your applications perform at their best.&lt;br /&gt;
== Setting Ec2 on AWS == &lt;br /&gt;
&lt;br /&gt;
=== Create Key pairs ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Enter key pair name you want &lt;br /&gt;
* select key pair type to RSA &lt;br /&gt;
* select Private key file format to .pem &lt;br /&gt;
* When you created new key pair it will auto download file it will be used later &lt;br /&gt;
&lt;br /&gt;
=== Create VPC ===&lt;br /&gt;
Sign in to aws account that want to create instance -&amp;gt; VPC -&amp;gt; Virtual private cloud -&amp;gt; your VPC&lt;br /&gt;
* '''Create VPC if not exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
**  Required: IPv4 CIDR  // ex : 172.16.0.0/16&lt;br /&gt;
&lt;br /&gt;
* ''' VCP exist '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : can shared VPC for create another instance in same account &lt;br /&gt;
// wait for image&lt;br /&gt;
=== Create Subnet ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select VPC&lt;br /&gt;
// wait for image&lt;br /&gt;
enter subnet name and select Availability Zone then enter IPv4 subnet CIDR block when you finish first subnet click add new subnet and then repeat 3 subnet process&lt;br /&gt;
* Availability Zone&lt;br /&gt;
** Stage : Ohio &amp;gt;&amp;gt; (us-east-2a),(us-east-2b),(us-east-2c)&lt;br /&gt;
* IPv4 subnet CIDR block&lt;br /&gt;
** us-east-2a : 172.16.10.0/24&lt;br /&gt;
** us-east-2b : 172.16.20.0/24&lt;br /&gt;
** us-east-2c : 172.16.30.0/24&lt;br /&gt;
=== Create Internet Gateway ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* When you finish create internet gateway then back to internet gateways page&lt;br /&gt;
* Attach with your VPC:  select your internet gateway -&amp;gt; action -&amp;gt; Attach to VPC and then select your VPC&lt;br /&gt;
&lt;br /&gt;
=== Create Route Table ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* Select you VPC and then create route table &lt;br /&gt;
* Select your route table -&amp;gt; action -&amp;gt; edit subnet associate and then select your subnet &lt;br /&gt;
// wait for image&lt;br /&gt;
* Connect internet gateway for protect config  : Select your route table &amp;gt;&amp;gt; edit route&lt;br /&gt;
// wait for image&lt;br /&gt;
* Add route &lt;br /&gt;
* Destination : 0.0.0.0/0&lt;br /&gt;
* Target : Internet Gateway&amp;gt;&amp;gt; select your Igw from created &lt;br /&gt;
=== Create VPC Endpoint ===&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Select Service:''' &lt;br /&gt;
** com.amazonaws.us-east-2.s3 &lt;br /&gt;
** com.amazonaws.us-east-2.dynamodb&lt;br /&gt;
Select Type: Gateway &amp;gt;&amp;gt; VPC &amp;gt;&amp;gt; route table&lt;br /&gt;
** com.amazonaws.us-east-2.sns&lt;br /&gt;
** com.amazonaws.us-east-2.sqs &lt;br /&gt;
** com.amazonaws.us-east-2.lambda &lt;br /&gt;
Select Type : Interface &amp;gt;&amp;gt;  VPC &amp;gt;&amp;gt; route table &amp;gt;&amp;gt; subnet  &amp;gt;&amp;gt; Security groups&lt;br /&gt;
* '''Subnet settings'''&lt;br /&gt;
// wait for image&lt;br /&gt;
* '''Security groups '''&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note''' : Endpoint Type : Interface , can create those endpoint after created Security groups from deploy Resource EC2finished&lt;br /&gt;
&lt;br /&gt;
== Resource Ec2 settings ==&lt;br /&gt;
* '''in ResourceEC2/ ec2.yml'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;YAML&amp;quot;&amp;gt;&lt;br /&gt;
Parameters:&lt;br /&gt;
&lt;br /&gt;
  ExistingVpcId:&lt;br /&gt;
    Type: AWS::EC2::VPC::Id&lt;br /&gt;
    Description: Use existing VPC&lt;br /&gt;
    Default: vpc-0ce9f21b10cb179f9&lt;br /&gt;
&lt;br /&gt;
  SshKeyPairNeo4j:&lt;br /&gt;
    Description: SSH Keypair to login to the instance&lt;br /&gt;
    Type: AWS::EC2::KeyPair::KeyName&lt;br /&gt;
    Default: ${self:custom.iz_DefaultKeyPairName} # name to config same imageId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
&lt;br /&gt;
  Neo4jSecurityGroup:&lt;br /&gt;
    Type: AWS::EC2::SecurityGroup&lt;br /&gt;
    Properties:&lt;br /&gt;
      GroupDescription: Neo4j Security Group shared&lt;br /&gt;
      GroupName: share-neo4j-shared&lt;br /&gt;
      SecurityGroupIngress:&lt;br /&gt;
        # - CidrIp: 0.0.0.0/0 # set to all traffic for send msg to sns&lt;br /&gt;
        #   IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 22 # SSH&lt;br /&gt;
          ToPort: 22&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7687 # private neo4j port&lt;br /&gt;
          ToPort: 7687&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7474 #  public neo4j port: neo4j&lt;br /&gt;
          ToPort: 7474&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
        - IpProtocol: tcp&lt;br /&gt;
          FromPort: 7473 # #  public neo4j port: Bolt&lt;br /&gt;
          ToPort: 7473&lt;br /&gt;
          CidrIp: 0.0.0.0/0&lt;br /&gt;
      SecurityGroupEgress:&lt;br /&gt;
        - CidrIp: 0.0.0.0/0 # set all traffic&lt;br /&gt;
          IpProtocol: &amp;quot;-1&amp;quot;&lt;br /&gt;
      # VpcId: !Ref VPC&lt;br /&gt;
      VpcId: !Ref ExistingVpcId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  # create neo4j instance&lt;br /&gt;
  Neo4jShared:&lt;br /&gt;
    Type: AWS::EC2::Instance&lt;br /&gt;
    Properties:&lt;br /&gt;
      ImageId: ${self:custom.iz_ImageId}&lt;br /&gt;
      # InstanceInitiatedShutdownBehavior: stop # default&lt;br /&gt;
      InstanceType: t2.medium&lt;br /&gt;
      SecurityGroupIds:&lt;br /&gt;
        - !Ref Neo4jSecurityGroup&lt;br /&gt;
      KeyName: !Ref 'SshKeyPairNeo4j' # NOTE: require existing keypair, please make sure have private key in local.&lt;br /&gt;
      SubnetId: ${self:custom.iz_subnetIds1a}&lt;br /&gt;
&lt;br /&gt;
  ## Elastic IP: neo4j instance public IP address will not chabge everytime we stop/start instance(NOT security)&lt;br /&gt;
  EIP:&lt;br /&gt;
    Type: AWS::EC2::EIP&lt;br /&gt;
    Properties:&lt;br /&gt;
      InstanceId: !Ref Neo4jShared&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Security Group section after deploy if has config between lambda endpoint  not send message out… should add setting inbound rules:&lt;br /&gt;
* Type:HTTPS&amp;gt;&amp;gt;TPC&amp;gt;&amp;gt;443&amp;gt;&amp;gt;172.16.0.0/16&lt;br /&gt;
// wait for image&lt;br /&gt;
= Install Neo4j in terminal =&lt;br /&gt;
After EC2 instance was created: ** must have ec2 instance existing **&lt;br /&gt;
== Install neo4j using .tar ==&lt;br /&gt;
* '''ssh EC2 instance: in Terminal'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
# set permission of key&lt;br /&gt;
chmod 400 &amp;lt;your keys pairs&amp;gt; // ex. GraphHandler-ver-05.pem&lt;br /&gt;
# connect ec2 instance by SSH command&lt;br /&gt;
ssh -i &amp;quot;your-key.pem&amp;quot; ec2-user@&amp;lt;public-ip&amp;gt; -L 7687:&amp;lt;private-ip&amp;gt;:7687&lt;br /&gt;
# Install java: &lt;br /&gt;
sudo yum install java-17-amazon-corretto -y  // neo4j version-5 use java version more than version 11&lt;br /&gt;
# Download and extract neo4j&lt;br /&gt;
* wget https://neo4j.com/artifact.php?name=neo4j-community-5.20.0-unix.tar.gz&lt;br /&gt;
* tar -xzf neo4j.tar.gz&lt;br /&gt;
* mv neo4j-community-* neo4j&lt;br /&gt;
* cd neo4j&lt;br /&gt;
&lt;br /&gt;
# Configure Neo4j bash&lt;br /&gt;
* nano conf/neo4j.conf&lt;br /&gt;
Then Add this into file:&lt;br /&gt;
&lt;br /&gt;
server.default_listen_address=0.0.0.0&lt;br /&gt;
server.default_advertised_address=&amp;lt;your-ec2-private-ip or public-ip&amp;gt;&lt;br /&gt;
server.bolt.listen_address=:7687&lt;br /&gt;
server.http.listen_address=:7474&lt;br /&gt;
&lt;br /&gt;
#Setting start on reboot bash &lt;br /&gt;
* bin/neo4j stop&lt;br /&gt;
&lt;br /&gt;
* sudo nano /etc/systemd/system/neo4j.service&lt;br /&gt;
Add this code in file: &lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Neo4j Graph Database&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=ec2-user&lt;br /&gt;
WorkingDirectory=/home/ec2-user/neo4j&lt;br /&gt;
ExecStart=/home/ec2-user/neo4j/bin/neo4j start&lt;br /&gt;
ExecStop=/home/ec2-user/neo4j/bin/neo4j stop&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RemainAfterExit=true&lt;br /&gt;
Environment=NEO4J_HOME=/home/ec2-user/neo4j&lt;br /&gt;
Environment=JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
# set neo4j password&lt;br /&gt;
* bin/neo4j-admin dbms set-initial-password NewPassword123 // &amp;lt; your password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Then&lt;br /&gt;
* bin/neo4j start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Connect Neo4j Browser == &lt;br /&gt;
* run EC2 Instance that connect to neo4j on AWS &amp;gt; Instance state &amp;gt; Start instance : running status&lt;br /&gt;
* Example browser : http://16.59.197.49:7474/browser/ &lt;br /&gt;
* Connect URL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 neo4j:// public -ip:7687&lt;br /&gt;
 Username: neo4j&lt;br /&gt;
 Password : xxxxxx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Stop and start EC2 instances automatically =&lt;br /&gt;
== Schedules Instance using AWS EventBridge ==&lt;br /&gt;
'''Step1: Specify schedule detail'''&lt;br /&gt;
* Go to Amazon EventBridge &amp;gt;&amp;gt; Schedules → Create Schedules&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Schedule pattern:'''&lt;br /&gt;
* Occurrence → Recurring schedule&lt;br /&gt;
* Time zone: → asia/Bangkok&lt;br /&gt;
* Schedule type → Cron-based schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
'''Note:''' monday to saturday stop instance on 18:00 / 6:00PM&lt;br /&gt;
* Flexible time window : off  → next page &lt;br /&gt;
&lt;br /&gt;
''' Step2 : Select target '''&lt;br /&gt;
// wait for image&lt;br /&gt;
* Amazon EC2 → StopInstances then push Instance Id into JSON format → next page&lt;br /&gt;
&lt;br /&gt;
'''Step3 : Settings '''&lt;br /&gt;
* Schedule state : enable &lt;br /&gt;
* Action after schedule completion : NONE&lt;br /&gt;
* Retry policy and dead-letter queue (DLQ) : NONE&lt;br /&gt;
* Set Permissions: → Go to IAM console to create role permission then select an existing role after created finished&lt;br /&gt;
// wait for image&lt;br /&gt;
* IAM → Roles → Create roles &lt;br /&gt;
** Custom trust policy: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Principal&amp;quot;: {&lt;br /&gt;
               &amp;quot;Service&amp;quot;: &amp;quot;scheduler.amazonaws.com&amp;quot;&lt;br /&gt;
           },&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Add Permission : if permission for stop Instance not exist , have to create before or skip this step then add those permission later&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JSON&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
   &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
           &amp;quot;Sid&amp;quot;: &amp;quot;VisualEditor0&amp;quot;,&lt;br /&gt;
           &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
           &amp;quot;Action&amp;quot;: &amp;quot;ec2:StopInstances&amp;quot;,&lt;br /&gt;
           &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:418867772665:instance/i-0569d4b408c5a75db&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:ec2:us-east-2:&amp;lt;Account-Id&amp;gt;:instance/&amp;lt;instanceIds&amp;gt;&amp;quot;&lt;br /&gt;
* Name, review, and create : create roles name&lt;br /&gt;
&lt;br /&gt;
''' Step4 : Review and create schedule '''&lt;br /&gt;
* Check detail the create schedule&lt;br /&gt;
// wait for image&lt;br /&gt;
&lt;br /&gt;
== Idea:  Stop and start Instance using Systems Manager ==&lt;br /&gt;
* Go to AWS  → Systems Manager&lt;br /&gt;
* In the left menu click  → Quick Setup&lt;br /&gt;
* Get started with Quick Setup → Get started&lt;br /&gt;
* Choose Configuration Type&lt;br /&gt;
* 👉 Resource Scheduler (Powered by AWS Solutions)  →  Create&lt;br /&gt;
&lt;br /&gt;
* Specify instance tag :&lt;br /&gt;
** Key : Value  &amp;gt;&amp;gt; should set key &amp;amp; value  like those instance want to set Auto Scheduler&lt;br /&gt;
** go to EC2 Console → Instances&lt;br /&gt;
** Select your specific instance&lt;br /&gt;
** Click Tags → Manage tags → Add tag&lt;br /&gt;
&lt;br /&gt;
* Target&lt;br /&gt;
** Choose : current account and current region &lt;br /&gt;
** Local deployment roles : Use new IAM local deployment roles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Working documents| 2026-03-19]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4192</id>
		<title>2026-03-19 Deploy and Setting EC2 instances</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_instances&amp;diff=4192"/>
		<updated>2026-03-19T09:00:41Z</updated>

		<summary type="html">&lt;p&gt;Seagame: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_Instance&amp;diff=4191</id>
		<title>2026-03-19 Deploy and Setting EC2 Instance</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=2026-03-19_Deploy_and_Setting_EC2_Instance&amp;diff=4191"/>
		<updated>2026-03-19T07:56:37Z</updated>

		<summary type="html">&lt;p&gt;Seagame: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Per_Service_Schemas&amp;diff=4183</id>
		<title>Per Service Schemas</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Per_Service_Schemas&amp;diff=4183"/>
		<updated>2026-03-18T02:08:18Z</updated>

		<summary type="html">&lt;p&gt;Seagame: add timestamp type to fieldName&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each service manages a schema of object/resources that it is responsible for, this schema is available to other services and frontends. The schema includes a list of fields available for each object.&lt;br /&gt;
&lt;br /&gt;
= File Structure =&lt;br /&gt;
&lt;br /&gt;
* see [[Repository structure#schemas|Repository structure]]&lt;br /&gt;
&lt;br /&gt;
= ObjectSchema | ObjectFieldSchema.js =&lt;br /&gt;
&lt;br /&gt;
== Not extendObjType ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;xx&amp;quot;,&lt;br /&gt;
	shortNameObjectType:&amp;quot;x&amp;quot;, // optional, use when generate code create lambda role with long name&lt;br /&gt;
	canDelete: false, // whether any fields can be deleted // default = false&lt;br /&gt;
	    belongTo: { &lt;br /&gt;
		serviceTag:&amp;quot;iii&amp;quot;,&lt;br /&gt;
		objectType:&amp;quot;jjj&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
    // how is the object created&lt;br /&gt;
    // userGenerated there will be generated endpoints for api or sqs (used in importBatchMain) to create object&lt;br /&gt;
    // systemGenerated must be created by flow/s&lt;br /&gt;
    // searchResultGenerated see separate notes below&lt;br /&gt;
    generatedBy: &amp;quot;userGenerated&amp;quot; || &amp;quot;systemGenerated&amp;quot; || &amp;quot;searchResultGenerated&amp;quot; // required&lt;br /&gt;
    searchResultGeneratedFlowType: {}, // for generatedBy = searchResultGenerated&lt;br /&gt;
	addOnDataStructure: [ // optional, add for additional setting to objectType&lt;br /&gt;
		{&lt;br /&gt;
			// all fields that a user can edit must be in versionedData, and all fields in versionedData must be editable by user&lt;br /&gt;
			type:&amp;quot;versionedData&amp;quot;,&lt;br /&gt;
			versionedDataLabel: &amp;quot;xx&amp;quot;, // versionedData label name&lt;br /&gt;
			storageResourceTag : &amp;quot;xx&amp;quot;, // ref to storegeResourceTag&lt;br /&gt;
			fieldNames: { // fieldName in versionedData cannot have in in main objectSchema.fieldNames&lt;br /&gt;
				&amp;quot;aaa&amp;quot;:{ // fieldName&lt;br /&gt;
					type: &amp;quot;xx&amp;quot;, // string|integer|number|timestamp|currency|currencyValue|float|special|object|boolean|arrayMixed|arrayNumeric|arrayString&lt;br /&gt;
					requiredOnCreate: false, // default = false&lt;br /&gt;
					optionalOnCreate: false, // default = false,&lt;br /&gt;
					validation: {&lt;br /&gt;
                      itemValidation:{} // for validate item in array&lt;br /&gt;
                    },&lt;br /&gt;
                    // probably impossible to have fromObjType, because data can be changed by user here&lt;br /&gt;
					fromObjType:{&lt;br /&gt;
						serviceTag: &amp;quot;xxx&amp;quot;, &lt;br /&gt;
						objectType: &amp;quot;xxx&amp;quot; &lt;br /&gt;
					},&lt;br /&gt;
				},&lt;br /&gt;
				// ...&lt;br /&gt;
			}&lt;br /&gt;
        },&lt;br /&gt;
        { // can have multiple addOn of type attributeTree&lt;br /&gt;
          type:&amp;quot;attributeTree&amp;quot;,           &lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;translation&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;propertyValue&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;mediaLink&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
		// ...&lt;br /&gt;
	],&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{ // storageResourceTag&lt;br /&gt;
			storageType: &amp;quot;xx&amp;quot;, // graph			&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;, // setting for storageType graph&lt;br /&gt;
            additionalGraphIndexes:[['fieldName1', 'fieldName2', ...], [...]]  // will make graph index with specific fieldName &lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;zzz&amp;quot;:{ // storageResourceTag&lt;br /&gt;
			storageType: &amp;quot;xx&amp;quot;, // dynamoDB&lt;br /&gt;
			// setting for storageType dynamoDB&lt;br /&gt;
			tableName: &amp;quot;xx&amp;quot;,&lt;br /&gt;
			groupByPartitionKeyField: &amp;quot;xx&amp;quot;, // use groupByPartitionKeyField as partition key and not have sort key in dynamoDB, if have multiple identifiers will concat it. And use it as partitionKey.&lt;br /&gt;
            serviceTag:&amp;quot;zz&amp;quot;// default own service.&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		xxx: { // fieldName&lt;br /&gt;
			type: &amp;quot;xx&amp;quot;,  // string|integer|number|timestamp|currency|currencyValue|float|special|object|boolean|arrayMixed|arrayNumeric|arrayString&lt;br /&gt;
            randomOnCreate: false,   // default = false , can set true in fieldName that part of identifiers and identifiers have single identifierFieldname&lt;br /&gt;
			requiredOnCreate: false, // default = false&lt;br /&gt;
			optionalOnCreate: false, // default = false&lt;br /&gt;
			canUpdate: true, // default = true (only system/flows can edit, no history of changes unless flow manually adds)&lt;br /&gt;
			validation: {&lt;br /&gt;
			  itemValidation:{}  // for validate item in array&lt;br /&gt;
            }, // maybe ajv syntax&lt;br /&gt;
			storageResourceTags: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // reference to storageResources property&lt;br /&gt;
		    fromObjType:{&lt;br /&gt;
			  serviceTag: &amp;quot;xxx&amp;quot;, &lt;br /&gt;
			  objectType: &amp;quot;xxx&amp;quot; &lt;br /&gt;
			},&lt;br /&gt;
            hashOnCreate: [&amp;quot;xx&amp;quot;, &amp;quot;yy&amp;quot;], // reference to other fieldName, &lt;br /&gt;
            statusField: true, // use for objectSchema inside flowSchema, identify which field is statusField &lt;br /&gt;
		},&lt;br /&gt;
		// ...&lt;br /&gt;
	},&lt;br /&gt;
    compositeKeyDeliminator: &amp;quot;xx&amp;quot;, // join partitionKey and sortKey&lt;br /&gt;
	identifiers: [&lt;br /&gt;
    // for dynamoDB storageType &lt;br /&gt;
	{&lt;br /&gt;
		type: &amp;quot;partitionKey&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // composite partition keys in DynamoDB&lt;br /&gt;
		deliminator: &amp;quot;xx&amp;quot;,  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
		name: &amp;quot;zz&amp;quot;, // name of field in database&lt;br /&gt;
		// or&lt;br /&gt;
		fieldName: &amp;quot;xx&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		type: &amp;quot;sortKey&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // composite partition keys in DynamoDB&lt;br /&gt;
		deliminator: &amp;quot;xx&amp;quot;,  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
		name: &amp;quot;zz&amp;quot;, // name of field in database&lt;br /&gt;
		// or&lt;br /&gt;
		fieldName: &amp;quot;xx&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	},&lt;br /&gt;
   &lt;br /&gt;
    // for graph storageType&lt;br /&gt;
	{&lt;br /&gt;
		type: &amp;quot;identifier&amp;quot;,&lt;br /&gt;
		fieldNames: [&amp;quot;xx&amp;quot;,&amp;quot;yy&amp;quot;], // identifier field in graph or composite partition keys in DynamoDB&lt;br /&gt;
        name: &amp;quot;zzz&amp;quot;              // use when save in dynamoDB partitionKey&lt;br /&gt;
		deliminator: &amp;quot;xx&amp;quot;,  // optional, defaults to &amp;quot;_&amp;quot;&lt;br /&gt;
		// or&lt;br /&gt;
		fieldName: &amp;quot;xx&amp;quot;	&lt;br /&gt;
	},&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== extendObjType ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	// for objects stored in graph this will add another node label&lt;br /&gt;
	objectType: &amp;quot;xx&amp;quot;, // new label to add&lt;br /&gt;
	extendObjType: { // core object that this object extends&lt;br /&gt;
		serviceTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;xxx&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [],&lt;br /&gt;
	storageResources:{ // these are the storageResources that carry the extended objects settings, &lt;br /&gt;
		// (see above)&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		// (see above) &lt;br /&gt;
	},&lt;br /&gt;
	// canDelete/identifiers come from the core object&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== searchResultGenerated ==&lt;br /&gt;
&lt;br /&gt;
* must be created by flow&lt;br /&gt;
* eg: variantProduct&lt;br /&gt;
* not have any storageResources&lt;br /&gt;
* identifiers are automatically searchResultData identifiers&lt;br /&gt;
* a searchResult request for this object will enter the searchResultGeneratedFlowType flow which creates searchResultData that can then be queried/sorted&lt;br /&gt;
* all relationships must be storageType = lambda, eg translate from variantProduct to variant uses a translateId flow to query the variantProduct identifier (searchResultData) to find the variantId in it's requiredData results&lt;br /&gt;
* searchResultGeneratedFlowType takes over after creating searchResultMain record until processRequiredData&lt;br /&gt;
* if objectSchema defines any fieldnames, then they are found using a flow, maybe as hooks in per service findData&lt;br /&gt;
* when finding direct fieldname, will need to check if requireData already exists, if not enter flow/findData to create&lt;br /&gt;
* no fields can be edited, so can show in forms but no updates performed&lt;br /&gt;
&lt;br /&gt;
= Relationships Schema | ObjectRelationships.js =&lt;br /&gt;
&lt;br /&gt;
* stored in top level schemas folder&lt;br /&gt;
* parent/child determines relationship direction for graph relationships&lt;br /&gt;
* have one service that contains information of each relationship &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// relationship schema in responsible service&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;xxx&amp;quot;: { // relationshipTag - name of relationship type stored in graph&lt;br /&gt;
      generatedBy: &amp;quot;userGenerated&amp;quot; || &amp;quot;systemGenerated&amp;quot; // default=&amp;quot;userGenerated&amp;quot;&lt;br /&gt;
      canChangeToRelTypes: [&lt;br /&gt;
		{&lt;br /&gt;
			{ // relType that this relType can change to &lt;br /&gt;
			  serviceTag:&amp;quot;xxx&amp;quot;,&lt;br /&gt;
			  relationshipTag: &amp;quot;yyy&amp;quot;&lt;br /&gt;
			},&lt;br /&gt;
			changeBy: &amp;quot;user&amp;quot; // &amp;quot;systemNoUserId&amp;quot; | &amp;quot;systemWithUserId&amp;quot; | &amp;quot;user&amp;quot;, default=&amp;quot;user&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
        // another relType&lt;br /&gt;
      ],&lt;br /&gt;
      // moveBy allows the relationship to be moved between 2 instances of the same objType only&lt;br /&gt;
	  moveBy: &amp;quot;none&amp;quot; // &amp;quot;systemNoUserId&amp;quot; | &amp;quot;systemWithUserId&amp;quot; | &amp;quot;user&amp;quot; | &amp;quot;none&amp;quot;, default=&amp;quot;none&amp;quot;&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{ // storageResourceTag&lt;br /&gt;
			storageType: &amp;quot;xx&amp;quot;, // dynamoDB | graph | lambda&lt;br /&gt;
		    // if storageType=&amp;quot;dynamoDB&amp;quot;  will not specify tableName in relationship schema&lt;br /&gt;
&lt;br /&gt;
			// setting for storageType graph&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
            additionalGraphIndexes:[['fieldName1', 'fieldName2', ...], [...]],  // will make graph index with specific fieldName &lt;br /&gt;
&lt;br /&gt;
			// setting for storageType lambda&lt;br /&gt;
			serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
			functionName: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      fieldNames: {&lt;br /&gt;
		&amp;quot;xxx&amp;quot;: { // relationship property name&lt;br /&gt;
			type: &amp;quot;string&amp;quot;, // &amp;quot;string&amp;quot; | &amp;quot;number&amp;quot; ...&lt;br /&gt;
			requiredOnCreate: false, // default=false&lt;br /&gt;
			optionalOnCreate: false, // default = false&lt;br /&gt;
			updateBy: &amp;quot;user&amp;quot; // &amp;quot;systemNoUserId&amp;quot; | &amp;quot;systemWithUserId&amp;quot; | &amp;quot;user&amp;quot; | &amp;quot;none&amp;quot;, default=&amp;quot;user&amp;quot;&lt;br /&gt;
			validation: {} // ajv syntax&lt;br /&gt;
		},&lt;br /&gt;
		//...other relationship properties&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],   // reference from storageResources property&lt;br /&gt;
          canDelete: false                // default = false, if set true will allow delete relationship between 2 objType&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;xx&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            requiredOnCreate: true, // if set true will create relationshipTag when create objType data, if both &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; linkType=&amp;quot;many&amp;quot; should not have requiredOnCreate, exists in &amp;quot;from&amp;quot; or &amp;quot;to&amp;quot; only&lt;br /&gt;
            linkType: &amp;quot;&amp;quot;,   // one | many&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;yy&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;yy&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;&amp;quot;,   // one | many&lt;br /&gt;
          },&lt;br /&gt;
          requestProperties: {&lt;br /&gt;
            // if storageType is Lambda and translateIds/linkPath requires properties set them here (eg sellOffer&amp;gt;orderPrice)&lt;br /&gt;
            tag_deliverTo: {&lt;br /&gt;
              requestPropertyType: &amp;quot;objectIdentifier&amp;quot;,&lt;br /&gt;
              objType: {&lt;br /&gt;
                serviceTag: &amp;quot;Locations&amp;quot;,&lt;br /&gt;
                objectType: &amp;quot;locationNode&amp;quot; // deliversToLocationNode&lt;br /&gt;
              },&lt;br /&gt;
              identifiersFieldName: &amp;quot;locationNodeId&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            // ... other request properties&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        // ...other link&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reference Relationships Schema | RefObjectRelationships.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// reference to relationshipTag in external service&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    objectType: &amp;quot;zz&amp;quot;,              // objectType in local service&lt;br /&gt;
    relationshipTag: &amp;quot;xxx&amp;quot;,        // name of relationshiptag of objType&lt;br /&gt;
    relationshipServiceTag: &amp;quot;xx&amp;quot;   // point to service tag that contain data of relationshipTag of objType&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Flow Schema | FlowSchemas.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
 { &lt;br /&gt;
    flowTag: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
    initiateBy:&amp;quot;user&amp;quot;,         // &amp;quot;user&amp;quot; | &amp;quot;system&amp;quot; -- if receive plugin should be user &lt;br /&gt;
    handleObj:&amp;quot;one&amp;quot;,           // &amp;quot;one&amp;quot; | &amp;quot;multi&amp;quot;&lt;br /&gt;
    statusType:&amp;quot;statusField&amp;quot;,  // &amp;quot;statusField&amp;quot; | &amp;quot;storedCache&amp;quot; | &amp;quot;none&amp;quot; | &amp;quot;triggerCache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    // statusType=&amp;quot;triggerCache&amp;quot; setting &lt;br /&gt;
    triggerType: &amp;quot;storedCache&amp;quot;, // &amp;quot;storedCache&amp;quot; | &amp;quot;switch&amp;quot;&lt;br /&gt;
    triggerFlowTypes:[&lt;br /&gt;
      //... triggerFlowType&lt;br /&gt;
    ],&lt;br /&gt;
&lt;br /&gt;
	// statusType=&amp;quot;statusField&amp;quot; | &amp;quot;triggerCache&amp;quot; | &amp;quot;storedCache&amp;quot; setting:&lt;br /&gt;
    objType:{},&lt;br /&gt;
&lt;br /&gt;
    event:[&amp;quot;ownTopic&amp;quot;],  // &amp;quot;ownTopic&amp;quot; | &amp;quot;extTopic&amp;quot; | &amp;quot;s3&amp;quot; | &amp;quot;eventBridge&amp;quot; | &amp;quot;lambdaSyncInv&amp;quot; | &amp;quot;lambdaSyncApi&amp;quot; | &amp;quot;generatedCode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    // event=&amp;quot;s3&amp;quot; setting&lt;br /&gt;
    bucketName: &amp;quot;xxx&amp;quot;, // bucket for s3 event&lt;br /&gt;
    createBucket: boolean, // if true will generate new bucket with bucketName if false will point to old bucket that already have &lt;br /&gt;
&lt;br /&gt;
    // event=&amp;quot;eventBridge&amp;quot; setting&lt;br /&gt;
    schedules:[&lt;br /&gt;
      {&lt;br /&gt;
        name: 'your-scheduled-rate-event-name',&lt;br /&gt;
        description: 'your scheduled rate event description',&lt;br /&gt;
        rate: [&amp;quot;rate(1 minute)&amp;quot;, ],&lt;br /&gt;
        input:{}&lt;br /&gt;
      }&lt;br /&gt;
    ],&lt;br /&gt;
&lt;br /&gt;
    // event=&amp;quot;generatedCode&amp;quot; setting&lt;br /&gt;
	generatedCodeConfig:{&lt;br /&gt;
		generatedCodeTag: &amp;quot;create&amp;quot;, // tag for generated code, eg &amp;quot;create&amp;quot; | &amp;quot;update&amp;quot; | &amp;quot;delete&amp;quot;&lt;br /&gt;
		codeHookTag: &amp;quot;xx&amp;quot;, // which codeHook to initiate flow from&lt;br /&gt;
		// maybe validate: invocationType must exist in &amp;quot;event&amp;quot; array, so don't need to check 2 places when eg creating sns topic&lt;br /&gt;
		invocationType: &amp;quot;ownTopic&amp;quot;, // &amp;quot;ownTopic&amp;quot; | &amp;quot;lambdaSyncInv&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		objType: {}, // which cases in the generated code trigger the flow&lt;br /&gt;
		// .. other settings depending on generated code&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    outputTopic: boolean, &lt;br /&gt;
&lt;br /&gt;
    flowSteps:[&lt;br /&gt;
      In:{ // will generate Topic serviceTag_stage_yyy_In&lt;br /&gt;
        properties:[], // reference to stepProperties key&lt;br /&gt;
        messageAttributes: [] // reference to stepProperties key&lt;br /&gt;
      },&lt;br /&gt;
      // another flow steps&lt;br /&gt;
      flowStep1:{ // will generate Topic serviceTag_stage_yyy_Flow1&lt;br /&gt;
        properties:[], // reference to stepProperties key&lt;br /&gt;
        messageAttributes: [] // reference to stepProperties key&lt;br /&gt;
        event:[&amp;quot;ownTopic&amp;quot;],  // &amp;quot;ownTopic&amp;quot; | &amp;quot;extTopic&amp;quot; | &amp;quot;s3&amp;quot; | &amp;quot;eventBridge&amp;quot; | &amp;quot;lambdaSyncInv&amp;quot; | &amp;quot;lambdaSyncApi&amp;quot; | &amp;quot;generatedCode&amp;quot;&lt;br /&gt;
        // handle splitting logic into awaitingStep/awaitingMultipleSteps&lt;br /&gt;
        // handle splitting logic into paginated lambda&lt;br /&gt;
&lt;br /&gt;
        plugInHooks: [&lt;br /&gt;
			{&lt;br /&gt;
				plugInHookTag: &amp;quot;&amp;quot;,&lt;br /&gt;
				objType:{}, // used to query connection dynamo for an object instance in current flow&lt;br /&gt;
			},&lt;br /&gt;
        ]&lt;br /&gt;
      },&lt;br /&gt;
      Out:{ // will generate Topic serviceTag_stage_yyy_Out&lt;br /&gt;
        properties:[], // reference to stepProperties key&lt;br /&gt;
        messageAttributes: [] // reference to stepProperties key&lt;br /&gt;
      },&lt;br /&gt;
    ]&lt;br /&gt;
&lt;br /&gt;
    stepProperties:{&lt;br /&gt;
      &amp;quot;uuid&amp;quot;:{&lt;br /&gt;
        propertyName:&amp;quot;xxx&amp;quot;,&lt;br /&gt;
        type:&amp;quot;string&amp;quot;,&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;uuid2&amp;quot;:{&lt;br /&gt;
        objectField:{ &lt;br /&gt;
          objType:{},&lt;br /&gt;
          fieldName:&amp;quot;xx&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        overwritePropertyName:&amp;quot;xx&amp;quot; // optional, if have objectField and have overwritePropertyName will overwrite fieldName &lt;br /&gt;
      }&lt;br /&gt;
    },&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= System Text Schema | SystemTextSchemas.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
	{&lt;br /&gt;
		namespace: &amp;quot;xxx&amp;quot;, // groups files downloaded by frontend&lt;br /&gt;
		systemTextTag: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Auto generated systemText and namespaces ==&lt;br /&gt;
&lt;br /&gt;
=== systemNotification names ===&lt;br /&gt;
&lt;br /&gt;
* namespace: &amp;quot;sysNotification_{notificationGrouping}&amp;quot;&lt;br /&gt;
* systemTextTag: &amp;quot;{notificationTag}&amp;quot;&lt;br /&gt;
* eg shown on notification settings page&lt;br /&gt;
&lt;br /&gt;
=== objType names ===&lt;br /&gt;
&lt;br /&gt;
* namespace: &amp;quot;objTypes&amp;quot;&lt;br /&gt;
* systemTextTag: &amp;quot;{serviceTag}_{objectType}&amp;quot;&lt;br /&gt;
* eg shown on config pages, eg pulldown list of object types&lt;br /&gt;
&lt;br /&gt;
=== objType field name descriptions ===&lt;br /&gt;
&lt;br /&gt;
* namespace: &amp;quot;objType_fielddesc_{serviceTag}_{objectType}&amp;quot;&lt;br /&gt;
* systemTextTag: &amp;quot;{fieldname}&amp;quot;&lt;br /&gt;
* eg shown on config pages, eg info box for each field name&lt;br /&gt;
&lt;br /&gt;
= System Notification Schema | SystemNotificationSchemas.js =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
	{&lt;br /&gt;
		notificationTag: &amp;quot;xxx&amp;quot;,&lt;br /&gt;
		notificationGrouping: &amp;quot;yyy&amp;quot;,&lt;br /&gt;
		weight: &amp;quot;##&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Generated S3 files =&lt;br /&gt;
&lt;br /&gt;
* generate multiple files for different uses, eg:&lt;br /&gt;
*# list of saved fieldNames for Create&lt;br /&gt;
*# list of saved+calculated for Update/Info pages&lt;br /&gt;
*# graphSchemas&lt;br /&gt;
*# relationships (used by Search/Sort Results)&lt;br /&gt;
&lt;br /&gt;
= Use Cases =&lt;br /&gt;
&lt;br /&gt;
== Find Deployed Service Name ==&lt;br /&gt;
&lt;br /&gt;
* other services can use fixed serviceTag to get deployed serviceName from serviceSchema on S3&lt;br /&gt;
* used to build resource names for external services&lt;br /&gt;
* eg when one service needs to send a message into an SNS belonging to a different service&lt;br /&gt;
&lt;br /&gt;
== Standard Create, Update, List, Delete pages ==&lt;br /&gt;
&lt;br /&gt;
* List and Delete are maybe not required, use table data system instead.&lt;br /&gt;
* object schema can add validation information that can be used on the frontend to check before sending to backend, and by the backend to validate the data before handling&lt;br /&gt;
&lt;br /&gt;
=== Create Object ===&lt;br /&gt;
&lt;br /&gt;
* can configure what fields are shown&lt;br /&gt;
* requiredOnCreate fields must be shown &lt;br /&gt;
&lt;br /&gt;
=== Edit Object ===&lt;br /&gt;
&lt;br /&gt;
* users setup any number of pages for object types with configurable fields shown&lt;br /&gt;
* fields can be either display only or edit&lt;br /&gt;
* each field can adjust it's display properties (perhaps via cssStyles)&lt;br /&gt;
&lt;br /&gt;
== Menu Config ==&lt;br /&gt;
&lt;br /&gt;
When adding menu items can add links to create, update, list, delete objects, user chooses the service then from that service's list of objects and what action is being performed. For update/delete perhaps links to a standard page that asks for the identifier before presenting the page.&lt;br /&gt;
&lt;br /&gt;
== Tabled Data ==&lt;br /&gt;
&lt;br /&gt;
When viewing tabled data the frontend pulls the tableId's config from backend, then when requesting the data also requests the serviceTag &amp;gt; objectType schema for use when displaying the data.&lt;br /&gt;
&lt;br /&gt;
== Code Standardization ==&lt;br /&gt;
&lt;br /&gt;
Code such as middleware validation schema and saving data to databases can be standardized.&lt;br /&gt;
&lt;br /&gt;
== Code Generation ==&lt;br /&gt;
&lt;br /&gt;
Endpoints per object for actions such as Create/Delete/Update can be automatically generated from objectSchema.&lt;br /&gt;
&lt;br /&gt;
=== Code Generation Structure ===&lt;br /&gt;
&lt;br /&gt;
* npm for generic code generation, can be used in any project, includes functions for generating Source files from templates and developer files&lt;br /&gt;
* npm for per project specific files, eg templates for the project (Create/Update/.. code)&lt;br /&gt;
* Empty Service Template has GenerateCode.js script file in root dir that is run to generate code, it invokes a generation function from generic npm with param that points to per project npm's templates&lt;br /&gt;
* generated Source retains hook tags (and any developer added code), so if developer wants to update developer's file with updated template code they can generate code and simply copy generated Source to src folder&lt;br /&gt;
&lt;br /&gt;
= Graph Server Config =&lt;br /&gt;
&lt;br /&gt;
* S3 has a list of graphServerTag's linking to the GraphHandler serviceTag responsible for the graph&lt;br /&gt;
* multiple graphServerTags can point to one GraphHandler, combining graphs into one server&lt;br /&gt;
* when creating each GraphHandler's graph schemas, for each field split out the fields into each GraphHandler using the graphServerTag, if multiple graphServerTags for a field point to the same GraphHandler combine the fields to create GraphHandler's graph schema&lt;br /&gt;
* every GraphHandler an object is saved into will require it's identifiers&lt;br /&gt;
* when eg updating fields for an object separate the fields per GraphHandler before sending the request to update each graph&lt;br /&gt;
&lt;br /&gt;
= Extended Object Types =&lt;br /&gt;
&lt;br /&gt;
* Allows for one graph node to have multiple labels&lt;br /&gt;
* graph schema is created for both the core object and the extended object&lt;br /&gt;
* eg Media Manager's has a node schema for &amp;quot;media&amp;quot; object type, and Image service has a node schema for &amp;quot;image&amp;quot; object type&lt;br /&gt;
* the extended object builds it's schema by combining core + extended settings&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Per Service Schemas|Per Service Schemas]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Unit_Type&amp;diff=4164</id>
		<title>Service - Unit Type</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Unit_Type&amp;diff=4164"/>
		<updated>2026-03-11T05:47:38Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* objectSchemas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each unitStandard is connected to a unitType which defines unitTrackedPropertys and how to handle them. unitPacking probably also uses the unitType structure.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-supply-units/izara-supply-units-unit-type&lt;br /&gt;
&lt;br /&gt;
= Unit Type configuration =&lt;br /&gt;
&lt;br /&gt;
unitType settings cannot be changed once created, so if want to adjust them would need to create a new unitType, this is because too much logic and data for unitStandard instances rely on unitType settings, data could break if settings changed.&lt;br /&gt;
&lt;br /&gt;
= objectSchemas = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
    belongTo: { &lt;br /&gt;
		serviceTag:&amp;quot;SupplyNetwork&amp;quot;,&lt;br /&gt;
		objectType:&amp;quot;supplyNetwork&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [ &lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;translation&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
	],&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		unitTypeId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
            randomOnCreate: true&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			fieldName: &amp;quot;unitTypeId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;unitTypeTrackedProperty&amp;quot;,&lt;br /&gt;
    belongTo: { // maybe in future when add RBAC to unitType&lt;br /&gt;
		serviceTag:&amp;quot;SupplyNetwork&amp;quot;,&lt;br /&gt;
		objectType:&amp;quot;supplyNetwork&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		unitTypeTrackedPropertyId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
            randomOnCreate: true&lt;br /&gt;
		},&lt;br /&gt;
		precision: { // sets whether decimals are allowed and precision level&lt;br /&gt;
			type: &amp;quot;integer&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},	&lt;br /&gt;
		canNegative: { // default false, sets whether only zero and positive values are allowed&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},&lt;br /&gt;
		inactiveIfZero: { // default false, if value of this property goes to zero automatically removes activeUnit relationship and adds inactiveUnit relationship&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},		&lt;br /&gt;
		isCurrency: { // default false, sets whether unitTrackedProperty value is a currency amount&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			fieldName: &amp;quot;unitTypeTrackedPropertyId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* currency is handled special because conversions can be performed&lt;br /&gt;
* multiple unitType instances can link to the same unitTypeTrackedProperty&lt;br /&gt;
* examples: yards, weight, cost (see calculatedProperties in [[Service - Transform Units]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;unitTrackedProperty&amp;quot;,&lt;br /&gt;
    belongTo: { // in future add RBAC to eg Units&lt;br /&gt;
		serviceTag:&amp;quot;SupplyNetwork&amp;quot;,&lt;br /&gt;
		objectType:&amp;quot;supplyNetwork&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		unitTrackedPropertyId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
            randomOnCreate: true&lt;br /&gt;
		},&lt;br /&gt;
		propertyValue: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;, // so can adjust any type of property, will need cast type in logic&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			fieldName: &amp;quot;unitTrackedPropertyId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* each unit instance has unitTrackedProperty's for each of it's unitType's unitTypeTrackedPropertys&lt;br /&gt;
* unitTrackedProperty holds the value for eacn unitTypeTrackedProperty for a unit&lt;br /&gt;
&lt;br /&gt;
= relationshipSchemas = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;isUnitType&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: false,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitManager&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unit&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitType&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;hasUnitTypeTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
		},&lt;br /&gt;
		fieldNames: {&lt;br /&gt;
			&amp;quot;defaultValue&amp;quot;: {&lt;br /&gt;
			  type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			  requiredOnCreate: true,&lt;br /&gt;
			}&lt;br /&gt;
		},   &lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: false,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitType&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTypeTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which unitTypeTrackedProperty unitType has&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;isUnitTypeTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: false,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTypeTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* links each unitTrackedProperty to it's matching unitTypeTrackedProperty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;hasUnitTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: true,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitManager&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unit&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Units current unitTrackedProperty for each unitTypeTrackedProperty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;oldUnitTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      fieldNames: {&lt;br /&gt;
			&amp;quot;fromTimestamp&amp;quot;: {&lt;br /&gt;
			  type: &amp;quot;timestamp&amp;quot;,&lt;br /&gt;
			  requiredOnCreate: true,&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;toTimestamp&amp;quot;: {&lt;br /&gt;
			  type: &amp;quot;timestamp&amp;quot;,&lt;br /&gt;
			  requiredOnCreate: true,&lt;br /&gt;
			}&lt;br /&gt;
		},   &lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: true,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitManager&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unit&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* old unitTrackedProperties for a unit, maintains a history of unitTrackedProperty propertyValue changes&lt;br /&gt;
* when a change is made to a unitTrackedProperty propertyValue a new unitTrackedProperty is created and hasUnitTrackedProperty links to unitStandard, while old hasUnitTrackedProperty relationship is removed and replaced with a oldUnitTrackedProperty&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Unit Type|Unit Type]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Unit Type]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
	<entry>
		<id>https://izara.io/wiki/index.php?title=Service_-_Unit_Type&amp;diff=4163</id>
		<title>Service - Unit Type</title>
		<link rel="alternate" type="text/html" href="https://izara.io/wiki/index.php?title=Service_-_Unit_Type&amp;diff=4163"/>
		<updated>2026-03-11T05:43:09Z</updated>

		<summary type="html">&lt;p&gt;Seagame: /* objectSchemas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Each unitStandard is connected to a unitType which defines unitTrackedPropertys and how to handle them. unitPacking probably also uses the unitType structure.&lt;br /&gt;
&lt;br /&gt;
= Repository =&lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/izara-supply-units/izara-supply-units-unit-type&lt;br /&gt;
&lt;br /&gt;
= Unit Type configuration =&lt;br /&gt;
&lt;br /&gt;
unitType settings cannot be changed once created, so if want to adjust them would need to create a new unitType, this is because too much logic and data for unitStandard instances rely on unitType settings, data could break if settings changed.&lt;br /&gt;
&lt;br /&gt;
= objectSchemas = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
    belongTo: { &lt;br /&gt;
		serviceTag:&amp;quot;SupplyNetwork&amp;quot;,&lt;br /&gt;
		objectType:&amp;quot;supplyNetwork&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	addOnDataStructure: [ &lt;br /&gt;
        {&lt;br /&gt;
          type:&amp;quot;translation&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
	],&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		unitTypeId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
            randomOnCreate: true&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			fieldName: &amp;quot;unitTypeId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;unitTypeTrackedProperty&amp;quot;,&lt;br /&gt;
    belongTo: { // maybe in future when add RBAC to unitType&lt;br /&gt;
		serviceTag: &amp;quot;iii&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;jjj&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		unitTypeTrackedPropertyId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
            randomOnCreate: true&lt;br /&gt;
		},&lt;br /&gt;
		precision: { // sets whether decimals are allowed and precision level&lt;br /&gt;
			type: &amp;quot;integer&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},	&lt;br /&gt;
		canNegative: { // default false, sets whether only zero and positive values are allowed&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},&lt;br /&gt;
		inactiveIfZero: { // default false, if value of this property goes to zero automatically removes activeUnit relationship and adds inactiveUnit relationship&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},		&lt;br /&gt;
		isCurrency: { // default false, sets whether unitTrackedProperty value is a currency amount&lt;br /&gt;
			type: &amp;quot;boolean&amp;quot; ,&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			fieldName: &amp;quot;unitTypeTrackedPropertyId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* currency is handled special because conversions can be performed&lt;br /&gt;
* multiple unitType instances can link to the same unitTypeTrackedProperty&lt;br /&gt;
* examples: yards, weight, cost (see calculatedProperties in [[Service - Transform Units]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	objectType: &amp;quot;unitTrackedProperty&amp;quot;,&lt;br /&gt;
    belongTo: { // in future add RBAC to eg Units&lt;br /&gt;
		serviceTag: &amp;quot;unitStandard&amp;quot;,&lt;br /&gt;
		objectType: &amp;quot;unitStandard&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	fieldNames: {&lt;br /&gt;
		unitTrackedPropertyId: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;,&lt;br /&gt;
            randomOnCreate: true&lt;br /&gt;
		},&lt;br /&gt;
		propertyValue: {&lt;br /&gt;
			type: &amp;quot;string&amp;quot;, // so can adjust any type of property, will need cast type in logic&lt;br /&gt;
			requiredOnCreate: true,&lt;br /&gt;
			canUpdate: true,&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
	identifiers: [&lt;br /&gt;
		{&lt;br /&gt;
			fieldName: &amp;quot;unitTrackedPropertyId&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
	]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* each unit instance has unitTrackedProperty's for each of it's unitType's unitTypeTrackedPropertys&lt;br /&gt;
* unitTrackedProperty holds the value for eacn unitTypeTrackedProperty for a unit&lt;br /&gt;
&lt;br /&gt;
= relationshipSchemas = &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;isUnitType&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: false,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitManager&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unit&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitType&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;hasUnitTypeTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
		},&lt;br /&gt;
		fieldNames: {&lt;br /&gt;
			&amp;quot;defaultValue&amp;quot;: {&lt;br /&gt;
			  type: &amp;quot;string&amp;quot;,&lt;br /&gt;
			  requiredOnCreate: true,&lt;br /&gt;
			}&lt;br /&gt;
		},   &lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: false,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitType&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTypeTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* sets which unitTypeTrackedProperty unitType has&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;isUnitTypeTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: false,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTypeTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* links each unitTrackedProperty to it's matching unitTypeTrackedProperty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;hasUnitTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: true,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitManager&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unit&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Units current unitTrackedProperty for each unitTypeTrackedProperty&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;oldUnitTrackedProperty&amp;quot;: {&lt;br /&gt;
      storageResources:{&lt;br /&gt;
		&amp;quot;xxx&amp;quot;:{&lt;br /&gt;
			storageType: &amp;quot;graph&amp;quot;,&lt;br /&gt;
			graphServerTag: &amp;quot;xx&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
      },&lt;br /&gt;
      fieldNames: {&lt;br /&gt;
			&amp;quot;fromTimestamp&amp;quot;: {&lt;br /&gt;
			  type: &amp;quot;timestamp&amp;quot;,&lt;br /&gt;
			  requiredOnCreate: true,&lt;br /&gt;
			},&lt;br /&gt;
			&amp;quot;toTimestamp&amp;quot;: {&lt;br /&gt;
			  type: &amp;quot;timestamp&amp;quot;,&lt;br /&gt;
			  requiredOnCreate: true,&lt;br /&gt;
			}&lt;br /&gt;
		},   &lt;br /&gt;
      links: [&lt;br /&gt;
        {&lt;br /&gt;
          storageResourceTags: [&amp;quot;xxx&amp;quot;],&lt;br /&gt;
          canDelete: true,&lt;br /&gt;
          from: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitManager&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unit&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;one&amp;quot;,&lt;br /&gt;
          },&lt;br /&gt;
          to: {&lt;br /&gt;
            objType: {&lt;br /&gt;
              serviceTag: &amp;quot;unitType&amp;quot;,&lt;br /&gt;
              objectType: &amp;quot;unitTrackedProperty&amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            linkType: &amp;quot;many&amp;quot;,&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* old unitTrackedProperties for a unit, maintains a history of unitTrackedProperty propertyValue changes&lt;br /&gt;
* when a change is made to a unitTrackedProperty propertyValue a new unitTrackedProperty is created and hasUnitTrackedProperty links to unitStandard, while old hasUnitTrackedProperty relationship is removed and replaced with a oldUnitTrackedProperty&lt;br /&gt;
&lt;br /&gt;
= Working documents =&lt;br /&gt;
&lt;br /&gt;
[[:Category:Working_documents - Unit Type|Unit Type]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Backend services| Unit Type]]&lt;/div&gt;</summary>
		<author><name>Seagame</name></author>
	</entry>
</feed>