サイトアイコン 協栄情報ブログ

【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_VPC

皆様、お世話になっております。鈴木と申します。
今回はAWS CloudFormationを使用してマルチAZ VPC作成していきたいと思います。

1.目次

目次はこちら

2.要件

3.構築サービスの説明

3-1.VPCについて

簡単にVPCについてご説明致します。

AWS Virtual Private Cloud (VPC) は、ユーザーが自分専用の仮想ネットワークをAWSクラウド内に構築できるサービスです。これにより、クラウド環境でもオンプレミスのデータセンターのようにネットワーク設定を自由にカスタマイズできます。

VPCの主な特徴としては5つ挙げられます。

分離されたネットワーク環境
→各VPCは他のVPCやAWSのインフラから完全に分離されており、セキュリティが確保されています。

カスタマイズ可能なネットワーク設定
→IPアドレス範囲の設定、サブネットの作成、ルートテーブルの設定、インターネットゲートウェイの追加など、ネットワーク設定を柔軟に行うことが出来ます。

セキュリティ制御
→キュリティグループやネットワークACLを使用して、インスタンス間のトラフィックや外部からのアクセスを制御できます。

サブネットの設計
→パブリックサブネット(インターネットアクセス可能なサブネット)とプライベートサブネット(内部ネットワーク専用サブネット)を作成し、用途に応じてインスタンスを配置できます。

マルチAZ構成
→複数のアベイラビリティゾーン(AZ)にまたがるサブネットを作成することで、高可用性と耐障害性を実現できます。

3-2.NATゲートウェイについて

続いてNATゲートウェイについてご説明致します。

NATゲートウェイ(Network Address Translation Gateway) は、プライベートサブネット内のインスタンスがインターネットにアクセスできるようにするためのAWSサービスです。これにより、インスタンスはインターネットへのアウトバウンドトラフィックを実行できますが、外部からのインバウンドトラフィックは防がれます。

NATゲートウェイの主な特徴としては3つ挙げられます。

アウトバウンドアクセスの提供
→プライベートサブネット内のインスタンスがソフトウェアアップデートやパッチをインターネットからダウンロードできます。

インバウンドトラフィックの遮断
→外部からの未承認の接続は遮断されるため、セキュリティが強化されます。

高可用性
→NATゲートウェイを複数のアベイラビリティゾーンに配置することで、高可用性と冗長性を確保できます。

4.構成図

※次回以降の構築でプライベートサブネットへはWEBサーバー用のEC2インスタンス、プロテクトサブネットにはRDSを配置予定です。

5.全体構築ソースコード

