CloudFormation入門-AWSの構築を自動化しよう-
こんにちは、坂巻です。
様々なソフトウェアに触れる機会が増え、併せて検証環境の構築が増えた今日この頃です。
そこで活躍したのが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
TestVPC
やTestIGW
が論理IDとなります。
これは作成するAWSリソースに付与する名前になります。
任意のもので構いませんが、テンプレートの中で一意である必要があります。
ちなみに、AWSはキャメルケースで書かれることが多いので、そのように書くことが多いようです。
リソースタイプ
作成したいAWSリソースをType
で指定します。
"Type" : "AWS::EC2::VPC"
は、VPCの作成を指定しています。
指定できるリソースタイプについては、リファレンスを参照ください。
リソースプロパティ
リソースタイプに設定値する値をProperties
で指定します。
Properties
の種類や数は、リソースタイプによって異なります。
指定できるリソースプロパティについては、リファレンス内のリソースタイプから参照できます。
組み込み関数(Ref)
実行するまでわからない値をプロパティに代入するには、組み込み関数を利用します。
Ref
は「論理ID」で指定した値の参照となります。
スタック
スタックとは、テンプレートを使って作られる一連のリソースのまとまりのことです。
スタックの作成
上記「sample1.template」を利用して、スタックの作成を解説します。
スタックの作成はウィザードに従い、次の手順で実行します。
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入門1】5分と6行で始めるAWS CloudFormationテンプレートによるインフラ構築
CloudFormation入門-ネットワーク環境の作成と組み込み関数-