今回は、先日書籍(Amazon Web Servicesクラウドデザインパターン設計ガイド)の発売も発表された
Cloud Design Pattern(CDP)の記事になります。
対象は「Stack Deployment パターン」です。

このパターンの「その他」にVPCのCloudFormationでVPCも構築ができることが記載されています。

またこのパターンは、単にシステムをコピーするだけでなく、
クラシックなEC2環境からユーザー企業と専用ネットワークでつながる
仮想プライベートクラウド「VPC(Virtual Private Cloud)」環境への 移行時にも適用できる。

そこで、実際にVPCの構築からVPN Connectionの作成までを試してみました。
作業内容としては、下記のテンプレートでスタックを作成するのみになります。

{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "VPNConnection",

  "Mappings" : {

    "RegionMap" : {
      "ap-southeast-1" : {
        "AMI" : "ami-72621c20"
      }
    }

  },

  "Resources" : {

    "EC2VPC" : {
      "Type"       : "AWS::EC2::VPC",
      "Properties" : {
        "CidrBlock" : "10.0.0.0/16"
      }
    },

    "EC2VPNGateway" : {
      "Type" : "AWS::EC2::VPNGateway",
      "Properties" : {
        "Type" : "ipsec.1"
      }
    },

    "EC2VPCGatewayAttachment" : {
      "Type" : "AWS::EC2::VPCGatewayAttachment",
      "Properties" : {
        "VpcId"        : {"Ref" : "EC2VPC"},
        "VpnGatewayId" : {"Ref" : "EC2VPNGateway"}
      }
    },

    "EC2CustomerGateway" : {
      "Type" : "AWS::EC2::CustomerGateway",
      "Properties" : {
        "Type"      : "ipsec.1",
        "BgpAsn"    : "65000", 
        "IpAddress" : "xxx.xxx.xxx.xxx"
      }
    },

    "EC2VPNConnection" : {
      "Type" : "AWS::EC2::VPNConnection",
      "Properties" : {
        "Type"              : "ipsec.1",
        "CustomerGatewayId" : {"Ref" : "EC2CustomerGateway"},
        "VpnGatewayId"      : {"Ref" : "EC2VPNGateway"}
      }
    }

  },

  "Outputs" : {
  }

}

注意点は下記となります。

  • Mappingsには一つ以上のマッピングテーブルが必要(関係ないAMIのマッピングテーブルを定義)
  • VPCGatewayAttachmentのプロパティであるIpAddressがドキュメントにはIPAddressと記載されている
  • CustomerGatewayのプロパティであるVpnGatewayIdがドキュメントにはVPNGatewayIDと記載されている
  • VPNConnectionのプロパティであるCustomerGatewayIdとVpnGatewayIdがドキュメントにはCustomerGatewayIDとVPNGatewayIdと記載されている

(ドキュメントは後日訂正されると思います)

そして、AWSマネジメントコンソールにて上記のテンプレートでスタックを作成します。

スタックを作成すると下記のように、AWSリソースの作成が開始されます。

下記のようになれば、作成完了です。

作成ログは、Eventタブから確認することができます。

今回はVPN Connenction作成までの最低限のリソースで試しましたが、サブネットやルーティングテーブルの
設定も可能です。

テンプレートを作るのは、少し大変です。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら