ページ

2015年4月21日

CloudformationでVPCを作ってみる練習、3回目:CloudFormationでテストスタックを生成


 テストを兼ねてCloudFormationでスタックを作成してみます。




CloudFormationでテスト


ミスタイプなどのチェックを兼ねてCloudFormationでスタックを作成しましょう。


{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "AWS CloudFormation Sample Template Simple VPC.",

  "Parameters" : {

    "InstanceType" : {
      "Description" : "WebServer EC2 instance type",
      "Type" : "String",
      "Default" : "t2.micro",
      "AllowedValues" : [ "t2.micro", "t2.small", "t2.medium"],
      "ConstraintDescription" : "must be a valid EC2 instance type."
    },

    "NetworkStructure" : {
      "Type" : "String",
      "Default" : "TEST1",
      "AllowedValues" : [ "TEST1", "TEST2" ],
      "ConstraintDescription" : ""
    }
   },

  "Mappings" : {
     "VPCConfig" : {
       "VPCCidr" : { "TEST1" : "10.181.0.0/16", "TEST2" : "10.81.0.0/16" }
     },
    "SubnetConfig" : {
      "PublicCidr"    : { "TEST1" : "10.181.254.0/24", "TEST2" : "10.81.254.0/24" },
      "PrivateCidr"   : { "TEST1" : "10.181.80.0/24" , "TEST2" : "10.81.80.0/24"  }
    }
  },

  "Resources" : {
    "VPC" : {
      "Type" : "AWS::EC2::VPC",
      "Properties" : {
        "CidrBlock" : { "Fn::FindInMap" : [ "VPCConfig", "VPCCidr", { "Ref" : "NetworkStructure" } ] },
        "EnableDnsSupport" : "true",
        "EnableDnsHostnames" : "true",
        "Tags" : [
          { "Key" : "Application", "Value" : { "Ref" : "AWS::StackId" } },
          { "Key" : "Network", "Value" : "Public" }
        ]
      }
    },

    "PublicSubnet" : {
      "Type" : "AWS::EC2::Subnet",
      "Properties" : {
        "VpcId" : { "Ref" : "VPC" },
        "CidrBlock" : { "Fn::FindInMap" : [ "SubnetConfig", "PublicCidr", { "Ref" : "NetworkStructure" } ] },
        "Tags" : [
          { "Key" : "Application", "Value" : { "Ref" : "AWS::StackId" } },
          { "Key" : "Network", "Value" : "Public" }
        ]
      }
    },

    "PrivateSubnet" : {
       "Type" : "AWS::EC2::Subnet",
       "Properties" : {
         "VpcId" : { "Ref" : "VPC" },
         "CidrBlock" : { "Fn::FindInMap" : [ "SubnetConfig", "PrivateCidr", { "Ref" : "NetworkStructure" } ] },
         "Tags" : [
           { "Key" : "Application", "Value" : { "Ref" : "AWS::StackId" } },
           { "Key" : "Network", "Value" : "Private" }
         ]
       }
    },

  "InternetGateway" : {
      "Type" : "AWS::EC2::InternetGateway",
      "Properties" : {
        "Tags" : [
          { "Key" : "Application", "Value" : { "Ref" : "AWS::StackId" } },
          { "Key" : "Network", "Value" : "Public" }
        ]
      }
    },

    "GatewayToInternet" : {
       "Type" : "AWS::EC2::VPCGatewayAttachment",
       "Properties" : {
         "VpcId" : { "Ref" : "VPC" },
         "InternetGatewayId" : { "Ref" : "InternetGateway" }
       }
    },

    "PublicRouteTable" : {
      "Type" : "AWS::EC2::RouteTable",
      "Properties" : {
        "VpcId" : { "Ref" : "VPC" },
        "Tags" : [
          { "Key" : "Application", "Value" : { "Ref" : "AWS::StackId" } },
          { "Key" : "Network", "Value" : "Public" }
        ]
      }
    },

    "PublicRoute" : {
      "Type" : "AWS::EC2::Route",
      "DependsOn" : "GatewayToInternet",
      "Properties" : {
        "RouteTableId" : { "Ref" : "PublicRouteTable" },
        "DestinationCidrBlock" : "0.0.0.0/0",
        "GatewayId" : { "Ref" : "InternetGateway" }
      }
    },

    "PublicSubnetRouteTableAssociation" : {
      "Type" : "AWS::EC2::SubnetRouteTableAssociation",
      "Properties" : {
        "SubnetId" : { "Ref" : "PublicSubnet" },
        "RouteTableId" : { "Ref" : "PublicRouteTable" }
      }
    },

    "PrivateRouteTable" : {
      "Type" : "AWS::EC2::RouteTable",
      "Properties" : {
        "VpcId" : { "Ref" : "VPC" },
        "Tags" : [
          { "Key" : "Application", "Value" : { "Ref" : "AWS::StackId" } },
          { "Key" : "Network", "Value" : "Private" }
        ]
      }
    },

    "PrivateRoute" : {
      "Type" : "AWS::EC2::Route",
      "Properties" : {
        "RouteTableId" : { "Ref" : "PrivateRouteTable" },
        "DestinationCidrBlock" : "0.0.0.0/0",
        "GatewayId" : { "Ref" : "InternetGateway" }
      }
    },

    "PrivateSubnetRouteTableAssociation" : {
      "Type" : "AWS::EC2::SubnetRouteTableAssociation",
      "Properties" : {
        "SubnetId" : { "Ref" : "PrivateSubnet" },
        "RouteTableId" : { "Ref" : "PrivateRouteTable" }
      }
    }
  },

  "Outputs" : {
    "VPC" : {
      "Description" : "VPC CIDR",
      "Value" : { "Fn::FindInMap" : [ "VPCConfig", "VPCCidr", { "Ref" : "NetworkStructure" } ] }
    },
    "Public"  : {
      "Description" : "Public Subnet CIDR",
      "Value" : { "Fn::FindInMap" : [ "SubnetConfig", "PublicCidr", { "Ref" : "NetworkStructure" } ] }
    },
    "Private" : {
      "Description" : "Private Subnet CIDR",
      "Value" : { "Fn::FindInMap" : [ "SubnetConfig", "PrivateCidr", { "Ref" : "NetworkStructure" } ] }
    }
  }
}

AWSマネジメントコンソールのCloudFormationを選択するとスタック一覧がでてきます。 そこで、[Create]を選択するとテンプレート選択に進みます。



Upload a template to Amazon S3を選択して、フィル選択からCloudFormationファイルを読み込みます。

[Next]をクリックすると・・・

あら、Validation Errorがでていますね。

Default値の設定にミスがありましたので修正して、読み直しをしてもう一度スタックを作成します。


Resourceで設定したリソースタイプとネットワーク構造が選択できるようになっていますね。  インスタンス・タイプをプルダウンしてみると、指定した通りにt2.micro,small,mediunだけがリストされてます。


他と混在しないようにタグを追加して、


レビューでチェック(レビューするほどの内容もありませんけど)したら、作成スタート


作成状況がイベントタブに表示されてきます。


記述したリソースが作られている様子がわかりますね。


出来上がると、OutputタブにCloudFormationファイルでOutputに記載した値がでているか確認して。

実際にVPCとサブネットが形成されていることを確認すると出来上がり。

ひとまず、スタックが形成できるようになりました。

次回は、サブネットを追加しましょう。