こんにちは。beaglesoftの真鍋です。
ようやっとEC2インスタンスの作成へたどり着きました。EC2をどのように利用するかは多種多様です。VPSのように常に稼働するサービスとして利用することもあるでしょうし、開発環境として必要なときだけ利用することもあるでしょう。
AWS(にかぎらずクラウドなシステム)では、AWSのインフラをAPI経由でプログラムから制御することが可能です。このことは従来のVPSと大きく違うことです。プログラムから制御可能であるということはざっくりとした制御から細かな制御ができるようになるということで、サービスの幅が一気に広がることを意味します。
例えば営業支援システムは営業日ベースでのみ稼働することによるコスト削減ができます。オンプレミスの場合、システムの有効活用といえば24時間でどれだけのリソースを利用するかが重要でしたが、AWSで利用しないようにすることでいかに費用を抑えるかが重要となってきます。
つまり、時間単位での課金であるからこそ、必要な時間だけ起動する。必要なインスタンスだけ起動する。そういった機動力のあるインフラ管理が求められているように思います。
構築するVPC
今回構築するVPCは以下のイメージとなります。AWSではネットワークなどの構成を表現するルールが決まっています。詳細はAWS シンプルアイコン(全52種類)の覚え方まとめ - Qiitaなどが参考になると思います。
なお、この図はDraw.ioを利用して作成しました。Draw.ioについてはこちらを参考にしてください。
前提
このエントリーはAmazon Web Services パターン別構築・運用ガイドを参考にAWS CLIを利用して以下の環境を構築したときの履歴です。AWSを利用してみたいがよくわからないという方(私もまさにそうでしたが…)には調度良いと思いますのでぜひ購入してみてください。
設定を行うためには、IAMアカウント作成など予めAWSを利用する設定が行われていることを前提としています。
Amazon Web Services パターン別構築・運用ガイド
- 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/03/25
- メディア: 大型本
- この商品を含むブログ (2件) を見る
EC2インスタンスの作成
前回作成したVPCにEC2インスタンスを作成します。EC2インスタンスではElasticLoadBalancingで動作確認するためApacheのインストールとHTTPでの接続ができることを確認します。
パラメーター情報
EC2インスタンスの作成では以下のパラメータを設定します。
パラメータ名 | 値 |
---|---|
Name tag | |
VPC ID | vpc-6a97c20f |
Availability Zone | ap-northeast-1a |
CIDR block | 10.0.0.0/24 |
Auto-assign Public IP | NO |
CLIによる実行
AWS CLIにより設定を行います。実行する手順は以下のとおりとなります。
- AWS操作用の公開鍵・秘密鍵の作成
- SecurityGroupの作成
- EC2の起動
- EC2へのログイン
- ApacheのインストールとHTTPポートの疎通確認
- AMIの作成
- ElasticIPの利用
AWS操作用の公開鍵・秘密鍵の作成とインポート
実行ディレクトリにEC2インスタンスへ接続するためのKeyPairを作成します。
# KeyPairの存在確認 ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 describe-key-pairs { "KeyPairs": [ { "KeyName": "beagleKeyPair", "KeyFingerprint": "28:a2:c5:81:16:0c:5d:15:af:e9:de:26:03:ba:45:e6:f1:60:48:17" }, { "KeyName": "importKey-ymanabe", "KeyFingerprint": "db:68:46:4d:79:2f:f5:57:4e:7f:8b:1a:47:a6:10:c4" } ] } ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 create-key-pair --key-name beagle-key-pair-demo --query 'KeyMaterial' --output text > beagle-key-pair-demo.pem ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ ls -al total 8 drwxr-xr-x 3 ymanabe staff 102 4 3 08:31 . drwxr-xr-x+ 70 ymanabe staff 2380 4 3 08:31 .. -rw-r--r-- 1 ymanabe staff 1675 4 3 08:31 beagle-key-pair-demo.pem
次に作成したKeyPairが登録されていることを確認します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 describe-key-pairs { "KeyPairs": [ { "KeyName": "beagle-key-pair-demo", "KeyFingerprint": "c2:12:62:96:e5:50:6f:f8:c9:84:b9:dd:ff:da:cc:58:4e:36:0b:9d" }, { "KeyName": "beagleKeyPair", "KeyFingerprint": "28:a2:c5:81:16:0c:5d:15:af:e9:de:26:03:ba:45:e6:f1:60:48:17" }, { "KeyName": "importKey-ymanabe", "KeyFingerprint": "db:68:46:4d:79:2f:f5:57:4e:7f:8b:1a:47:a6:10:c4" } ] }
SecurityGroupの作成
EC2に適用するSecurityGroupを作成します。SecurityGroupはSecurityGroupの作成とSecurityGroupの設定をそれぞれ行います。
SecurityGroupの作成
SecurityGroupを作成します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 create-security-group --group-name beaglesoft-security-group-demo --description "beaglesoft security group for Demo." --vpc-id vpc-6a97c20f { "GroupId": "sg-ac9534c8" }
接続の設定
EC2インスタンスの接続設定を行います。今回の接続設定は以下のとおりとなります。
接続ポート | CIDR |
---|---|
22 | xxx.xxx.xxx.xxx/32 |
80 | 0.0.0.0./0 |
╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ curl http://checkip.amazonaws.com xxx.xxx.xxx.xxx ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 authorize-security-group-ingress --group-id sg-ac9534c8 --protocol tcp --port 22 --cidr xxx.xxx.xxx.xxx/32 255 ↵ ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 authorize-security-group-ingress --group-id sg-ac9534c8 --protocol tcp --port 80 --cidr 0.0.0.0/0 255 ↵ ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 describe-security-groups --group-id sg-ac9534c8 --output text SECURITYGROUPS beaglesoft security group for Demo. sg-ac9534c8 beaglesoft-security-group-demo 457499276421 vpc-6a97c20f IPPERMISSIONS 80 tcp 80 IPRANGES 0.0.0.0/0 IPPERMISSIONS 22 tcp 22 IPRANGES xxx.xxx.xxx.xxx/32 IPPERMISSIONSEGRESS -1 IPRANGES 0.0.0.0/0
EC2の起動
AWS CLIからEC2を起動します。設定するパラメーター情報は以下のとおりとなります。
パラメータ名 | 値 |
---|---|
image-id | ami-f80e0596 |
count | 1 |
instance-type | t2.micro |
key-name | beagle-key-pair-demo |
security-group-id | sg-ac9534c8 |
subnet-id | subnet-5282b225 |
associate-public-ip-address | 有効 |
上記のパラメーターを指定して実行します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 run-instances --image-id ami-f80e0596 --count 1 --instance-type t2.micro --key-name beagle-key-pair-demo --security-group-id sg-ac9534c8 --subnet-id subnet-5282b225 --associate-public-ip-address { "OwnerId": "457499276421", "ReservationId": "r-f7061a55", "Groups": [], "Instances": [ { "Monitoring": { "State": "disabled" }, "PublicDnsName": "", "RootDeviceType": "ebs", "State": { "Code": 0, "Name": "pending" }, "EbsOptimized": false, "LaunchTime": "2016-04-02T23:55:03.000Z", "PrivateIpAddress": "10.0.0.9", "ProductCodes": [], "VpcId": "vpc-6a97c20f", "StateTransitionReason": "", "InstanceId": "i-9a53f705", "ImageId": "ami-f80e0596", "PrivateDnsName": "ip-10-0-0-9.ap-northeast-1.compute.internal", "KeyName": "beagle-key-pair-demo", "SecurityGroups": [ { "GroupName": "beaglesoft-security-group-demo", "GroupId": "sg-ac9534c8" } ], "ClientToken": "", "SubnetId": "subnet-5282b225", "InstanceType": "t2.micro", "NetworkInterfaces": [ { "Status": "in-use", "MacAddress": "06:d5:95:68:07:c7", "SourceDestCheck": true, "VpcId": "vpc-6a97c20f", "Description": "", "NetworkInterfaceId": "eni-0277374a", "PrivateIpAddresses": [ { "PrivateDnsName": "ip-10-0-0-9.ap-northeast-1.compute.internal", "Primary": true, "PrivateIpAddress": "10.0.0.9" } ], "PrivateDnsName": "ip-10-0-0-9.ap-northeast-1.compute.internal", "Attachment": { "Status": "attaching", "DeviceIndex": 0, "DeleteOnTermination": true, "AttachmentId": "eni-attach-05a8f1f6", "AttachTime": "2016-04-02T23:55:03.000Z" }, "Groups": [ { "GroupName": "beaglesoft-security-group-demo", "GroupId": "sg-ac9534c8" } ], "SubnetId": "subnet-5282b225", "OwnerId": "457499276421", "PrivateIpAddress": "10.0.0.9" } ], "SourceDestCheck": true, "Placement": { "Tenancy": "default", "GroupName": "", "AvailabilityZone": "ap-northeast-1a" }, "Hypervisor": "xen", "BlockDeviceMappings": [], "Architecture": "x86_64", "StateReason": { "Message": "pending", "Code": "pending" }, "RootDeviceName": "/dev/xvda", "VirtualizationType": "hvm", "AmiLaunchIndex": 0 } ] }
実行した結果、AWSのインスタンスが作成されていることを確認します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 describe-instances --filters "Name=vpc-id,Values=vpc-6a97c20f" { "Reservations": [ { "OwnerId": "457499276421", "ReservationId": "r-f7061a55", "Groups": [], "Instances": [ { "Monitoring": { "State": "disabled" }, "PublicDnsName": "ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com", "State": { "Code": 16, "Name": "running" }, "EbsOptimized": false, "LaunchTime": "2016-04-02T23:55:03.000Z", "PublicIpAddress": "52.193.159.52", "PrivateIpAddress": "10.0.0.9", "ProductCodes": [], "VpcId": "vpc-6a97c20f", "StateTransitionReason": "", "InstanceId": "i-9a53f705", "ImageId": "ami-f80e0596", "PrivateDnsName": "ip-10-0-0-9.ap-northeast-1.compute.internal", "KeyName": "beagle-key-pair-demo", "SecurityGroups": [ { "GroupName": "beaglesoft-security-group-demo", "GroupId": "sg-ac9534c8" } ], "ClientToken": "", "SubnetId": "subnet-5282b225", "InstanceType": "t2.micro", "NetworkInterfaces": [ { "Status": "in-use", "MacAddress": "06:d5:95:68:07:c7", "SourceDestCheck": true, "VpcId": "vpc-6a97c20f", "Description": "", "Association": { "PublicIp": "52.193.159.52", "PublicDnsName": "ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com", "IpOwnerId": "amazon" }, "NetworkInterfaceId": "eni-0277374a", "PrivateIpAddresses": [ { "PrivateDnsName": "ip-10-0-0-9.ap-northeast-1.compute.internal", "Association": { "PublicIp": "52.193.159.52", "PublicDnsName": "ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com", "IpOwnerId": "amazon" }, "Primary": true, "PrivateIpAddress": "10.0.0.9" } ], "PrivateDnsName": "ip-10-0-0-9.ap-northeast-1.compute.internal", "Attachment": { "Status": "attached", "DeviceIndex": 0, "DeleteOnTermination": true, "AttachmentId": "eni-attach-05a8f1f6", "AttachTime": "2016-04-02T23:55:03.000Z" }, "Groups": [ { "GroupName": "beaglesoft-security-group-demo", "GroupId": "sg-ac9534c8" } ], "SubnetId": "subnet-5282b225", "OwnerId": "457499276421", "PrivateIpAddress": "10.0.0.9" } ], "SourceDestCheck": true, "Placement": { "Tenancy": "default", "GroupName": "", "AvailabilityZone": "ap-northeast-1a" }, "Hypervisor": "xen", "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "Status": "attached", "DeleteOnTermination": true, "VolumeId": "vol-3f59b3c1", "AttachTime": "2016-04-02T23:55:04.000Z" } } ], "Architecture": "x86_64", "RootDeviceType": "ebs", "RootDeviceName": "/dev/xvda", "VirtualizationType": "hvm", "AmiLaunchIndex": 0 } ] } ] } ╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 describe-instance-status --instance-id i-9a53f705 { "InstanceStatuses": [ { "InstanceId": "i-9a53f705", "InstanceState": { "Code": 16, "Name": "running" }, "AvailabilityZone": "ap-northeast-1a", "SystemStatus": { "Status": "ok", "Details": [ { "Status": "passed", "Name": "reachability" } ] }, "InstanceStatus": { "Status": "ok", "Details": [ { "Status": "passed", "Name": "reachability" } ] } } ] }
次にインスタンスにタグを設定します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 create-tags --resources i-9a53f705 --tags Key=Name,Value=bs-ec2-demo-demo ╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 describe-instances --filters "Name=vpc-id,Values=vpc-6a97c20f" --query "Reservations[].Instances[].Tags" [ [ { "Value": "bs-ec2-demo-demo", "Key": "Name" } ] ]
EC2へのログイン
EC2へログインするためpublic DNSの設定を取得します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ aws ec2 describe-instances | jq '.Reservations[].Instances[] | {PublicDnsName, PublicIpAddress, InstanceId}'aws ec2 describe-instances | jq '.Reservations[].Instances[] | {PublicDnsName, PublicIpAddress, InstanceId}' { "PublicDnsName": "ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com", "PublicIpAddress": "52.193.159.52" } ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ ls beagle-key-pair-demo.pem ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ mv beagle-key-pair-demo.pem ~/.ssh ╭─ymanabe@Yoichiro-no-MacBook-Pro ~/aws_work ‹2.2.4› ╰─$ cd ~ ╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ sudo chmod 600 ~/.ssh/beagle-key-pair-demo.pem Password: ╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ ssh -i ~/.ssh/beagle-key-pair-demo.pem ec2-user@ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com The authenticity of host 'ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com (52.193.159.52)' can't be established. RSA key fingerprint is 81:ce:0d:81:81:8b:9b:6a:97:b6:b1:f7:74:ec:ad:8a. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com,52.193.159.52' (RSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2016.03-release-notes/ 3 package(s) needed for security, out of 4 available Run "sudo yum update" to apply all updates. [ec2-user@ip-10-0-0-9 ~]$
注意
public DNSの情報を取得できない場合、EC2のインスタンスにAuto-assign Public IP
を設定していない可能性があるため設定を見直してください。
ApacheのインストールとHTTPポートの疎通確認
起動したEC2インスタンスにApacheのインストールとHTTPポートの疎通確認を行います。これは最終的にElasticLoadBalancingを利用した接続ができるか確認するために行います。
[ec2-user@ip-10-0-0-9 ~]$ sudo yum install -y httpd [ec2-user@ip-10-0-0-9 ~]$ sudo vi /var/www/html/index.html This page is at ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com. [ec2-user@ip-10-0-0-9 ~]$ sudo service httpd start [ec2-user@ip-10-0-0-9 ~]$ sudo chkconfig httpd on
この状態で、http://ec2-52-193-159-52.ap-northeast-1.compute.amazonaws.com/index.html
へ接続できることをブラウザから確認します。
AMIの作成
AWS CLIよりAMIを作成します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 create-image --instance-id i-9a53f705 --name "bs-ec2ami-demo-demo" --description "bs-ec2ami-demo-demo" 130 ↵ { "ImageId": "ami-c62031a8" } ╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 describe-images --image-id ami-c62031a8 2 ↵ { "Images": [ { "VirtualizationType": "hvm", "Name": "bs-ec2ami-demo-demo", "Hypervisor": "xen", "SriovNetSupport": "simple", "ImageId": "ami-c62031a8", "State": "pending", "BlockDeviceMappings": [ { "DeviceName": "/dev/xvda", "Ebs": { "DeleteOnTermination": true, "SnapshotId": "snap-30557008", "VolumeSize": 8, "VolumeType": "gp2", "Encrypted": false } } ], "Architecture": "x86_64", "ImageLocation": "457499276421/bs-ec2ami-demo-demo", "RootDeviceType": "ebs", "OwnerId": "457499276421", "RootDeviceName": "/dev/xvda", "CreationDate": "2016-04-03T00:39:19.000Z", "Public": false, "ImageType": "machine", "Description": "bs-ec2ami-demo-demo" } ] }
ElasticIPの利用
ElasticIP(EIP)をEC2インスタンスに紐付ける設定を行います。EIPは取得してからEC2のインスタンスへ紐付けるため2段階の設定を行います。
EIPを取得するために allocate-address
を実行します。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 allocate-address { "PublicIp": "52.69.244.122", "Domain": "vpc", "AllocationId": "eipalloc-0bbf2a6e" }
次に、EC2インスタンスとEIPを関連付けます。
╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 associate-address --instance-id i-9a53f705 --allocation-id eipalloc-0bbf2a6e { "AssociationId": "eipassoc-44df5220" } ╭─ymanabe@Yoichiro-no-MacBook-Pro ~ ‹2.2.4› ╰─$ aws ec2 describe-addresses { "Addresses": [ { "Domain": "vpc", "InstanceId": "i-9a53f705", "NetworkInterfaceId": "eni-0277374a", "AssociationId": "eipassoc-44df5220", "NetworkInterfaceOwnerId": "457499276421", "PublicIp": "52.69.244.122", "AllocationId": "eipalloc-0bbf2a6e", "PrivateIpAddress": "10.0.0.9" } ] }
以上で、EC2インスタンスの作成は完了です。次回は今回作成したAZとは別のAZにEC2インスタンスを起動する設定を行います。
AWSでの環境構築のエントリー全体
AWSでの環境構築は全体で7回に分かれています。このエントリーは5回めになります。