【AWS】AWS CLI(AWS コマンドライン)からの EC2 インスタンス作成手順

AWS CLI(AWS コマンドライン)からの EC2 インスタンス構築手順を解説します。

 

AWS CLI のインストールや設定は以下の記事を参考にしてください。

 

【AWS】「EC2 インスタンス」または「パソコン」に AWS CLI(aws コマンド)及び jq コマンドをインストールする手順【Windows&Linux】

 

 

 

環境

以下の環境で実行しています。

OS は 2019年5月よりリリースされた Red Hat 8系を使用しています。

[root@AWSCLI bin]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.0 (Ootpa)
[root@AWSCLI bin]#

 

 

AWS CLI のバージョンです。

Python は 3.6 系を利用しています。

[root@AWSCLI bin]# aws –version
aws-cli/1.16.166 Python/3.6.8 Linux/4.18.0-80.1.2.el8_0.x86_64 botocore/1.12.156
[root@AWSCLI bin]#

 

 

Python のバージョンです。

[root@AWSCLI bin]# python –version
Python 3.6.8
[root@AWSCLI bin]#

 

 

 

aws コマンドの動作確認

最後に aws コマンドの動作確認をします。

以下の EC2 インスタンス ID があることが確認できます。

[ec2-user@AWSCLI ~]$ aws ec2 describe-instances | jq ‘.Reservations[].Instances[].InstanceId’
“i-003cb9062fxxxxxxxx”
“i-092e89acc6xxxxxxxx”
“i-06ca64bca6xxxxxxxx”
[ec2-user@AWSCLI ~]$

 

 

 

対象の EC2 インスタンス ID のインスタンスが稼働しているかどうか確認します。

【例1】

[ec2-user@AWSCLI ~]$ aws ec2 describe-instances –instance-ids i-06ca64xxxxxxxxxxxxxx | jq ‘.Reservations[].Instances[].State.Name’
“running”
[ec2-user@AWSCLI ~]$

 

 

【例2】

[ec2-user@AWSCLI ~]$ aws ec2 describe-instance-status –instance-ids i-06ca64xxxxxxxxxxxxxx | jq ‘.InstanceStatuses[].InstanceState.Name’
“running” ← 稼働しています。
[ec2-user@AWSCLI ~]$

 

 

 

対象の EC2 を停止します。

[ec2-user@AWSCLI ~]$ aws ec2 stop-instances –instance-ids i-06ca64xxxxxxxxxxxxxx 

    “StoppingInstances”: [ 
        { 
            “CurrentState”: { 
                “Code”: 64, 
                “Name”: “stopping” 
            }, 
            “InstanceId”: “i-06ca64xxxxxxxxxxxxxx”, 
            “PreviousState”: { 
                “Code”: 16, 
                “Name”: “running” 
            } 
        } 
    ] 

[ec2-user@AWSCLI ~]$

 

 

1分後に再度稼働状態を確認します。

[ec2-user@AWSCLI ~]$ aws ec2 describe-instances –instance-ids i-06ca64xxxxxxxxxxxxxx | jq ‘.Reservations[].Instances[].State.Name’
“stopped”
[ec2-user@AWSCLI ~]$

 

 

 

 

 

既存 EC2 インスタンスの AMI イメージを作成する

EC2 インスタンスの作成は AMI イメージから作成します。

そのため、最初にテンプレートとしたい EC2 インスタンスのイメージを取得します。

 

EC2 インスタンスのイメージを作成する前に EC2 インスタンスを停止しますが、すでに上の手順で EC2 インスタンスが停止している前提で進めます。

 

EC2 インスタンスの AMI イメージを作成します。

[ec2-user@AWSCLI ~]$ aws ec2 create-image –instance-id i-06ca64xxxxxxxxxxxxxx –name “redhat-test-ami_20190526” 

    “ImageId”: “ami-0bc5cd6axxxxxxxxxx” 

[ec2-user@AWSCLI ~]$

 

 

作成した AMI の詳細を確認します。

