こんにちは、risakoです!
最近寒くなってきましたね:snowflake:
最近は体調を崩し気味なので、よく寝てよく食べて風邪を引かないように気をつけています:slight_smile:

前回は、EC2を自動で増やしたり減らしてくれるAWS Auto Scalingについてご紹介しました!
今回は、AWS CloudFormation(以下、CloudFormation)について簡単ではありますがご紹介します。

AWS CloudFormationを知ったきっかけ

このサービスを使い始めたきっかけは、一度設定したAWS Elemental MediaLiveを来年も使うかもしれない….と思った時に、そのまま残しておいては料金がかかってしまうためCloudFormationで書いてbacklog等メモで残しておけばいいのでは?との発想からでした。つまりは、節約のためです!:ok_hand:
ちなみに、CloudFormationの利用自体は無料です!
テンプレートに従って構築された各AWSサービスに対して課金されるようです。

そもそもAWS CloudFormationとは

AWS CloudFormation は、関連する AWS リソースの集約を整った予測可能な方法でプロビジョニングおよび更新し、開発者やシステム管理者が容易にそれらを作成、管理できるようにします。お客様は、AWS CloudFormation のサンプルテンプレートを使用したり、独自のテンプレートを作成したりして、AWS リソースと、アプリケーションを実行するために必要な関連するすべての依存関係やランタイムパラメータを記述できます。AWS のサービスをプロビジョニングする順番を見つけたり、依存関係が機能するように細かく注意したりする必要はありません。
参考:https://aws.amazon.com/jp/cloudformation/features/

すごくいいなと思ったところは、ベストプラクティスが盛り込まれたテンプレートで、1度作成してしまえば同じ構成を再現できるということです:sparkles:

VPC&Subnet作成

テンプレートを参考に複数同時にVPCとSubnetを作成してみたいと思います。
VPCとSubnetはコンソール上でも作成が簡単なので、CloufFormationでも簡単に作成できます。且つ、一緒に作成もできてしまうので時間短縮にもなります!

VPCテンプレート(YAML)

Type: AWS::EC2::VPC
Properties: 
  CidrBlock: String
  EnableDnsHostnames: Boolean
  EnableDnsSupport: Boolean
  InstanceTenancy: String
  Tags: 
    - Tag

必須事項

  • CidrBlock

Subnetテンプレート(YAML)

Type: AWS::EC2::Subnet
Properties: 
  AssignIpv6AddressOnCreation: Boolean
  AvailabilityZone: String
  CidrBlock: String
  Ipv6CidrBlock: String
  MapPublicIpOnLaunch: Boolean
  Tags: 
    - Tag
  VpcId: String

必須事項

  • CidrBlock
  • VPCID

実際に作成してみる

Resources:
  myVPC1:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.15.0.0/16
      EnableDnsSupport: 'false'
      EnableDnsHostnames: 'false'
      Tags:
        - Key: Name
          Value: testA
  myVPC2:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.30.0.0/16
      EnableDnsSupport: 'false'
      EnableDnsHostnames: 'false'
      Tags:
        - Key: Name
          Value: testB
  PublicSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId:
        Ref: myVPC2
      CidrBlock: 10.30.0.0/24
      AvailabilityZone: "ap-northeast-1a"
      Tags:
      - Key: Name
        Value: test-public
  PrivateSubnetB:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId:
        Ref: myVPC1
      CidrBlock: 10.15.0.0/24
      AvailabilityZone: "ap-northeast-1c"
      Tags:
      - Key: Name
        Value: test-private

コンソールで確認してみる

VPC

名前:TestA
CIDR: 0.15.0.0/16

名前:TestB
CIDR:10.30.0.0/16

Subnet

名前:test-public
AZ:ap-northeast-1a
紐づいているVPC:testB

名前:test-private
AZ:ap-northeast-1c
紐づいているVPC:testA

CloudFormationに記述した通りに作成できているのが確認できました!

今回使用したテンプレートを保存しておけば次にVPCを作成するときに便利です!
また、既存の名前やCIDRを入力してしまうとうまく作成されないので注意です:point_up:

今回もお読みいただきありがとうございました:grinning:

参考資料

元記事はこちら

CloudFormationでVPC&Subnet作成