「CloudFormationは習うより慣れよ」ということで、環境構築にチャレンジ。
構成はシンプルに以下のようなものを作りたい。
CloudFormationのテンプレートは以下の3つに分けて作る。
①Networkレイヤ・・・VPC/Subnet/ルートテーブル/InternetGatewayなど
②Securityレイヤ・・・SecurityGroup、IAMなど
③Applicationレイヤ・・・EC2、RDSなど
今回は土台となるNetworkレイヤ(VPC/Subnet/ルートテーブル/InternetGateway)から作成する。
マネージメントコンソールから**[CloudFormation]を選択し、[スタックの作成]**をクリックする。
**[テンプレートファイルのアップロード]**を選んで、ymlをアップロードする。
アップロードするymlは以下。
なお、!Ref関数は同じyml内でしか参照できない点が注意。
AWSTemplateFormatVersion: 2010-09-09
Description: Create Network
Resources:
# VPC作成
VPC2:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 172.17.0.0/20
EnableDnsSupport: true
EnableDnsHostnames: true
InstanceTenancy: "default"
Tags:
- Key: Name
Value: VPC_fromCF
# インターネットゲートウェイ作成
InternetGW2:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: IGW_fromCF
# インターネットゲートウェイをVPCにアタッチ
IGWAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC2
InternetGatewayId: !Ref InternetGW2
# パブリックサブネットを定義
PubSub:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC2
CidrBlock: 172.17.1.0/24
AvailabilityZone: ap-northeast-1a
Tags:
- Key: Name
Value: PublicSubnet_fromCF
# ルートテーブルを定義
PubSubRoute:
Type: AWS::EC2::RouteTable
Properties :
VpcId: !Ref VPC2
Tags:
- Key: Name
Value: RouteTablePublicFromCF
# ルートテーブルとサブネットを関連付け
PubSubRouteTableAssociation:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
RouteTableId: !Ref PubSubRoute
SubnetId: !Ref PubSub
# ルートテーブル(IGW向け)
PubSubToIGW:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PubSubRoute
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGW2
スタックの作成画面に出ていた**[デザイナーで表示]**という補助機能があるのだが、それがまじで神機能で
アップロードしたテンプレートがどんな構成になるかを絵で描いてくれる。
これでイメージと違うかもチェックできるし、構文が違うのも発見できる。
次にスタック名を決めて、あとのオプションは変更せずに次へと進んでスタックを作成する。
スタックとはCloudFormationで作成される塊みたいなもん。
作成後にイベントタブで更新連打をすれば、作成される過程が見れる。
とりあえず土台の作成は成功した。
次回は、セキュリティグループとEC2の作成をCloudFormationでやってみたいと思う。
Import関数やOutputパラメータが必要になる想定だ。
つづく
https://qiita.com/shinichi_yoshioka/items/b027f71a9998a87c46b8
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com