[ec2-user@AWSCLI ~]$ aws ec2 describe-images –image-ids ami-0bc5cd6axxxxxxxxxx 

    “Images”: [ 
        { 
            “Architecture”: “x86_64”, 
            “CreationDate”: “2019-05-26T04:15:31.000Z”, 
            “ImageId”: “ami-0bc5cd6axxxxxxxxxx”, 
            “ImageLocation”: “2299xxxxxxxxx/redhat-test-ami_20190526”, 
            “ImageType”: “machine”, 
            “Public”: false, 
            “OwnerId”: “2299xxxxxxxxx”, 
            “State”: “available”, 
            “BlockDeviceMappings”: [ 
                { 
                    “DeviceName”: “/dev/sda1”, 
                    “Ebs”: { 
                        “DeleteOnTermination”: true, 
                        “SnapshotId”: “snap-07fa0e9ad258262a8”, 
                        “VolumeSize”: 10, 
                        “VolumeType”: “gp2”, 
                        “Encrypted”: false 
                    } 
                } 
            ], 
            “EnaSupport”: true, 
            “Hypervisor”: “xen”, 
            “Name”: “redhat-test-ami_20190526”, 
            “RootDeviceName”: “/dev/sda1”, 
            “RootDeviceType”: “ebs”, 
            “SriovNetSupport”: “simple”, 
            “VirtualizationType”: “hvm” 
        } 
    ] 

[ec2-user@AWSCLI ~]$

 

 

 

 

【事前準備】セキュリティグループを作成する

EC2 インスタンスを作成するためにはセキュリティグループが必要になります。

既存のセキュリティグループを流用する場合は問題ないですが、まだ適用するセキュリティグループがない場合は、事前準備としてセキュリティグループを作成しておきます。

 

セキュリティグループの設定

以下のようにセキュリティグループを設計します。

  • VPC ← vpc-34xxxxxxx
  • セキュリティグループ名 ← RedHat-security-group
  • インバウンド許可 ← TCP/22(ssh)
  • 許可セグメント ← 0.0.0.0/0

 

セキュリティグループを作成する

最初にセキュリティグループを作成します。

[ec2-user@AWSCLI ~]$ aws ec2 create-security-group –group-name RedHat-security-group –description “Created by AWS CLI” 

    “GroupId”: “sg-010971fae7c0726fb” 

[ec2-user@AWSCLI ~]$

 

 

 

セキュリティグループを設定する(セキュリティグループにルールを追加する)

次に作成したセキュリティグループ(sg-010971fae7c0726fb)にルールを追加します。

上の設計の通りのルールを追加します。

[ec2-user@AWSCLI ~]$ aws ec2 authorize-security-group-ingress –group-id sg-010971fae7c0726fb –protocol tcp –port 22 –cidr 0.0.0.0/0
[ec2-user@AWSCLI ~]$

 

 

セキュリティグループの内容(ルール)を確認する

作成したセキュリティグループの内容(ルール)を確認します。

[ec2-user@AWSCLI ~]$ aws ec2 describe-security-groups –group-names RedHat-security-group 

    “SecurityGroups”: [ 
        { 
            “Description”: “Created by AWS CLI”, 
            “GroupName”: “RedHat-security-group”, 
            “IpPermissions”: [ 
                { 
                    “FromPort”: 22, 
                    “IpProtocol”: “tcp”, 
                    “IpRanges”: [ 
                        { 
                            “CidrIp”: “0.0.0.0/0” 
                        } 
                    ], 
                    “Ipv6Ranges”: [], 
                    “PrefixListIds”: [], 
                    “ToPort”: 22, 
                    “UserIdGroupPairs”: [] 
                } 
            ], 
            “OwnerId”: “2299xxxxxxxxx”, 
            “GroupId”: “sg-010971fae7c0726fb”, 
            “IpPermissionsEgress”: [ 
                { 
                    “IpProtocol”: “-1”, 
                    “IpRanges”: [ 
                        { 
                            “CidrIp”: “0.0.0.0/0” 
                        } 
                    ], 
                    “Ipv6Ranges”: [], 
                    “PrefixListIds”: [], 
                    “UserIdGroupPairs”: [] 
                } 
            ], 
            “VpcId”: “vpc-34xxxxxxx” 
        } 
    ] 

