CloudFormationテンプレートの構造
以下の、最小構成のテンプレートを例に解説していきます。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
SnsTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: cloudformation-test
CloudFormationの勉強は、2つのセクションを覚えるところから始まります。
- AWSTemplateFormatVersion
AWSTemplateFormatVersion: "2010-09-09"
これは、CloudFormationテンプレートのバージョンを宣言するセクションです。 CloudFormationのサービスがテンプレートを実行する時、まず最初にこのセクションを読み込んで、どのバージョンで中身を解釈するか判断します。 つまり、ここに書いたバージョンに合った構文で、中身を書く必要があるわけですね。 ・・・しかし、実は2023年現在、このバージョンは”2010-09-09″しか存在しません。 しばらくの間は、いわゆる「おまじない」だと思って書いておけば大丈夫です。
- Resources
Resources: SnsTopic: Type: AWS::SNS::Topic Properties: TopicName: cloudformation-test
CloudFormationにおいて、最も重要なセクションです。 このセクションで、作成するリソースを定義します。
上記例の「SnsTopic」部分はあくまで論理名で、ユーザが任意に指定出来ます。 次の「Type」に何を指定するかで、何を作成するかが決まります。 「Type」で何を作るか決めたあと、「Properties」に必須のパラメータを指定する事で、リソースを作成できます。 例では、cloudformation-testという名前のSNSトピックを作成しています。
公式リファレンスの読み方
ポイント1で何のリソースを定義するか決めたら、作成に必要なパラメータを調べましょう。 一番早いのは、ChatGPTに聞くこと 公式リファレンスを調べることです。 基本的には「CloudFormation リソース名」と検索すれば、公式リファレンスが見つかります。
例えばVPCだと、以下のようになっています。
このドキュメントの、「Properties」に書いてある項目が、リソース作成時に指定できる項目です。 一見すると項目の多さにびっくりするかもしれませんが、
Required: Yes
になっていないものは省略が可能です。 なので、ポイント1の例では「TopicName: cloudformation-test」しか設定していなくても動いたんですね。 (もっと言うとTopicNameもRequired: Noなので、本当はProperties自体省略できます)
ちなみに、省略したものはデフォルト値が設定されます。 予めデフォルトだとどんな設定になるのかを把握しておきましょう。
CloudFormationテンプレートの書き方
- 以上を踏まえて、CloudFormationの書き方の流れです。
- 必須セクションを書く
- 作成したいリソースの、Typeの書き方を調べる
- 必要なプロパティを調べる
- まずは必須のものを書く
- 必要に応じて設定値を追加する
課題
さて! ここまでで第一回のカリキュラムは終了です。 最後に、課題に取り組んで頂きましょう。 初回なので、非常にシンプルです。
- 以下の要件を満たすテンプレートを記述して下さい
- 192.168.0.0/16のCidrを持つVPCを作成する
解説
こちらです
さて、いかがでしたでしょうか? 考え方から説明していきます。
CloudFormationは、2つのセクションから始まります。
- AWSTemplateFormatVersion これはおまじないのように決まっていると説明しましたね。 AWSTemplateFormatVersion: “2010-09-09” と書いてあげましょう。
- Resources ここで作成するリソースを決めます。 まずはTypeに、VPCを作成するよう指定するのですが、どう指定したらいいか、VPCの公式リファレンスを確認しましょう。 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html
これによれば、以下のように記述すればVPCを作ってくれるようです。 Type: AWS::EC2::VPC
また、今回の課題の条件に、Cidrの指定があります。 PropertiesでCidrを指定するセクションを探してみると、「CidrBlock」がそれにあたりそうです。 CidrBlock: 192.168.0.0/16
最後に、他に指定が必須のパラメータを確認します。 VPCに関しては、Required: Yesの項目は1つもなさそうですね。
全部まとめると、解答例は以下です。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
Vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 192.168.0.0/16
初回という事で、インフラエンジニアでも馴染みリソースを作成してみました。 次回からリソース間での値のやり取りが始まります。 これから少しずつプログラミングっぽくなっていきますので、お楽しみに! 以上、クラウドエンジニアの濱田でした!