今回から複数回に分けて CloudFormation を利用した環境構築について連載していきます。
まず、CloudFormation で環境を作成する際は依存関係に留意しないといけません。
たとえば、VPC が存在しないとサブネットも作れませんし、サブネットがなければEC2インスタンスも起動できません。また、IAMでユーザーやロールがなければ、S3のバケットにポリシーを割り当てたり、Lambdaに実行権限を与えることもできないということです。
しかし、VPC がなくても IAM でユーザーは作成できますし、IAM にユーザーがいなくても VPC は作成できます。
例外として CloudFormation を実行する為にロールを割り当てる等、必要に応じて先に IAM でロールを作る事もありますが、そういった制約がないならある程度依存関係も絞り込まれます。
本章「VPC」編では以下の環境について構築を行います。
・VPC の作成
・インターネットゲートウェイの作成
・VPC に作成したインターネットゲートウェイをアタッチ
簡単にまとめると、新規に VPC とインターネットゲートウェイを作成して、新規 VPC にインターネットゲートウェイをアタッチするまでの構成です。
イメージ図
それでは実際にコードを確認しながら説明していきます。
AWSTemplateFormatVersion: 2010-09-09
Description: Creation of VPC and Internet gateway.
Parameters:
ProjectCode:
Type: String
Default: itc109
Description: Project Code
IPv4CIDRblock:
Type: String
Default: 10.0.0.0/16
Description: VPC CIDR Block
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock:
Fn::Ref IPv4CIDRblock
EnableDnsSupport: true
EnableDnsHostnames: true
InstanceTenancy: default
Tags:
- Key: Name
Value:
Fn::Sub: vpc-${ProjectCode}
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value:
Fn::Sub: igw-${ProjectCode}
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
Outputs:
VPCId:
Value: !Ref VPC
Export:
Name: vpc
InternetGatewayId:
Value: !Ref InternetGateway
Export:
Name: igw
実行後に出力される値。
キー | 値 | 値エクスポート名 |
---|---|---|
VPCId | vpc-***************** | vpc |
InternetGatewayId | igw-***************** | igw |
スタックを実行することでインターネットゲートウェイがアタッチされた VPC が作成されたと思います。
出力で求められる「VPCId」は今後いろんなスタックからVPCIDの値として参照されます。
「InternetGatewayId」はルートテーブル等からの参照に使用されます。
AWS::EC2::VPC
新規にVPCを作成しています。
AWS::EC2::InternetGateway
新規にVPCを作成しています。
AWS::EC2::VPCGatewayAttachment
新規に作成したInternetGatewayをVPCにアタッチしています。
次回は、サブネット作成用に別スタックを作成して、今回のスタックを参照して構築する方法を紹介します。
Fn::Ref IPv4CIDRblock
!Ref VPC
「Fn:Ref」「!Ref」は共に指定したリソースを参照して値を取得しています。
どちらで記述しても問題ありません。
AWS CloudFormationテンプレートリファレンス
AWS::EC2::VPC
AWS::EC2::InternetGateway
AWS::EC2::VPCGatewayAttachment