[ec2-user@AWSCLI ~]$

 

 

 

作成した AMI イメージより EC2 インスタンスを作成する

作成した AMI イメージより EC2 インスタンスを作成しますが、その前に事前準備をします。

 

設計をする

作成する前に設計をします。

  • VPC ← vpc-34xxxxxxx
  • AMI イメージ ← ami-0bc5cd6axxxxxxxxxx
  • インスタンスタイプ ← t2.micro
  • セキュリティグループID ← sg-010971fae7c0726fb
  • セキュリティグループ名 ← RedHat-security-group
  • キーペア名 ← RedHat_key_pair_20190429
  • インスタンス数 ← 1
  • サブネットID ← subnet-84d7d9f0
  • プライベート IP アドレス ← 172.31.10.10(サブネットが 172.31.0.0/20 なので使用可能 IP が 172.31.0.1
    ~ 172.31.15.254)
  • タグ ← Nameタグ:test-redhat01

 

コマンドライン

aws ec2 run-instances \
–image-id ami-0bc5cd6axxxxxxxxxx \
–count 1 \
–instance-type t2.micro \
–key-name RedHat_key_pair_20190429 \
–subnet-id subnet-84d7d9f0 \
–private-ip-address 172.31.10.10 \
–security-group-ids sg-010971fae7c0726fb \
–tag-specific ‘ResourceType=instance,Tags=[{Key=Name,Value=test-redhat01}]’

 

 

上記コマンドラインを実行

[ec2-user@AWSCLI ~]$ aws ec2 run-instances \ 
> –image-id ami-0bc5cd6axxxxxxxxxx \ 
–count 1 \ 
–instance-type t2.micro \ 
> –key-name  RedHat_key_pair_20190429 \ 
> –subnet-id subnet-84d7d9f0 \ 
–private-ip-address 172.31.10.10 \ 
–security-group-ids sg-010971fae7c0726fb \ 
–tag-specific ‘ResourceType=instance,Tags=[{Key=Name,Value=test-redhat01}]’ 

    “Groups”: [], 
    “Instances”: [ 
        { 
            “AmiLaunchIndex”: 0, 
            “ImageId”: “ami-0bc5cd6axxxxxxxxxx”, 
            “InstanceId”: “i-0b37bxxxxxxxxxxxxxx“,  ← 新規 EC2 インスタンスの ID です。
            “InstanceType”: “t2.micro”, 
            “KeyName”: “RedHat_key_pair_20190429”, 
            “LaunchTime”: “2019-05-26T07:29:06.000Z”, 
            “Monitoring”: { 
                “State”: “disabled” 
            }, 
            “Placement”: { 
                “AvailabilityZone”: “ap-northeast-1a”, 
                “GroupName”: “”, 
                “Tenancy”: “default” 
            }, 
            “PrivateDnsName”: “ip-172-31-10-10.ap-northeast-1.compute.internal”, 
            “PrivateIpAddress”: “172.31.10.10”, 
            “ProductCodes”: [], 
            “PublicDnsName”: “”, 
            “State”: { 
                “Code”: 0, 
                “Name”: “pending” 
            }, 
            “StateTransitionReason”: “”, 
            “SubnetId”: “subnet-84d7d9f0”, 
            “VpcId”: “vpc-34xxxxxxx”, 
            “Architecture”: “x86_64”, 
            “BlockDeviceMappings”: [], 
            “ClientToken”: “”, 
            “EbsOptimized”: false, 
            “Hypervisor”: “xen”, 
            “NetworkInterfaces”: [ 
                { 
                    “Attachment”: { 
                        “AttachTime”: “2019-05-26T07:29:06.000Z”, 
                        “AttachmentId”: “eni-attach-027ca8c914fdea66a”, 
                        “DeleteOnTermination”: true, 
                        “DeviceIndex”: 0, 
                        “Status”: “attaching” 
                    }, 
                    “Description”: “”, 
                    “Groups”: [ 
                        { 
                            “GroupName”: “RedHat-security-group”, 
                            “GroupId”: “sg-010971fae7c0726fb” 
                        } 
                    ], 
                    “Ipv6Addresses”: [], 
                    “MacAddress”: “06:26:93:9c:b6:80”, 
                    “NetworkInterfaceId”: “eni-09ee2f0xxxxxxxxxxxxx”, 
                    “OwnerId”: “2299xxxxxxxxx”, 
                    “PrivateDnsName”: “ip-172-31-10-10.ap-northeast-1.compute.internal”, 
                    “PrivateIpAddress”: “172.31.10.10”, 
                    “PrivateIpAddresses”: [ 
                        { 
                            “Primary”: true, 
                            “PrivateDnsName”: “ip-172-31-10-10.ap-northeast-1.compute.internal”, 
                            “PrivateIpAddress”: “172.31.10.10” 
                        } 
                    ], 
                    “SourceDestCheck”: true, 
                    “Status”: “in-use”, 
                    “SubnetId”: “subnet-84d7d9f0”, 
                    “VpcId”: “vpc-34xxxxxxx”, 
                    “InterfaceType”: “interface” 
                } 
            ], 
            “RootDeviceName”: “/dev/sda1”, 
            “RootDeviceType”: “ebs”, 
            “SecurityGroups”: [ 
                { 
                    “GroupName”: “RedHat-security-group”, 
                    “GroupId”: “sg-010971fae7c0726fb” 
                } 
            ], 
            “SourceDestCheck”: true, 
            “StateReason”: { 
                “Code”: “pending”, 
                “Message”: “pending” 
            }, 
            “Tags”: [ 
                { 
                    “Key”: “Name”, 
                    “Value”: “test-redhat01” 
                } 
            ], 
            “VirtualizationType”: “hvm”, 
            “CpuOptions”: { 
                “CoreCount”: 1, 
                “ThreadsPerCore”: 1 
            }, 
            “CapacityReservationSpecification”: { 
                “CapacityReservationPreference”: “open” 
            } 
        } 
    ], 
    “OwnerId”: “2299xxxxxxxxx”, 
    “ReservationId”: “r-08bfdf7ff1227cdf8” 

