この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
前提
・VPCが作成済みでリリースがエクスポートされていること
・CloudFormationのテンプレートをyaml形式とする。
・AWSの管理者ユーザで検証しています。
・AWS CloudShellよりCLI実行することでCloudFormationスタックを作成します。
・AWS CloudShellの使い方を割愛します。
VPCの作成について、下記のブログを参照
CloudFormationでVPC(NATGatewayを作成しない)を作成してみました。(AWS CloudShellよりCLI実行で作成)
SGのテンプレート
ALBのSG
AWSTemplateFormatVersion: '2010-09-09'
Description: KbyDev3-Tyo-Sg-Alb-Web01
Resources:
KbyDev3TyoSgAlbWeb01:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: KbyDev3-Tyo-Sg-Alb-Web01
GroupDescription: KbyDev3-Tyo-Sg-Alb-Web01
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
Description: HTTP From AnyWhere
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
Description: HTTPS From AnyWhere
Tags:
- Key: Name
Value: KbyDev3-Tyo-Sg-Alb-Web01
- Key: Env
Value: KbyDev3
VpcId: !ImportValue KbyDev3-Tyo-Vpc
Outputs:
KbyDev3TyoSgAlbWeb01:
Value:
Ref: KbyDev3TyoSgAlbWeb01
Export:
Name: KbyDev3-Tyo-Sg-Alb-Web01
EC2のSG(ALBのターゲットグループEC2用)
※直接SGのIDを記載する場合、下記のように記載する
# - IpProtocol: tcp
# FromPort: 80
# ToPort: 80
# SourceSecurityGroupId: sg-xxxxxxxxxxxxxxxxx
ここでは、ImportValueを使って、ALBのSGのエクスポート名を参照しています。
AWSTemplateFormatVersion: '2010-09-09'
Description: KbyDev3-Tyo-Sg-Ec2-Web01
Resources:
KbyDev3SgEc2Web01:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: KbyDev3-Tyo-Sg-Ec2-Web01
GroupDescription: KbyDev3-Tyo-Sg-Ec2-Web01
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: '0.0.0.0/0'
Description: SSH From AnyWhere
- IpProtocol: tcp
FromPort: 80
ToPort: 80
SourceSecurityGroupId: !ImportValue KbyDev3-Tyo-Sg-Alb-Web01
Description: HTTP From Alb Web01
Tags:
- Key: Name
Value: KbyDev3-Tyo-Sg-Ec2-Web01
- Key: Env
Value: KbyDev3
VpcId: !ImportValue KbyDev3-Tyo-Vpc
Outputs:
KbyDev3SgEc2Web01:
Value:
Ref: KbyDev3SgEc2Web01
Export:
Name: KbyDev3-Tyo-Sg-Ec2-Web01
SGの作成順番
1.ALBのSGを作成
2.EC2のSGを作成
※削除する場合、逆順になります。(削除する前に参照するリソースからデタッチしてください。)
1.EC2のSGを削除
2.ALBのSGを削除
SGの作成
CLIでスタックの作成手順
1.予め必要なファイルをAWS CloudShellにアップします。
2.テンプレートファイルとパラメーターファイルが存在していることを確認
[cloudshell-user@ip-10-0-135-137 ~]$ ll
total 8
-rw-rw-r-- 1 cloudshell-user cloudshell-user 872 Jul 31 06:24 KbyDev3-Tyo-Sg-Alb-Web01.yaml
-rw-rw-r-- 1 cloudshell-user cloudshell-user 905 Jul 31 06:23 KbyDev3-Tyo-Sg-Ec2-Web01.yaml
3.SG作成コマンド
コマンド:
aws cloudformation create-stack --template-body file://テンプレートファイル.yaml --stack-name [スタック名]
3-1 SGのスタック作成例(ALB用SGのスタック作成)
コマンド例:
[cloudshell-user@ip-10-0-135-137 ~]$ aws cloudformation create-stack --template-body file://KbyDev3-Tyo-Sg-Alb-Web01.yaml --stack-name KbyDev3-Tyo-Sg-Alb-Web01
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:887233683286:stack/KbyDev3-Tyo-Sg-Alb-Web01/c8a34f60-1099-11ed-bae9-0a1cc6ae8993"
}
[cloudshell-user@ip-10-0-135-137 ~]$
3-2 作成後の確認(ALB用SGのスタック作成)
イベント画面の確認
リソース画面の確認
EC2用SGテンプレートから参照する場合、下記赤枠のように記載する
3-3 SGのスタック作成例(EC2用SGのスタック作成)
[cloudshell-user@ip-10-0-135-137 ~]$ aws cloudformation create-stack --template-body file://KbyDev3-Tyo-Sg-Ec2-Web01.yaml --stack-name KbyDev3-Tyo-Sg-Ec2-Web01
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:887233683286:stack/KbyDev3-Tyo-Sg-Ec2-Web01/61bafb60-109c-11ed-a6c0-0e65a22044f3"
}
[cloudshell-user@ip-10-0-135-137 ~]$
3-4 作成後の確認(EC2用SGのスタック作成)
イベント画面の確認
リソース画面の確認
まとめ
テンプレートを利用する時、名前の命名ルールを自分の環境に読み替えでください。また、ssh接続時にCidrIp「’0.0.0.0/0’」を設定していますが、自分の環境に合わせて読み替えてください。
以前のブログでVPC作成した時にリソースをエクスポートしました。
今回、SGを作成する時にVPCのエクスポート名を参照して作成しています。
リソースIDが構築する時に都度変わるため、エクスポート名を使ったほうがらくになるかと思います。(特に頻繫に作り直す場合)
少しでもお役に立てれば幸いです。
参考
CloudFormation でよく使うAWS CLIコマンド
CloudFormationでVPC(NATGatewayを作成しない)を作成してみました。(AWS CloudShellよりCLI実行で作成)