1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめてのAWS CloudFormation -VPC作成編-

Last updated at Posted at 2022-07-09

はじめに

前々回の記事:はじめてのAWS CloudFormation -S3バケット作成編-
前回の記事:はじめてのAWS CloudFormation -IAMユーザー作成編-

引き続きCloudFormationを学ぼうという試みと取り組んだ内容の記録です。
今回はCloudFormationでVPC(VPC、サブネット、IGW、ルートテーブル)を作成してみます。

方針

作成するVPC環境の方針を考えます。

  • 作成するVPCは1つ。
  • VPCエンドポイントやEC2間の名前解決に備えDNSホスト名を有効化する。
  • サブネットはパブリックとプライベートをAZを分けて2つずつ作成する。
  • VPCとサブネットのCIDRは以下の通りとする(デプロイ時にパラメータとして任意に指定できる方式にする)。
    • VPC:10.1.0.0/16
    • パブリックサブネットA(AZ:ap-northeast-1a):10.1.10.0/24
    • パブリックサブネットC(AZ:ap-northeast-1c):10.1.20.0/24
    • プライベートサブネットA(AZ:ap-northeast-1a):10.1.30.0/24
    • プライベートサブネットC(AZ:ap-northeast-1c):10.1.40.0/24
  • IGWを作成し、パブリックサブネットのデフォルトゲートウェイとしてIGWを指定する。
  • DHCPオプションセットについてはデフォルトで作成されるものを利用する(テンプレート内で明示的に作成しない)。
  • タグ「Key:Env, Value:CFn-test」を付与する。

構成図:
CFn-VPC.JPG

テンプレート用パラメータの確認

公式ドキュメントから各リソースで指定可能なPropertiesを確認します。
各リソースの細かいパラメータの中身は割愛。

AWS公式ドキュメント - AWS::EC2::VPC
AWS公式ドキュメント - AWS::EC2::Subnet
AWS公式ドキュメント - AWS::EC2::InternetGateway
AWS公式ドキュメント - AWS::EC2::VPCGatewayAttachment
AWS公式ドキュメント - AWS::EC2::RouteTable
AWS公式ドキュメント - AWS::EC2::Route
AWS公式ドキュメント - AWS::EC2::GatewayRouteTableAssociation

完成したCloudFormationテンプレート

CreateVPC
AWSTemplateFormatVersion: 2010-09-09
Description: Create VPC

Parameters:
  VpcCidr:
    Type: String
    Default: "10.1.0.0/16"
  
  PubSubnetACidr:
    Type: String
    Default: "10.1.10.0/24"

  PubSubnetCCidr:
    Type: String
    Default: "10.1.20.0/24"

  PriSubnetACidr:
    Type: String
    Default: "10.1.30.0/24"

  PriSubnetCCidr:
    Type: String
    Default: "10.1.40.0/24"

Resources: 
#VPC
  CFnVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VpcCidr
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Env
          Value: CFn-test

#Subnet
  CFnPubSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      VpcId: !Ref CFnVpc
      CidrBlock: !Ref PubSubnetACidr
      Tags:
        - Key: Env
          Value: CFn-test

  CFnPubSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1c"
      VpcId: !Ref CFnVpc
      CidrBlock: !Ref PubSubnetCCidr
      Tags:
        - Key: Env
          Value: CFn-test

  CFnPriSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1a"
      VpcId: !Ref CFnVpc
      CidrBlock: !Ref PriSubnetACidr
      Tags:
        - Key: Env
          Value: CFn-test

  CFnPriSubnetC:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1c"
      VpcId: !Ref CFnVpc
      CidrBlock: !Ref PriSubnetCCidr
      Tags:
        - Key: Env
          Value: CFn-test

#InternetGW
  CFnIGW:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Env
          Value: CFn-test

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref CFnVpc
      InternetGatewayId: !Ref CFnIGW

#RouteTable
  PubRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref CFnVpc
      Tags:
        - Key: Env
          Value: CFn-test
        
  PubRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PubRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref CFnIGW

  PubRouteTableAssociationA:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref CFnPubSubnetA
      RouteTableId: !Ref PubRouteTable

  PubRouteTableAssociationB:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref CFnPubSubnetC
      RouteTableId: !Ref PubRouteTable

おわりに

CloudFormationを使ってVPC環境を作成してみました。
今回作成したVPC作成のテンプレートと以前作成したS3バケット作成のテンプレートと組み合わせて、
VPCフローログの設定までやれるように改良していきたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?