[ec2-user@AWSCLI ~]$

 

 

パブリック IP アドレスも割り当てられていた

上記コマンドを実行したところ、パブリック IP アドレスも割り当てられていました。

【AWS】AWS CLI(AWS コマンドライン)からの EC2 インスタンス構築手順

 

 

 

インスタンス起動時に bash スクリプトを実行し環境設定したい

インスタンス起動時に一律にアカウントを設定したり、パッケージをインストールしたい場合があります。

 

[ec2-user@AWSCLI scripts]$ pwd
/home/ec2-user/scripts
[ec2-user@AWSCLI scripts]$ ls
initscript.sh
[ec2-user@AWSCLI scripts]$ cat initscript.sh
#!/bin/bash
touch /tmp/test.txt
[ec2-user@AWSCLI scripts]$

 

 

コマンドライン

aws ec2 run-instances \
–image-id ami-0bc5cd6axxxxxxxxxx \
–count 1 \
–instance-type t2.micro \
–key-name RedHat_key_pair_20190429 \
–subnet-id subnet-84d7d9f0 \
–private-ip-address 172.31.10.10 \
–security-group-ids sg-010971fae7c0726fb \
–tag-specific ‘ResourceType=instance,Tags=[{Key=Name,Value=test-redhat01}]’ \
–user-data file:///home/ec2-user/scripts/initscript.sh

 

 

コマンド実行

