
CloudFormationでEC2インスタンスとセキュリティグループを作成してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、イムチェジョンです。
最近、CloudFormationを勉強しています。CloudFormationは簡単にAWSリソースを作成できる便利なサービスです。
今回のブログではCloudFormationを利用してEC2インスタンスとセキュリティグループを作成し、セキュリティグループをEC2インスタンスに設定するのをまとめます。
アジェンダ
- テンプレートファイル作成 (YAML)
- スタック生成
- まとめ
1. テンプレートファイル作成 (YAML)
CloudFormationのテンプレートファイル作成はJSONまたはYAMLで作成します。
今回はYAMLでテンプレートファイルを作成します。
1-1. EC2インスタンス
EC2インスタンスの作成方法は下のブログにまとめたので、参考してください。
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0e4a9ad2eb120e054
InstanceType: t2.micro
1-2. セキュリティグループ
次は、セキュリティグループをテンプレートファイルに作成してみましょう。
下のドキュメントで作成方法及び詳細情報が確認できます。
セキュリティグループの生成
実際に作成をしてみました。下のテンプレートには以下の内容が含まれています。
SSHSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
SSHSecurityGroupという新しいリソースを作成するSSHSecurityGroupのリソースタイプはAWS::EC2::SecurityGroup(EC2 Security Group)にするSSHSecurityGroupのプロトコルはtcpに設定するSSHSecurityGroupのポート範囲は22にするSSHSecurityGroupのソースは0.0.0.0/0に設定する
セキュリティグループにEC2インスタンスに設定
テンプレートにセキュリティグループの生成できるように作成しましたので、作成したセキュリティグループをEC2インスタンスに設定してみましょう。
設定する時にはRef関数を使います。
Ref 組み込み関数
EC2インスタンスのテンプレートのSecurityGroups部分にRef関数を使い、上で作成したSSHSecurityGroupを指定します。
これでEC2インタンスのリソースを生成する時に、セキュリティグループとしてSSHSecurityGroupが設定されます。
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0e4a9ad2eb120e054
InstanceType: t2.micro
SecurityGroups:
- !Ref SSHSecurityGroup
1-3. Descriptionの設定
今回はDescription(説明)も追加で作成します。
Descriptionは単語のそのままスタックまたはリソースの説明を言います。
スタックの説明はこのように書けます。
Description: EC2 instance, Security Group
または、Security Groupのリソースを作成する時にPropertiesのGroupDescription部分にリソースの説明を書けます。
SSHSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH access via port 22
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
1-4. 完成したテンプレートファイル
上のEC2インスタンス、セキュリティグループ、Descriptionまで含んだテンプレートです。
3つのリソースを作成します
Ec2Instance: EC2インスタンスSSHSecurityGroup: Security Group (SSH)HTTPSecurityGroup: Security Group (HTTP)
Description: The template is EC2 instance, Security Group
Resources:
# EC2 instance
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0e4a9ad2eb120e054
InstanceType: t2.micro
SecurityGroups:
- !Ref SSHSecurityGroup
- !Ref HTTPSecurityGroup
# Security Group
SSHSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH access via port 22
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
HTTPSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: HTTP access port 80
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
2. スタック生成
テンプレートファイルの作成ができたら、次はCloudFormationにテンプレートをアップロードしてスタックを実行してみましょう。
スタック生成
実際にスタックを生成してみます。
新しいリソースを使用 (標準)をクリックして新しいスタックを生成します。

テンプレートの準備 : テンプレートの準備完了を選択
テンプレートソース : テンプレートファイルのアップロードを選択
テンプレートとしてアップロードするファイルを選択します。

スタックの名前はec2-sgに設定します。

オプションは何も設定しません。

最後にレビューを確認してみると、上で追加したDescriptionの内容がスタックの説明として書いています。
それ以外に内容を確認して[スタックの作成]をクリックすると、スタックが作成されます。

リソースの確認
作られたリソースを確認してみましょう。
まず、[スタックの情報]の説明で上で確認したDescriptionの内容がスタックの説明として書いています。

リソースはEC2インスタンスと2つのセキュリティグループがあります。

EC2インスタンスから確認してみると、実際にインスタンスが生成されてタグでもCloudFormationのスタックで作成されたのを確認できます。

次は、EC2インスタンスの[セキュリティ]に設定されているセキュリティグループを確認できますが、テンプレートでRef関数を使って設定したように二つのセキュリティグループが追加されています。

セキュリティグループも確認してみましょう。
二つのセキュリティグループが作成されました。
テンプレートで設定したようにSSHとHTTPによく設定されています。



これでEC2インスタンスとセキュリティグループの作成がよくされたのが確認できます。
3. まとめ
今回はCloudFormationを利用してEC2とセキュリティグループを作成、設定するのをまとめてみました。CloudFormationを使うと、いろんなサービスの作成と設定を一気にできるので便利でした!






