目次
前回の振り返り
EC2インスタンス用を起動するテンプレートを作成する
– EC2インスタンス用のキーペアを用意する
– ItportEc2.yaml
スタックを作成する
– ブラウザでアクセスしてみる
スタックを削除する
おわりに
前回の振り返り
前回はVPC、サブネット、Internet Gateway、Route Tableの作成用テンプレートを作成しました。
今回はネットワークのテンプレートとは別にした形でEC2を起動するテンプレートを用意して稼働させてみたいと思います。(テンプレートを別にすることでスタックの管理が分割できるのでそうしてみたいと思います。)
EC2インスタンス用を起動するテンプレートを作成する
EC2インスタンス(Amazon Linux 2)を起動するテンプレートを作成します。
ただサーバーが立ち上がるだけだと少々寂しいためhttpdやphp等も一緒にインストールされるようにユーザーデータに書いておきます。
EC2インスタンス用のキーペアを用意する
EC2用のキーペアは事前に用意しておきます。これはCloud FormationではなくAWSマネジメントコンソールから作成しておきます。
ItportEc2.yaml
キーペアを用意したら続いてyamlファイルを作成します。
「Parameters」セクションではキーペアの指定とsshを許可するIPアドレスを引数として定義しておきます。これでテンプレートを使いまわす際にYaml自体の編集が不要になります。EC2は起動したらLAMP環境が出来上がっているようにユーザーデータを使用して一緒にインストールしておきます。ユーザーデータの内容はこちらを参考にさせていただきました。
AWSTemplateFormatVersion: "2010-09-09"
Description: "Itport AWS VPC Networks"
Parameters:
KeyName:
Description: The EC2 Key Pair to allow SSH access to the instance
Type: "AWS::EC2::KeyPair::KeyName"
MyIP:
Description: IP address allowed to access EC2
Type: String
Resources:
EC2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-06098fd00463352b6
KeyName: !Ref KeyName
InstanceType: t3.micro
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
SubnetId: !ImportValue ItportSubnet1a
GroupSet:
- !Ref EC2SG
UserData: !Base64 |
#!/bin/bash
yum update -y
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum install -y httpd mariadb-server
systemctl start httpd
systemctl enable httpd
usermod -a -G apache ec2-user
chown -R ec2-user:apache /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} \;
find /var/www -type f -exec chmod 0664 {} \;
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
Tags:
- Key: Name
Value: ec2-webserver
EC2SG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: ec2-sg-webserver
GroupDescription: Allow SSH and HTTP access only MyIP
VpcId: !ImportValue ItportVPC
SecurityGroupIngress:
# http
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: !Ref MyIP
# ssh
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: !Ref MyIP
Outputs:
EC2PublicIP:
Value: !GetAtt EC2.PublicIp
Description: Public IP of EC2 instance
「VpcId: !ImportValue ItportVPC」というように前回記事で作成したスタックのテンプレートで「Outputs:」セクションで定義しているVPCのIDを参照しています。これでテンプレートを分けても他スタックのリソースのIDを指定できます。
スタックを作成する
新しいスタックを作成していきます。さきほどのYAMLファイルをアップロードします。
Yamlファイルで書いたパラメータの2箇所が画面上にフォームとして表示されました。なるほど!これは便利。
キーペアを選択するのと自分のグローバルIPアドレスを入力しておきます。その後はデフォルトで適当に進んでいけばスタックが作成されました。
ブラウザでアクセスしてみる
スタックの作成が完了したら「出力」タブを確認するとOutputsセクションに指定していたEC2のIPアドレスが表示されていました。

そのIPアドレスをブラウザに入力してみます。
Apacheのテストページが表示されました。続いてユーザーデータにphpinfo.phpを作るように書いていたので、アクセスもしてみるとphpもしっかり入っていますね!
スタックを削除する
リソースが不要になったらスタックを削除すれば起動したEC2インスタンスが削除されます。また使いたくなったらCloudFormationでYamlをアップロードするだけで良いですね。便利です。
おわりに
いかがでしたでしょうか。リソースを作ったり消したり使いまわす際は非常に便利だと思いました。
初めてCloudFormationを触りましたが、普段からAWSを触っている方ならYamlの内容も比較的すんなり入ってきますよね。
今回はこれで終わりとなりますが、今後もCloudFormationを活用したCI/CD環境の構築など、より効率的にAWSを活用出来るように精進したいと思います。






