CloudFormation入門-AWSの構築を自動化しよう-

2018.01.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、坂巻です。

様々なソフトウェアに触れる機会が増え、併せて検証環境の構築が増えた今日この頃です。

そこで活躍したのがCloudFormation。

実は少し前まで、CloudFormationと聞くと、設定ファイルをひたすら書くというイメージで、

余計に面倒だと思い敬遠していましたが、実際に使うと面倒どころか超便利。

そんなCloudFormationに感謝し、今回はCloudFormationのエントリです。

想定読者

  • CloudFormationを利用した事がない人
  • CloudFormationを敬遠していた人

CloudFormationとは

AWSリソース(VPCやEC2等)の構築を自動化するサービスです。

作成したいAWSリソースを設定ファイルに定義し、その設定ファイルをCloudFormationが読み込むことで、構築を自動化することができます。設定ファイルはテンプレートと呼び、テンプレートをCloudFormationに読み込ませるためにはスタックを作成します。次は、テンプレートとスタック作成について解説していきたいと思います。

テンプレート

前述の通り、テンプレートはAWSリソースを定義するファイルです。

json形式または、yml形式で書く事ができます。

下記「sample1.template」は、VPCを作成し、インターネットゲートウェイを作成・アタッチするテンプレートです。

こちらをもとに、テンプレートについて解説していきたいと思います。

 

sample1.template
{
  "Resources" : {
    "TestVPC" : {
      "Type" : "AWS::EC2::VPC",
      "Properties" : {
        "CidrBlock" : "10.0.0.0/16",
        "EnableDnsSupport" : "true",
        "EnableDnsHostnames" : "true",
        "InstanceTenancy" : "default",
        "Tags" : [ {"Key" : "Name", "Value" : "TestVPC"}]
      }
    },
    "TestIGW" : {
        "Type" : "AWS::EC2::InternetGateway",
        "Properties" : {
          "Tags" : [ {"Key" : "Name", "Value" : "TestIGW"}]
        }
      },
    "AttachIGW" : {
        "Type" : "AWS::EC2::VPCGatewayAttachment",
        "Properties" : {
          "InternetGatewayId" : { "Ref" : "TestIGW" },
          "VpcId" : { "Ref" : "TestVPC" }
        }
    }
  }
}

リソース

テンプレートに最低限必要な要素でありResourcesの中に、VPCやEC2等の作成したいAWSリソースを定義します。

リソース内の定義順は任意で構いません。CloudFormationが適切な順番でリソースを作成してくれます。

 

論理ID

TestVPCTestIGWが論理IDとなります。

これは作成するAWSリソースに付与する名前になります。

任意のもので構いませんが、テンプレートの中で一意である必要があります。

ちなみに、AWSはキャメルケースで書かれることが多いので、そのように書くことが多いようです。

 

リソースタイプ

作成したいAWSリソースをTypeで指定します。

"Type" : "AWS::EC2::VPC"は、VPCの作成を指定しています。

指定できるリソースタイプについては、リファレンスを参照ください。

 

リソースプロパティ

リソースタイプに設定値する値をPropertiesで指定します。

Propertiesの種類や数は、リソースタイプによって異なります。

指定できるリソースプロパティについては、リファレンス内のリソースタイプから参照できます。

 

組み込み関数(Ref)

実行するまでわからない値をプロパティに代入するには、組み込み関数を利用します。

Refは「論理ID」で指定した値の参照となります。

 

スタック

スタックとは、テンプレートを使って作られる一連のリソースのまとまりのことです。

 

スタックの作成

上記「sample1.template」を利用して、スタックの作成を解説します。

スタックの作成はウィザードに従い、次の手順で実行します。

  1. テンプレートの選択
  2. 詳細の設定
  3. オプション
  4. 確認

1.テンプレートの選択

AWSマネジメントコンソール「サービス」 メニューより、「CloudFormation」 を選択します。

(以下、CloudFormationコンソール)

「テンプレートを Amazon S3 にアップロード」を選択し、「sample1.template」を指定し、次へ進みます。

2.詳細の設定

適当なスタック名(ここでは「sample-Stack」)を入力し、次へ進みます。

3.オプション

タグ等のオプションは必要に応じて指定します。今回は未入力のまま次へ進みます。

なお、オプションを指定する際は、以下リファレンスを参考にしてください。

 

4.確認

最後に確認して「作成」をクリックすればスタックの作成が開始されます。

作成したスタックの状態が「CREATE_COMPLETE」になれば作成完了です。

作成されたAWSリソースのIDは、「リソース」タブより確認することが可能です。

 

スタックの削除

CloudFormationコンソールのスタックのリストから、削除するスタックを選択します。

「アクション」メニューより「スタックの削除」で、スタックの削除が可能です。

なお、スタックを削除すると、作成した環境は全て自動で削除されますのでご注意ください。

課題

CloudFormationの理解を深めるために、以下の環境をCloudFormationで作成してみましょう。

説明

  • CIDR10.0.0.0/16のVPC「KadaiVPC」を作成
  • インターネットゲートウェイ「KadaiIGW」を作成し、「KadaiVPC」にアタッチ
  •  ルートテーブル「PublicRoute」を作成
    • ルートを追加(送信先:0.0.0.0/0、ターゲット:インターネットゲートウェイ)
  • サブネット「BastionSubnet」を作成
    • CIDR10.0.1.0/24で作成
    • ルートテーブル「PublicRoute」
  • セキュリティグループ「BastionSG」を作成
    • ソース0.0.0.0/0でポート22番のみ許可
  • IAMロール「PowerUserRole」を作成
    • 「PowerUserPolicy」ポリシーをアタッチ
  • EC2インスタンス「Bastion」を作成
    • IAMロール「PowerUserRole」
    • セキュリティグループ「BastionSG」
  • EIPを「Bastion」に関連付け

回答例

スタックの作成が済みましたら、作成したEC2に対してSSH接続を行い、環境が作成されたのか確認してみましょう。

テンプレートの記述例については、こちらに記載しています。

さいごに

今回はCloudFormationの入門ということで、限定的な機能しか紹介できませんでしたが、

次回以降は汎用的で、実用的なテンプレートを紹介してみたいと思います。

 

参考

過去にCloudFormationを題材にしたエントリは多数ありますので、こちらも併せてご参照ください。

CloudFormation超入門

CloudFormation入門

CloudFormation入門-ちいさな構成をつくって肩慣らし-

【CloudFormation入門1】5分と6行で始めるAWS CloudFormationテンプレートによるインフラ構築

CloudFormation入門-ネットワーク環境の作成と組み込み関数-