http://jawsug-cli.doorkeeper.jp/events/15122 でのハンズオン資料です。
http://qiita.com/tcsh/items/41e1aa3c77c469c92e84 で構築したVPC上に、AWS CLIを利用してEC2のインスタンスを構築します。
(上記記事中で設定している環境変数、シェル変数が下記の手順では必要になります。)
今回は、EC2マネジメントコンソールを眺めながら作業すると、CLIでの作業の意味がわかりやすいと思います。
前提条件
-
EC2についてフル権限がある。
-
http://qiita.com/tcsh/items/41e1aa3c77c469c92e84 の手順を実施している。(変数が設定されている)
- 事前確認
===========
稼動インスタンスが存在しないことを確認
このハンズオンでは、手順の最後に全てのインスタンスを終了します。
必ず、同一リージョン、同一VPCでインスタンスが起動していないことを確認してください。
$ aws ec2 describe-instances --filters Name=vpc-id,Values=${VPC_ID} Name=instance-state-name,Values=running
{
"Reservations": []
}
- キーペアの作成
=================
キーペアの確認
EC2のキーペアを確認します。
$ aws ec2 describe-key-pairs
{
"KeyPairs": []
}
キーペアの作成
キーペアが存在しない場合は、キーペアを作成します。
(キーペアが存在する場合も、以下の手順をスムーズに行うために、このハンズオン用のキーペアを作成することをお奨めします。)
$ EC2_KEY_NAME="${AWS_DEFAULT_REGION}-prject01"
$ FILE_SSH_KEY="${HOME}/.ssh/${EC2_KEY_NAME}.pem"
$ aws ec2 create-key-pair --key-name ${EC2_KEY_NAME} --query 'KeyMaterial' --output text > ${FILE_SSH_KEY}; cat ${FILE_SSH_KEY}
$ chmod 400 ${FILE_SSH_KEY}
キーペアの確認
$ aws ec2 describe-key-pairs --key-name ${EC2_KEY_NAME}
{
"KeyPairs": [
{
"KeyName": "ap-northeast-1-prject01",
"KeyFingerprint": "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"
}
]
}
- AMIイメージの選択
====================
Amazon Linuxのバージョン決定
Amazon Linuxのバージョンを決定します。
$ EC2_AMI_VERSION='2015.03.0'
AMI IDの取得
そのリージョンで利用可能なAmazon LinuxのAMI IDを取得します。
$ EC2_AMI_ID=`aws ec2 describe-images --owners amazon --filters Name=description,Values="Amazon Linux AMI ${EC2_AMI_VERSION} x86_64 HVM EBS" --query 'Images[].ImageId' --output text`; echo ${EC2_AMI_ID}
- Privateインスタンス起動 (Subnet01)
=====================================
最初に、PrivateサブネットでEC2インスタンスを上げてみます。
インスタンスタイプの決定
EC2インスタンスのインスタンスタイプを決定します。
(ここでは無料枠でも利用できるt2.microを選択します。)
$ EC2_INSTANCE_TYPE='t2.micro'
インスタンスの起動
PrivateサブネットでEC2インスタンスを起動します。
$ aws ec2 run-instances \
--image-id ${EC2_AMI_ID} \
--instance-type ${EC2_INSTANCE_TYPE} \
--key-name ${EC2_KEY_NAME} \
--security-group-ids ${VPC_SG_ID} \
--subnet-id ${VPC_NET01_ID}
{
"OwnerId": "XXXXXXXXXXXX",
"ReservationId": "r-XXXXXXXX",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"RootDeviceType": "ebs",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2014-11-23T11:42:59.000Z",
"PrivateIpAddress": "10.192.1.XXX",
"ProductCodes": [],
"VpcId": "vpc-XXXXXXXX",
"StateTransitionReason": null,
"InstanceId": "i-XXXXXXXX",
"ImageId": "ami-b5a7ea85",
"PrivateDnsName": "ip-10-192-1-XXX.ap-northeast-1.compute.internal",
"KeyName": "ap-northeast-1-prject01",
"SecurityGroups": [
{
"GroupName": "SSHLoginSecurityGroup",
"GroupId": "sg-XXXXXXXX"
}
],
"ClientToken": null,
"SubnetId": "subnet-XXXXXXXX",
"InstanceType": "t2.micro",
"NetworkInterfaces": [
{
"Status": "in-use",
"MacAddress": "XX:XX:XX:XX:XX:XX",
"SourceDestCheck": true,
"VpcId": "vpc-XXXXXXXX",
"Description": null,
"NetworkInterfaceId": "eni-XXXXXXXX",
"PrivateIpAddresses": [
{
"Primary": true,
"PrivateIpAddress": "10.192.1.XXX"
}
],
"Attachment": {
"Status": "attaching",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "eni-attach-XXXXXXXX",
"AttachTime": "2014-11-23T11:42:59.000Z"
},
"Groups": [
{
"GroupName": "SSHLoginSecurityGroup",
"GroupId": "sg-XXXXXXXX"
}
],
"SubnetId": "subnet-XXXXXXXX",
"OwnerId": "XXXXXXXXXXXX",
"PrivateIpAddress": "10.192.1.XXX"
}
],
"SourceDestCheck": true,
"Placement": {
"Tenancy": "default",
"GroupName": null,
"AvailabilityZone": "ap-northeast-1a"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [],
"Architecture": "x86_64",
"StateReason": {
"Message": "pending",
"Code": "pending"
},
"RootDeviceName": "/dev/xvda",
"VirtualizationType": "hvm",
"AmiLaunchIndex": 0
}
]
}
インスタンスIDの取得
起動したEC2インスタンスのインスタンスIDを取得します。
$ VPC_NET01_INSTANCES=`aws ec2 describe-instances --filter Name=subnet-id,Values=${VPC_NET01_ID} --query 'Reservations[].Instances[].InstanceId' --output text`; echo ${VPC_NET01_INSTANCES}
i-XXXXXXXX
プライベートアドレスの取得
起動したEC2インスタンスのプライベートIPアドレスを取得します。
これは、のちほどPublicサブネットのEC2インスタンスからSSHログインするときに必要となります。
$ VPC_NET01_INSTANCE_ADDR=`aws ec2 describe-instances --filter Name=subnet-id,Values=${VPC_NET01_ID} --query 'Reservations[].Instances[].PrivateIpAddress' --output text`; echo ${VPC_NET01_INSTANCE_ADDR}
10.192.1.XXX
ノート: このハンズオンでは、Subnet03でのEC2インスタンス起動は行いません。 (Subnet01と同じ手順のため)
- Publicインスタンス起動 (Subnet11)
====================================
続いて、PublicサブネットでEC2インスタンスを起動します。
このサブネットは、EC2インスタンス起動時にPublicIPアドレスが自動的に付かない設定をしているので、EIPを手動で追加します。
今回は、VPC内に起動されるインスタンスがDNSホスト名を取得しない設定で起動してみます。
インスタンスの起動
EC2インスタンスを起動します。
$ aws ec2 run-instances \
--image-id ${EC2_AMI_ID} \
--instance-type ${EC2_INSTANCE_TYPE} \
--key-name ${EC2_KEY_NAME} \
--security-group-ids ${VPC_SG_ID} \
--subnet-id ${VPC_NET11_ID}
{
"OwnerId": "XXXXXXXXXXXX",
"ReservationId": "r-XXXXXXXX",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"RootDeviceType": "ebs",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2014-11-23T09:26:44.000Z",
"PrivateIpAddress": "10.192.129.XX",
"ProductCodes": [],
"VpcId": "vpc-XXXXXXXX",
"StateTransitionReason": null,
"InstanceId": "i-XXXXXXXX",
"ImageId": "ami-XXXXXXXX",
"PrivateDnsName": "ip-10-192-129-XX.ap-northeast-1.compute.internal",
"KeyName": "ap-northeast-1-prject01",
"SecurityGroups": [
{
"GroupName": "SSHLoginSecurityGroup",
"GroupId": "sg-XXXXXXXX"
}
],
"ClientToken": null,
"SubnetId": "subnet-XXXXXXXX",
"InstanceType": "t2.micro",
"NetworkInterfaces": [
{
"Status": "in-use",
"MacAddress": "XX:XX:XX:XX:XX:XX",
"SourceDestCheck": true,
"VpcId": "vpc-XXXXXXXX",
"Description": null,
"NetworkInterfaceId": "eni-XXXXXXXX",
"PrivateIpAddresses": [
{
"Primary": true,
"PrivateIpAddress": "10.192.129.XX"
}
],
"Attachment": {
"Status": "attaching",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "eni-attach-XXXXXXXX",
"AttachTime": "2014-11-23T09:26:44.000Z"
},
"Groups": [
{
"GroupName": "SSHLoginSecurityGroup",
"GroupId": "sg-XXXXXXXX"
}
],
"SubnetId": "subnet-XXXXXXXX",
"OwnerId": "XXXXXXXXXXXX",
"PrivateIpAddress": "10.192.129.XX"
}
],
"SourceDestCheck": true,
"Placement": {
"Tenancy": "default",
"GroupName": null,
"AvailabilityZone": "ap-northeast-1a"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [],
"Architecture": "x86_64",
"StateReason": {
"Message": "pending",
"Code": "pending"
},
"RootDeviceName": "/dev/xvda",
"VirtualizationType": "hvm",
"AmiLaunchIndex": 0
}
]
}
インスタンスIDの取得
起動したEC2インスタンスのインスタンスIDを取得します。
$ VPC_NET11_INSTANCES=`aws ec2 describe-instances --filter Name=subnet-id,Values=${VPC_NET11_ID} --query 'Reservations[].Instances[].InstanceId' --output text`; echo ${VPC_NET11_INSTANCES}
EIPの確認
既に割り当てを受けているPublicIPアドレスがないか確認します。
(もしEIPでEC2インスタンスに関連付けしていないものがあると、非利用による課金が発生しているかもしれません。)
$ aws ec2 describe-addresses
{
"Addresses": []
}
EIPの作成
PublicIPアドレス(Elastic IP Address)の割り当てを受けます。
$ aws ec2 allocate-address
{
"PublicIp": "aaa.bbb.ccc.ddd",
"Domain": "vpc",
"AllocationId": "eipalloc-XXXXXXXX"
}
EIP IDの取得
未関連付けの(さきほど割り当てを受けた)PublicIPアドレスのEIP割当てIDを取得します。
$ EC2_EIP_ID=`aws ec2 describe-addresses | jq -r '.Addresses[] | select(has("AssociationId") | not).AllocationId'`; echo ${EC2_EIP_ID}
eipalloc-XXXXXXXX
EIPの関連付け
EIPをEC2インスタンスに関連付けます。
$ aws ec2 associate-address --allocation-id ${EC2_EIP_ID} --instance-id ${VPC_NET11_INSTANCES}
{
"AssociationId": "eipassoc-8bfbbaee"
}
EIPの確認
EIPがEC2インスタンスに関連付けられたことを確認します。
$ aws ec2 describe-addresses --allocation-ids ${EC2_EIP_ID}
{
"Addresses": [
{
"Domain": "vpc",
"InstanceId": "i-XXXXXXXX",
"NetworkInterfaceId": "eni-XXXXXXXX",
"AssociationId": "eipassoc-XXXXXXXX",
"NetworkInterfaceOwnerId": "XXXXXXXXXXXX",
"PublicIp": "aaa.bbb.ccc.ddd",
"AllocationId": "eipalloc-XXXXXXXX",
"PrivateIpAddress": "10.192.129.XX"
}
]
}
EIPのアドレス取得
EIPが持つグローバルIPアドレスを取得します。
これは、のちほどEC2インスタンスにSSHログインするときに必要となります。
$ EC2_EIP_ADDR=`aws ec2 describe-addresses --allocation-ids ${EC2_EIP_ID} --query 'Addresses[].PublicIp' --output text`; echo ${EC2_EIP_ADDR}
aaa.bbb.ccc.ddd
ログイン (Publicインスタンス NET11)
起動したEC2インスタンスにSSHログインしてみましょう。
$ ssh -i ${FILE_SSH_KEY} ec2-user@${EC2_EIP_ADDR}
The authenticity of host 'aaa.bbb.ccc.ddd (aaa.bbb.ccc.ddd)' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)?
yes(Enter)
Warning: Permanently added 'aaa.bbb.ccc.ddd' (RSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@ip-10-192-129-XX ~]$
これでPublicサブネットで起動したEC2インスタンスにログインできました。
続いて、さきほどPrivateサブネットで起動したEC2インスタンスにログインできるようにキーペアをこのEC2インスタンスに転送します。
$ scp -i ${FILE_SSH_KEY} ${FILE_SSH_KEY} ec2-user@${EC2_EIP_ADDR}:.ssh/
ap-northeast-1-prject01.pem 100% 1675 1.6KB/s 00:00
ログイン (Privateインスタンス NET01)
キーペアを転送したら、早速PublicサブネットのEC2インスタンスから、PrivateサブネットのEC2インスタンスにログインしてみましょう。
[ec2-user@ip-10-192-129-XX ~]$ export AWS_DEFAULT_REGION='ap-northeast-1'
[ec2-user@ip-10-192-129-XX ~]$ EC2_KEY_NAME="${AWS_DEFAULT_REGION}-prject01"
[ec2-user@ip-10-192-129-XX ~]$ FILE_SSH_KEY="${HOME}/.ssh/${EC2_KEY_NAME}.pem"
[ec2-user@ip-10-192-129-XX ~]$ VPC_NET01_INSTANCE_ADDR='${Subnet01で起動したインスタンスのプライベートアドレス}'
ノート: 「Subnet01で起動したインスタンスのプライベートアドレス」の確認方法ローカルのターミナル:
echo ${VPC_NET01_INSTANCE_ADDR}
10.192.1.XXX
SSHログインします。
[ec2-user@ip-10-192-129-XX ~]$ ssh -i ${FILE_SSH_KEY} ec2-user@${VPC_NET01_INSTANCE_ADDR}
The authenticity of host '10.192.1.XXX (10.192.1.XXX)' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)?
yes(Enter)
Warning: Permanently added '10.192.1.XXX' (RSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
[ec2-user@ip-10-192-1-XXX ~]$
これでPrivateサブネットで起動したEC2インスタンスにログインできました。
PrivateサブネットのEC2インスタンスからログアウトします。
[ec2-user@ip-10-192-1-XXX ~]$ exit
[ec2-user@ip-10-192-129-XX ~]$
PublicサブネットのEC2インスタンスからログアウトします。
[ec2-user@ip-10-192-129-XX ~]$ exit
$
- インスタンス起動(Subnet13)
=============================
最後に、PublicサブネットでEC2インスタンスをもう一つ起動します。
このサブネットは、EC2インスタンス起動時にPublicIPアドレスが自動的に付く設定をしているので、EIPの手動追加手順は不要です。
今回はVPCの設定変更を行い、VPC内に起動されるインスタンスがDNSホスト名を取得するようにして、挙動の違いを確認します。
VPCの設定変更 (DNSホスト名有効化)
-[ VPC(DNSホスト名)設定の確認 ]-
まず、現在の設定を確認します。
デフォルトでfalseになっています。
$ aws ec2 describe-vpc-attribute --vpc-id ${VPC_ID} --attribute enableDnsHostnames
{
"VpcId": "vpc-4865b82d",
"EnableDnsHostnames": {
"Value": false
}
}
-[ VPC(DNSホスト名)設定の有効化 ]-
DNSホスト名を有効にします。
$ aws ec2 modify-vpc-attribute --vpc-id ${VPC_ID} --enable-dns-hostnames
(戻り値なし)
-[ VPC(DNSホスト名)設定の確認 ]-
変更後の設定を確認します。
$ aws ec2 describe-vpc-attribute --vpc-id ${VPC_ID} --attribute enableDnsHostnames
{
"VpcId": "vpc-4865b82d",
"EnableDnsHostnames": {
"Value": true
}
}
インスタンスの起動
EC2インスタンスを起動します。
$ aws ec2 run-instances \
--image-id ${EC2_AMI_ID} \
--instance-type ${EC2_INSTANCE_TYPE} \
--key-name ${EC2_KEY_NAME} \
--security-group-ids ${VPC_SG_ID} \
--subnet-id ${VPC_NET13_ID}
{
"OwnerId": "XXXXXXXXXXXX",
"ReservationId": "r-XXXXXXXX",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": null,
"RootDeviceType": "ebs",
"State": {
"Code": 0,
"Name": "pending"
},
"EbsOptimized": false,
"LaunchTime": "2014-11-23T12:18:59.000Z",
"PrivateIpAddress": "10.192.131.XX",
"ProductCodes": [],
"VpcId": "vpc-XXXXXXXX",
"StateTransitionReason": null,
"InstanceId": "i-XXXXXXXX",
"ImageId": "ami-XXXXXXXX",
"PrivateDnsName": "ip-10-192-131-XX.ap-northeast-1.compute.internal",
"KeyName": "ap-northeast-1-prject01",
"SecurityGroups": [
{
"GroupName": "SSHLoginSecurityGroup",
"GroupId": "sg-XXXXXXXX"
}
],
"ClientToken": null,
"SubnetId": "subnet-XXXXXXXX",
"InstanceType": "t2.micro",
"NetworkInterfaces": [
{
"Status": "in-use",
"MacAddress": "XX:XX:XX:XX:XX:XX",
"SourceDestCheck": true,
"VpcId": "vpc-XXXXXXXX",
"Description": null,
"NetworkInterfaceId": "eni-XXXXXXXX",
"PrivateIpAddresses": [
{
"PrivateDnsName": "ip-10-192-131-XX.ap-northeast-1.compute.internal",
"Primary": true,
"PrivateIpAddress": "10.192.131.XX"
}
],
"PrivateDnsName": "ip-10-192-131-XX.ap-northeast-1.compute.internal",
"Attachment": {
"Status": "attaching",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "eni-attach-XXXXXXXX",
"AttachTime": "2014-11-23T12:18:59.000Z"
},
"Groups": [
{
"GroupName": "SSHLoginSecurityGroup",
"GroupId": "sg-XXXXXXXX"
}
],
"SubnetId": "subnet-XXXXXXXX",
"OwnerId": "XXXXXXXXXXXX",
"PrivateIpAddress": "10.192.131.XX"
}
],
"SourceDestCheck": true,
"Placement": {
"Tenancy": "default",
"GroupName": null,
"AvailabilityZone": "ap-northeast-1c"
},
"Hypervisor": "xen",
"BlockDeviceMappings": [],
"Architecture": "x86_64",
"StateReason": {
"Message": "pending",
"Code": "pending"
},
"RootDeviceName": "/dev/xvda",
"VirtualizationType": "hvm",
"AmiLaunchIndex": 0
}
]
}
インスタンスIDの取得
起動したEC2インスタンスのインスタンスIDを取得します。
$ VPC_NET13_INSTANCES=`aws ec2 describe-instances --filter Name=subnet-id,Values=${VPC_NET13_ID} --query 'Reservations[].Instances[].InstanceId' --output text`; echo ${VPC_NET13_INSTANCES}
PublicDnsNameの取得
実際のPublic DNS名を確認してみましょう。
$ VPC_NET13_INSTANCE_NAME_PUBLIC=`aws ec2 describe-instances --instance-ids ${VPC_NET13_INSTANCES} --query 'Reservations[].Instances[].PublicDnsName' --output text`; echo ${VPC_NET13_INSTANCE_NAME_PUBLIC}
ec2-aaa-bbb-ccc-ddd.ap-northeast-1.compute.amazonaws.com
ログイン
起動したEC2インスタンスに、Public DNS名を指定してSSHログインしてみましょう。
$ ssh -i ${FILE_SSH_KEY} ec2-user@${VPC_NET13_INSTANCE_NAME_PUBLIC}
The authenticity of host 'ec2-aaa-bbb-ccc-ddd.ap-northeast-1.compute.amazonaws.com (aaa.bbb.ccc.ddd)' can't be established.
RSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.
Are you sure you want to continue connecting (yes/no)?
yes(Enter)
Warning: Permanently added 'ec2-aaa-bbb-ccc-ddd.ap-northeast-1.compute.amazonaws.com,aaa.bbb.ccc.ddd' (RSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/
10 package(s) needed for security, out of 24 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-192-131-90 ~]$
これでPublicサブネットで起動した2つ目のEC2インスタンスにログインできました。
- 全インスタンスの終了
=======================
EC2インスタンスを複数起動したままだと、無料枠を超えて課金されてしまうので、今回のVPC上のEC2インスタンスは全て終了しておきましょう。
稼動インスタンスのインスタンスID取得
まず、VPC上で稼動しているEC2インスタンスのインスタンスIDを取得します。
$ ARRAY_EC2_INSTANCES=`aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query 'Reservations[].Instances[].InstanceId' --output text`; echo ${ARRAY_EC2_INSTANCES}
i-XXXXXXXX i-YYYYYYYY i-ZZZZZZZZ
インスタンスのステータス確認
VPC上で稼動しているEC2インスタンスのステータスを確認します。
$ aws ec2 describe-instance-status --instance-ids ${ARRAY_EC2_INSTANCES} --query 'InstanceStatuses[].[InstanceId,InstanceState.Name]' --output table
---------------------------
| DescribeInstanceStatus |
+-------------+-----------+
| i-XXXXXXXX | running |
| i-YYYYYYYY | running |
| i-ZZZZZZZZ | running |
+-------------+-----------+
稼動インスタンスの終了
ステータスがrunningのEC2インスタンスを全て終了します。
$ aws ec2 terminate-instances --instance-ids ${ARRAY_EC2_INSTANCES}
{
"TerminatingInstances": [
{
"InstanceId": "i-XXXXXXXX",
"CurrentState": {
"Code": 32,
"Name": "shutting-down"
},
"PreviousState": {
"Code": 16,
"Name": "running"
}
},
{
"InstanceId": "i-YYYYYYYY",
"CurrentState": {
"Code": 32,
"Name": "shutting-down"
},
"PreviousState": {
"Code": 16,
"Name": "running"
}
},
{
"InstanceId": "i-ZZZZZZZZ",
"CurrentState": {
"Code": 32,
"Name": "shutting-down"
},
"PreviousState": {
"Code": 16,
"Name": "running"
}
}
]
}
対象インスタンスの終了確認
終了したEC2インスタンスが全て終了状態になっていることを確認します。
$ aws ec2 describe-instances --instance-ids ${ARRAY_EC2_INSTANCES} \
--query 'Reservations[].Instances[].[InstanceId,State.Name]' --output table
------------------------------
| DescribeInstances |
+-------------+--------------+
| i-5b863a92 | terminated |
| i-afba7759 | terminated |
| i-d9db162f | terminated |
+-------------+--------------+
稼動インスタンスが存在しないことを確認
VPC上にステータスがrunningになっているEC2インスタンスが存在しないことを確認します。
$ aws ec2 describe-instances --filters Name=instance-state-name,Values=running \
--query 'Reservations[].Instances[].InstanceId' --output text
(戻り値なし)
EIPの返却
忘れずにEIPを返却しておきましょう。
$ aws ec2 release-address --allocation-id ${EC2_EIP_ID}
(戻り値なし)
$ aws ec2 describe-addresses
{
"Addresses": []
}
終了
以上で、VPC上でEC2インスタンスを起動/終了するハンズオンは完了です。