今回はYAMLで記述しております。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  # VPCの作成
  NaokiVpc:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '192.168.1.0/24'
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: 'Name'
          Value: 'naoki-vpc'

  # サブネットの作成
  NaokiSubnetPrivateWeb2a:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.128/28'
      AvailabilityZone: 'ap-northeast-2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-private-web-2a'

  NaokiSubnetProtectDb2a:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.160/28'
      AvailabilityZone: 'ap-northeast-2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-protect-db-2a'

  NaokiSubnetPrivateWeb2b:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.144/28'
      AvailabilityZone: 'ap-northeast-2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-private-web-2b'

  NaokiSubnetProtectDb2b:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.176/28'
      AvailabilityZone: 'ap-northeast-2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-protect-db-2b'

  NaokiSubnetPublic2a:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.0/28'
      AvailabilityZone: 'ap-northeast-2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-public-2a'

  NaokiSubnetPublic2b:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.16/28'
      AvailabilityZone: 'ap-northeast-2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-public-2b'

  # IGWの作成
  NaokiIgw:
    Type: 'AWS::EC2::InternetGateway'
    Properties:
      Tags:
        - Key: 'Name'
          Value: 'naoki-igw'

  # IGWのアタッチ
  NaokiVpcGatewayAttachment:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      InternetGatewayId: 
        Ref: 'NaokiIgw'

  # EIPの作成
  NaokiNatEip2a:
    Type: 'AWS::EC2::EIP'
    Properties:
      Domain: vpc
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-eip-2a'

  NaokiNatEip2b:
    Type: 'AWS::EC2::EIP'
    Properties:
      Domain: vpc
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-eip-2b'

  # NATの作成
  NaokiNatGateway2a:
    Type: 'AWS::EC2::NatGateway'
    Properties:
      AllocationId: 
        Fn::GetAtt: 
          - 'NaokiNatEip2a'
          - 'AllocationId'
      SubnetId: 
        Ref: 'NaokiSubnetPublic2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-gateway-2a'

  NaokiNatGateway2b:
    Type: 'AWS::EC2::NatGateway'
    Properties:
      AllocationId: 
        Fn::GetAtt: 
          - 'NaokiNatEip2b'
          - 'AllocationId'
      SubnetId: 
        Ref: 'NaokiSubnetPublic2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-gateway-2b'

  # NACLの作成
  NaokiNacl:
    Type: 'AWS::EC2::NetworkAcl'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-nacl'

  NaokiNaclEntryInbound:
    Type: 'AWS::EC2::NetworkAclEntry'
    Properties:
      CidrBlock: '0.0.0.0/0'
      Egress: false
      NetworkAclId: 
        Ref: 'NaokiNacl'
      PortRange:
        From: 0
        To: 65535
      Protocol: '-1'
      RuleAction: 'allow'
      RuleNumber: 100

  NaokiNaclEntryOutbound:
    Type: 'AWS::EC2::NetworkAclEntry'
    Properties:
      CidrBlock: '0.0.0.0/0'
      Egress: true
      NetworkAclId: 
        Ref: 'NaokiNacl'
      PortRange:
        From: 0
        To: 65535
      Protocol: '-1'
      RuleAction: 'allow'
      RuleNumber: 100

  # NACLのアタッチ
  NaokiNaclAssocPublic2a:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2a'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocPublic2b:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2b'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocPrivateWeb2a:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2a'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocPrivateWeb2b:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2b'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocProtectDb2a:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2a'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocProtectDb2b:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2b'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  # ルートテーブルの作成
  NaokiRtbPrivateWeb2a:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-private-web-2a'

  NaokiRtbPrivateWeb2b:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-private-web-2b'

  NaokiRtbPublic:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-public'

  NaokiRtbProtectDb:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-protect-db'

  # ルートの作成
  NaokiRoutePublic:
    Type: 'AWS::EC2::Route'
    Properties:
      RouteTableId: 
        Ref: 'NaokiRtbPublic'
      DestinationCidrBlock: '0.0.0.0/0'
      GatewayId: 
        Ref: 'NaokiIgw'

  NaokiRoutePrivateWeb2a:
    Type: 'AWS::EC2::Route'
    Properties:
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2a'
      DestinationCidrBlock: '0.0.0.0/0'
      NatGatewayId: 
        Ref: 'NaokiNatGateway2a'

  NaokiRoutePrivateWeb2b:
    Type: 'AWS::EC2::Route'
    Properties:
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2b'
      DestinationCidrBlock: '0.0.0.0/0'
      NatGatewayId: 
        Ref: 'NaokiNatGateway2b'

  # ルートテーブルのアソシエーション
  NaokiRtbAssocPrivateWeb2a:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2a'
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2a'

  NaokiRtbAssocPrivateWeb2b:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2b'
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2b'

  NaokiRtbAssocPublic2a:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2a'
      RouteTableId: 
        Ref: 'NaokiRtbPublic'

  NaokiRtbAssocPublic2b:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2b'
      RouteTableId: 
        Ref: 'NaokiRtbPublic'

  NaokiRtbAssocProtectDb2a:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2a'
      RouteTableId: 
        Ref: 'NaokiRtbProtectDb'

  NaokiRtbAssocProtectDb2b:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2b'
      RouteTableId: 
        Ref: 'NaokiRtbProtectDb'

6.ソースコード詳細

6-1.VPC作成

使用するオプション 設定値 説明
CidrBlock 192.168.1.0/24 VPCのCIDRの指定
EnableDnsHostnames true DNS解決がサポートされているかどうか
EnableDnsSupport true パブリックIPアドレスを持つインスタンスが、対応するパブリックDNSホスト名を取得するかどうか
InstanceTenancy default シングルテナントの専用ハードウェアを使用するかどうか
Tags Name
:naoki-vpc
タグのキーと値を設定
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  # VPCの作成
  NaokiVpc:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '192.168.1.0/24'
      EnableDnsSupport: true
      EnableDnsHostnames: true
      InstanceTenancy: default
      Tags:
        - Key: 'Name'
          Value: 'naoki-vpc'

6-2.サブネットの作成

使用するオプション 設定値 説明
Type AWS::EC2::Subnet サブネットを作成するためのデフォルトの記述
VpcId Ref: ‘NaokiVpc’ 参照元のVpc
CidrBlock 構成図を参照 サブネットのCIDRを指定
AvailabilityZone ap-northeast-2a
ap-northeast-2b
アベイラビリティゾーンの指定
Tags Name:
下記ソースコード参照
タグのキーと値を設定
  # サブネットの作成
  NaokiSubnetPrivateWeb2a:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.128/28'
      AvailabilityZone: 'ap-northeast-2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-private-web-2a'

  NaokiSubnetProtectDb2a:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.160/28'
      AvailabilityZone: 'ap-northeast-2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-protect-db-2a'

  NaokiSubnetPrivateWeb2b:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.144/28'
      AvailabilityZone: 'ap-northeast-2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-private-web-2b'

  NaokiSubnetProtectDb2b:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.176/28'
      AvailabilityZone: 'ap-northeast-2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-protect-db-2b'

  NaokiSubnetPublic2a:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.0/28'
      AvailabilityZone: 'ap-northeast-2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-public-2a'

  NaokiSubnetPublic2b:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      CidrBlock: '192.168.1.16/28'
      AvailabilityZone: 'ap-northeast-2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-subnet-public-2b'

6-3.IGWの作成

使用するオプション 設定値 説明
Type AWS::EC2::InternetGateway IGWを作成するためのデフォルトの記述
Tags Name : 下記ソースコード参照 タグのキーと値を設定
  # IGWの作成
  NaokiIgw:
    Type: 'AWS::EC2::InternetGateway'
    Properties:
      Tags:
        - Key: 'Name'
          Value: 'naoki-igw'

6-4.IGWのアタッチ

使用するオプション 設定値 説明
Type AWS::EC2::VPCGatewayAttachment IGWをアタッチするためのデフォルトの記述
VpcId Ref: ‘NaokiVpc’ 参照先VPCを指定
InternetGatewayId Ref: ‘NaokiIgw’ 参照先IGWを指定
 # IGWのアタッチ
  NaokiVpcGatewayAttachment:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      InternetGatewayId: 
        Ref: 'NaokiIgw'

6-5.EIPの作成

使用するオプション 設定値 説明
Type AWS::EC2::EIP EIPを作成するためのデフォルトの記述
Domain vpc EIPがVPCで使用されることを明記
Tags Name : 下記ソースコード参照 タグのキーと値を設定
 # EIPの作成
  NaokiNatEip2a:
    Type: 'AWS::EC2::EIP'
    Properties:
      Domain: vpc
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-eip-2a'

  NaokiNatEip2b:
    Type: 'AWS::EC2::EIP'
    Properties:
      Domain: vpc
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-eip-2b'

6-6.NATゲートウェイの作成

使用するオプション 設定値 説明
Type AWS::EC2::NatGateway NATゲートウェイを作成するためのデフォルトの記述
Fn::GetAtt NaokiNatEip2a
NaokiNatEip2b
参照先EIPを指定
Fn::GetAtt AllocationId 属性を指定。AllocationIdはElastic IPがAWSにおいて一意に識別されるID
SubnetId Ref: NaokiSubnetPublic2a
NaokiSubnetPublic2b
配置するサブネットを指定
Tags Name :
下記ソースコード参照
タグのキーと値を設定
  # NATの作成
  NaokiNatGateway2a:
    Type: 'AWS::EC2::NatGateway'
    Properties:
      AllocationId: 
        Fn::GetAtt: 
          - 'NaokiNatEip2a'
          - 'AllocationId'
      SubnetId: 
        Ref: 'NaokiSubnetPublic2a'
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-gateway-2a'

  NaokiNatGateway2b:
    Type: 'AWS::EC2::NatGateway'
    Properties:
      AllocationId: 
        Fn::GetAtt: 
          - 'NaokiNatEip2b'
          - 'AllocationId'
      SubnetId: 
        Ref: 'NaokiSubnetPublic2b'
      Tags:
        - Key: 'Name'
          Value: 'naoki-nat-gateway-2b'

6-7.ネットワークACLの作成

※NACL作成用

使用するオプション 設定値 説明
Type AWS::EC2::NatGateway NATゲートウェイを作成するためのデフォルトの記述
Fn::GetAtt NaokiNatEip2a
NaokiNatEip2b
参照先EIPを指定
Tags Name : 下記ソースコード参照 タグのキーと値を設定

※NACL詳細用

使用するオプション 設定値 説明
Type AWS::EC2::NetworkAclEntry NACLを設定するためのデフォルトの記述
CidrBloc 0.0.0.0/0 全トラフィックを許可
Egress false インバウンドトラフィックを意味する
Egress true アウトバウンドトラフィックを意味する
NetworkAclId NaokiNacl 参照先NACLを指定
PortRange From: 0
To: 65535
プロトコル番号の指定(全ポート)
Protocol -1 全てのプロトコルを対象
RuleAction allow 許可か拒否(今回は許可)
RuleNumber 100 ACL内でのルールの優先順位で番号が小さいほど優先度が高くなります
  NaokiNacl:
    Type: 'AWS::EC2::NetworkAcl'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-nacl'

  NaokiNaclEntryInbound:
    Type: 'AWS::EC2::NetworkAclEntry'
    Properties:
      CidrBlock: '0.0.0.0/0'
      Egress: false
      NetworkAclId: 
        Ref: 'NaokiNacl'
      PortRange:
        From: 0
        To: 65535
      Protocol: '-1'
      RuleAction: 'allow'
      RuleNumber: 100

  NaokiNaclEntryOutbound:
    Type: 'AWS::EC2::NetworkAclEntry'
    Properties:
      CidrBlock: '0.0.0.0/0'
      Egress: true
      NetworkAclId: 
        Ref: 'NaokiNacl'
      PortRange:
        From: 0
        To: 65535
      Protocol: '-1'
      RuleAction: 'allow'
      RuleNumber: 100

6-8.NACLのアタッチ

使用するオプション 設定値 説明
Type AWS::EC2::SubnetNetworkAclAssociation NACLをアタッチするためのデフォルトの記述
SubnetId 下記ソースコード参照 NACLをアタッチするためのサブネットを指定
NetworkAclId NaokiNacl サブネットへアタッチするNACLを指定
  # NACLのアタッチ
  NaokiNaclAssocPublic2a:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2a'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocPublic2b:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2b'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocPrivateWeb2a:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2a'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocPrivateWeb2b:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2b'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocProtectDb2a:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2a'
      NetworkAclId: 
        Ref: 'NaokiNacl'

  NaokiNaclAssocProtectDb2b:
    Type: 'AWS::EC2::SubnetNetworkAclAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2b'
      NetworkAclId: 
        Ref: 'NaokiNacl'

6-9ルートテーブルの作成

使用するオプション 設定値 説明
Type AWS::EC2::RouteTable ルートテーブルを作成するためのデフォルトの記述
VpcId Ref: ‘NaokiVpc’ 参照先VPCの指定
Tags Name : 下記ソースコード参照 タグのキーと値を設定
  # ルートテーブルの作成
  NaokiRtbPrivateWeb2a:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-private-web-2a'

  NaokiRtbPrivateWeb2b:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-private-web-2b'

  NaokiRtbPublic:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-public'

  NaokiRtbProtectDb:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: 
        Ref: 'NaokiVpc'
      Tags:
        - Key: 'Name'
          Value: 'naoki-rtb-protect-db'

6-10.ルートの作成

使用するオプション 設定値 説明
Type AWS::EC2::Route ルートテーブルを設定するためのデフォルトの記述
RouteTableId Ref:
下記ソースコード参照
参照先ルートテーブルの指定
DestinationCidrBlock 0.0.0.0/0 トラフィックをルーティングする宛先ネットワークのCIDRブロック
GatewayId Ref:
下記ソースコード参照
宛先ゲートウェイの指定
NatGatewayId Ref:
下記ソースコード参照
宛先NATゲートウェイの指定
NaokiRoutePublic:
    Type: 'AWS::EC2::Route'
    Properties:
      RouteTableId: 
        Ref: 'NaokiRtbPublic'
      DestinationCidrBlock: '0.0.0.0/0'
      GatewayId: 
        Ref: 'NaokiIgw'

  NaokiRoutePrivateWeb2a:
    Type: 'AWS::EC2::Route'
    Properties:
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2a'
      DestinationCidrBlock: '0.0.0.0/0'
      NatGatewayId: 
        Ref: 'NaokiNatGateway2a'

  NaokiRoutePrivateWeb2b:
    Type: 'AWS::EC2::Route'
    Properties:
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2b'
      DestinationCidrBlock: '0.0.0.0/0'
      NatGatewayId: 
        Ref: 'NaokiNatGateway2b'

6-11.ルートテーブルのアタッチ

使用するオプション 設定値 説明
Type ‘AWS::EC2::SubnetRouteTableAssociation ルートテーブルをアタッチするためのデフォルトの記述
SubnetId Ref: ‘下記ソースコード参照 参照先サブネットの指定
RouteTableId Ref: ‘下記ソースコード参照 参照先ルートテーブルを指定
  NaokiRtbAssocPrivateWeb2a:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2a'
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2a'

  NaokiRtbAssocPrivateWeb2b:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPrivateWeb2b'
      RouteTableId: 
        Ref: 'NaokiRtbPrivateWeb2b'

  NaokiRtbAssocPublic2a:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2a'
      RouteTableId: 
        Ref: 'NaokiRtbPublic'

  NaokiRtbAssocPublic2b:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetPublic2b'
      RouteTableId: 
        Ref: 'NaokiRtbPublic'

  NaokiRtbAssocProtectDb2a:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2a'
      RouteTableId: 
        Ref: 'NaokiRtbProtectDb'

  NaokiRtbAssocProtectDb2b:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: 
        Ref: 'NaokiSubnetProtectDb2b'
      RouteTableId: 
        Ref: 'NaokiRtbProtectDb'

7.感想

Terraformでの作成経験があるため、特に時間をかけることなく作成しましたが、作成を通じて感じたことは、ソースコードがまさに設計書であるということです。何を作成し、どのような設定を行うべきかについては、コンソールとIaC(Infrastructure as Code)を併用することで、より深く理解できると感じました。今後も知識や技術の向上を目指して、これらの手法を積極的に活用していきたいと考えています。

モバイルバージョンを終了