クラウド エンジニアブログ

[ゼロから始めるInfrastructure as Code] 第1回 CloudFormationの書き方

2023年2月1日掲載

始めに

クラウドインテグレーション課 クラウドエンジニアの濱田です。

弊社はAWSインフラを多く対応する関係上、インフラエンジニアが大多数を占めています。 しかし、最近はIasCが浸透してきた事で、弊社内では、インフラエンジニアにもコードを書く文化を取り入れて行こうという風潮が生まれました。

そこで社内の新人向けに、プログラミングの取っ掛かりとしてCloudFormationの勉強会を主催しました。 今回から数回に分けて、勉強会の内容についてお話していこうと思います。 題して「ゼロから始めるInfrastructure as Code」! コードを書いたことがないインフラエンジニアでも、最終的にコードを書く時のコツが分かるカリキュラムになっています(?)。 ぜひ一緒に取り組んでみて下さい!

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テンプレートの書き方

  1. 以上を踏まえて、CloudFormationの書き方の流れです。
    1. 必須セクションを書く
    2. 作成したいリソースの、Typeの書き方を調べる
    3. 必要なプロパティを調べる
      • まずは必須のものを書く
      • 必要に応じて設定値を追加する

課題

さて! ここまでで第一回のカリキュラムは終了です。 最後に、課題に取り組んで頂きましょう。 初回なので、非常にシンプルです。

  • 以下の要件を満たすテンプレートを記述して下さい
    • 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

初回という事で、インフラエンジニアでも馴染みリソースを作成してみました。 次回からリソース間での値のやり取りが始まります。 これから少しずつプログラミングっぽくなっていきますので、お楽しみに! 以上、クラウドエンジニアの濱田でした!

[ゼロから始めるInfrastructure as Code] 第1回 CloudFormationの書き方

SHARE
シェアシェア ポストポスト
[ゼロから始めるInfrastructure as Code] 第1回 CloudFormationの書き方
SHARE
ポスト シェア