Subscribed unsubscribe Subscribe Subscribe

Subnet(サブネット)を作成する場合の注意点について

WEBサーバーはプライベートサブネットに配置する

プライベートサブネットはインターネットからのインバウンドを許可しない場合に使用します

WEBサーバーは基本的にはELB経由の80(HTTP)のみ許可しますので、
パブリックサブネットに置く必要はありません。

WEBサーバーからインターネットへのアウトバウンドのためにNATGatewayを使用します

サブネットのCIDR

VPCのCIDRの真ん中でパブリックとプライベートを分けます。
さらにアベイラビリティゾーンでそのさらに真ん中で分けます。

例えば、VPCのCIDRが172.31.0.0/16の場合は以下のようにします。
※1サブネット4096IPになります。

アベイラビリティゾーン(パブリックサブネットのCIDR) アベイラビリティゾーン(プライベートサブネットのCIDR)
ap-northeast-1a(172.31.0.0/20) ap-northeast-1a(172.31.128.0/20)
ap-northeast-1a(172.31.16.0/20) ap-northeast-1a(172.31.144.0/20)
ap-northeast-1a(172.31.32.0/20) ap-northeast-1a(172.31.160.0/20)
ap-northeast-1a(172.31.48.0/20) ap-northeast-1a(172.31.176.0/20
ap-northeast-1c(172.31.64.0/20) ap-northeast-1c(172.31.192.0/20)
ap-northeast-1c(172.31.80.0/20) ap-northeast-1c(172.31.208.0/20)
ap-northeast-1c(172.31.96.0/20) ap-northeast-1c(172.31.224.0/20)
ap-northeast-1c(172.31.112.0/20) ap-northeast-1c(172.31.240.0/20)

※これでプライベートIPを見ればAZとPublic|Privateが一目瞭然になります。

MapPublicIpOnLaunch

デフォルトのfalseを明示的に指定します。

インスタンスやオートスケーリングの起動設定でPublicIPが必要な場合は"AssociatePublicIpAddress": "true"にします。

Tag

Nameに{ "Ref": "AWS::StackName" }を指定

※どのアプリケーションのサブネットかが分かるようにします

サブネットとの紐付けるリソース

RouteTable
※パブリックサブネットの場合はインターネットゲートウェイへのルートが紐付けられている必要がある
NetworkAcl

json

    "PrivateSubnet1a": {
      "Type": "AWS::EC2::Subnet",
      "Properties": {
        "AvailabilityZone"   : "ap-northeast-1a",
        "CidrBlock"          : { "Fn::FindInMap": [ "NetworkSettings", "CidrBlock", "PrivateSubnet1a" ] },
        "MapPublicIpOnLaunch": false,
        "VpcId"              : { "Ref": "VPC" },
        "Tags": [
          { "Key": "Name", "Value": { "Ref": "AWS::StackName" } }
        ]
      }
    },
    "PrivateSubnet1aRouteTableAssoc": {
      "Type": "AWS::EC2::SubnetRouteTableAssociation",
      "Properties": {
        "SubnetId"    : { "Ref": "PrivateSubnet1a" },
        "RouteTableId": { "Ref": "RouteTablePrivate" }
      }
    },
    "PrivateSubnet1aNACLAssoc": {
      "Type": "AWS::EC2::SubnetNetworkAclAssociation",
      "Properties": {
        "SubnetId"    : { "Ref": "PrivateSubnet1a" },
        "NetworkAclId": { "Ref": "NACLPrivate" }
      }
    }