[ec2-user@AWSCLI scripts]$ aws ec2 run-instances \ 
> –image-id ami-0bc5cd6axxxxxxxxxx \ 
> –count 1 \ 
> –instance-type t2.micro \ 
> –key-name  RedHat_key_pair_20190429 \ 
> –subnet-id subnet-84d7d9f0 \ 
> –private-ip-address 172.31.10.10 \ 
> –security-group-ids sg-010971fae7c0726fb \ 
> –tag-specific ‘ResourceType=instance,Tags=[{Key=Name,Value=test-redhat01}]’ \ 
> –user-data file:///home/ec2-user/scripts/initscript.sh 

    “Groups”: [], 
    “Instances”: [ 
        { 
            “AmiLaunchIndex”: 0, 
            “ImageId”: “ami-0bc5cd6axxxxxxxxxx”, 
            “InstanceId”: “i-0056bb9a7baecdebf”, 
            “InstanceType”: “t2.micro”, 
            “KeyName”: “RedHat_key_pair_20190429”, 
            “LaunchTime”: “2019-05-26T07:59:59.000Z”, 
            “Monitoring”: { 
                “State”: “disabled” 
            }, 
            “Placement”: { 
                “AvailabilityZone”: “ap-northeast-1a”, 
                “GroupName”: “”, 
                “Tenancy”: “default” 
            }, 
            “PrivateDnsName”: “ip-172-31-10-10.ap-northeast-1.compute.internal”, 
            “PrivateIpAddress”: “172.31.10.10”, 
            “ProductCodes”: [], 
            “PublicDnsName”: “”, 
            “State”: { 
                “Code”: 0, 
                “Name”: “pending” 
            }, 
            “StateTransitionReason”: “”, 
            “SubnetId”: “subnet-84d7d9f0”, 
            “VpcId”: “vpc-34xxxxxxx”, 
            “Architecture”: “x86_64”, 
            “BlockDeviceMappings”: [], 
            “ClientToken”: “”, 
            “EbsOptimized”: false, 
            “Hypervisor”: “xen”, 
            “NetworkInterfaces”: [ 
                { 
                    “Attachment”: { 
                        “AttachTime”: “2019-05-26T07:59:59.000Z”, 
                        “AttachmentId”: “eni-attach-07a586569b36aa0d8”, 
                        “DeleteOnTermination”: true, 
                        “DeviceIndex”: 0, 
                        “Status”: “attaching” 
                    }, 
                    “Description”: “”, 
                    “Groups”: [ 
                        { 
                            “GroupName”: “RedHat-security-group”, 
                            “GroupId”: “sg-010971fae7c0726fb” 
                        } 
                    ], 
                    “Ipv6Addresses”: [], 
                    “MacAddress”: “06:a8:e3:d7:d0:c8”, 
                    “NetworkInterfaceId”: “eni-02843b28ddb3a2b53”, 
                    “OwnerId”: “2299xxxxxxxxx”, 
                    “PrivateDnsName”: “ip-172-31-10-10.ap-northeast-1.compute.internal”, 
                    “PrivateIpAddress”: “172.31.10.10”, 
                    “PrivateIpAddresses”: [ 
                        { 
                            “Primary”: true, 
                            “PrivateDnsName”: “ip-172-31-10-10.ap-northeast-1.compute.internal”, 
                            “PrivateIpAddress”: “172.31.10.10” 
                        } 
                    ], 
                    “SourceDestCheck”: true, 
                    “Status”: “in-use”, 
                    “SubnetId”: “subnet-84d7d9f0”, 
                    “VpcId”: “vpc-34xxxxxxx”, 
                    “InterfaceType”: “interface” 
                } 
            ], 
            “RootDeviceName”: “/dev/sda1”, 
            “RootDeviceType”: “ebs”, 
            “SecurityGroups”: [ 
                { 
                    “GroupName”: “RedHat-security-group”, 
                    “GroupId”: “sg-010971fae7c0726fb” 
                } 
            ], 
            “SourceDestCheck”: true, 
            “StateReason”: { 
                “Code”: “pending”, 
                “Message”: “pending” 
            }, 
            “Tags”: [ 
                { 
                    “Key”: “Name”, 
                    “Value”: “test-redhat01” 
                } 
            ], 
            “VirtualizationType”: “hvm”, 
            “CpuOptions”: { 
                “CoreCount”: 1, 
                “ThreadsPerCore”: 1 
            }, 
            “CapacityReservationSpecification”: { 
                “CapacityReservationPreference”: “open” 
            } 
        } 
    ], 
    “OwnerId”: “2299xxxxxxxxx”, 
    “ReservationId”: “r-0f4ccc0e0cccd5cbd” 

[ec2-user@AWSCLI scripts]$

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください