
AWSのCloudFormationでVPCを構築する
こんにちは!さっしです!
今回はタイトルにある通り、CloudFormationを使ってVPCを作成する方法をご紹介します。
普段何気なく作成しているVPCも、本記事通りに操作していただければ、問題なく作成でき、CloudFormationの感覚を掴むのにちょうど良いのではないかと思います。
■完成図
■やりたいこと
・CloudFormationを使ってVPCを作成したい
・そのVPCの中にサブネットを作成したい
・そのVPCのセキュリティグループを作成したい
・セキュリティグループのインバウンドで22ポートを許可したい
■事前準備
・「cloudformation」ディレクトリを作成し、そのディレクトリに「test.yml」ファイルを作成する
・VSCodeのプラグインを使って作成するため、以下に記載されている設定を済ませておく
VSCodeのプラグインでAWSのCloudFormationの構文を簡単に記述する方法
■やること
1.テンプレートの雛形を作成する
2.ResourceセクションにVPCを作成する内容を記述する
3.Resourceセクションにサブネットを作成する内容を記述する
4.Resourceセクションにセキュリティグループを作成する内容を記述する
5.テンプレート全体を確認する
6.CloudFormationでデプロイを行う
■1.テンプレートの雛形を作成する
・test.ymlのファイルを開く
・「start」と入力した後に「 tabキー」を1回押す
・テンプレートの雛形が出力されたことを確認する
・不要なセクションを削除する
※今回は使用しないため
■2.ResourceセクションにVPCを作成する内容を記述する
・「Resources」セクションで「vpc」と入力した後に「 tabキー」を1回押す
・「Resources」セクションの下のエリアに以下の内容を入力し保存する
Logical ID:VpcForCf(任意)
CidrBlock:10.0.8.0/21
Tags
Key:Name(任意)
Value:VpcForCf(任意)
■3.Resourceセクションにサブネットを作成する内容を記述する
・「Resources」セクションで「sub」と入力した後に「 tabキー」を1回押す
・「Resources」セクションの下のエリアに以下の内容を入力し保存する
Logical ID:SubnetForCf(任意)
AvailabilityZone:"ap-northeast-1a"
VpcId:!Ref VpcForCf(※Ref関数とVPCのLogical IDを設定)
CidrBlock:10.0.8.0/24
Tags
Key:Name(任意)
Value:SubnetForCf(任意)
○Tips
組み込み関数「!Ref」
同一テンプレート内で作成されたパラメータまたはリソースの値を返す
■4.Resourceセクションにセキュリティグループを作成する内容を記述する
・「Resources」セクションで「sec」と入力した後に「 tabキー」を1回押す
・「Resources」セクションの下のエリアに以下の内容を入力し保存する
Logical ID:SecurityForCf(任意)
GroupName:SecurityForCf(任意)
GroupDescription:SecurityForCf(任意)
VpcId:!Ref VpcForCf(※Ref関数とVPCのLogical IDを設定)
SecurityGroupIngress
IpProtocol:tcp
FromPort:22
ToPort:22
CidrIp:0.0.0.0/0
SecurityGroupEgress:削除
Tags
Key:Name(任意)
Value:SecurityForCf(任意)
■5.テンプレート全体を確認する
AWSTemplateFormatVersion: 2010-09-09
Resources:
VpcForCf:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.8.0/21
EnableDnsSupport: true
Tags:
- Key: Name
Value: VpcForCf
SubnetForCf:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: "ap-northeast-1a"
VpcId: !Ref VpcForCf
CidrBlock: 10.0.8.0/24
Tags:
- Key: Name
Value: SubnetForCf
SecurityForCf:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: SecurityForCf
GroupDescription: SecurityForCf
VpcId: !Ref VpcForCf
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: SecurityForCf
○Tips
スペースやインデントやコロンには特に注意する
CloudFormationでファイルを選択した際にプロビジョン時に「Template parameters must be a map」といったエラーの原因になりやすい
■6.CloudFormationでデプロイを行う
サービス:CloudFormation
・「スタックの作成」ボタンをクリックする
・以下の内容を入力し「次へ」をクリックする
テンプレートの種類:テンプレートの準備完了
テンプレートソース:テンプレートファイルのアップロード
テンプレートファイルのアップロード:test.yml(先ほど作成したymlファイル)
・以下の内容を入力し「次へ」をクリックする
スタックの名前:Network(任意)
・以下の内容を入力し「次へ」をクリックする
タグ:Name, cf-network(任意)
・確認画面が表示されるので「スタックの作成」ボタンをクリックする
・「CREATE_COMPLETE」の文字が表示されれば成功
設定は以上になります。
AWSってほんと楽しいですね!