インフラ

【AWS CloudFormation入門】 初心者が気をつけたいこと5つ

cloudformation

CloudFormation便利ですよね。

今回、業務で初めてCloudFormation使ってみました。
その際に「ハマったこと」「こうしておけばよかった」と思ったことを書きます。
初めて使う人、使う予定の人の参考になれば嬉しいです。

Contents

CloudFormationとは

AWSリソースをコードで作成できるAWSのサービスです。

用語 説明
テンプレート AWSリソースを記述するファイル(yaml,json)
スタック テンプレートから作成されたAWSリソースのまとまり

AWS Cloudformationとは | AWSドキュメント

テンプレート作成するときは、AWS公式のドキュメントで調べながら作成します。
AWS リソースプロパティタイプのリファレンス

今回作った構成

本番とステージングでVPCを分けて、ざっくり下記のリソースを作りました。
他案件の作業もあったので、だいたいですが作成は2人日くらいでした。

  • VPC
  • セキュリティグループ
  • ec2(4台)

yamlで書くことを意識した設計をする

設計の段階から、yamlで書くことを意識しておいた方が良いです。
CloudFormationのテンプレートは、yamlを使って書きました。

作成するときに意識したいのが、「タグや説明に[]や()を使わないこと」です。
使うと””や”で囲む必要があるからです。

  PublicSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: false
      AvailabilityZone: ap-northeast-1d
      Tags:
        - Key: Name
          Value: aws-network-basis-cfn-public #[]や()を使わない場合
      VpcId: !Ref VPC
  PrivateSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: ap-northeast-1d
      Tags:
        - Key: Name
          Value: "[test]aws-network-basis-cfn-private"#[]や()を使う場合 
      VpcId: !Ref VPC

CloudFormationデザイナーで編集しない

CloudFormationデザイナーで、コードを編集するのはやめておいた方がいいです。
メタデータが付くため、バージョン管理するときに差異がわかりづらくなります。

メタデータとは、Cloudformationデザイナーで図を表示するときのリソースの位置情報です。
編集したコードだけではなく、メタデータも変わるため差異が見にくくなります。

コードの編集は、テキストエディタを使って図を見たいときにCloudFomationデザイナーを使うのがいいです。
テキストエディタによっては、CloudFormationのプラグインがあったりします。
atom cloudformationプラグイン

ebsのデバイス名は調べて指定する

ebsのデバイス名を指定する場合は、指定するデバイス名が使えるか調べた方がいいです。

OSごとにアタッチするebsのデバイス名が指定されているので
追加でアタッチする際や、ボリュームのサイズをデフォルトから変える際には考慮する必要があります。

【初心者向け】CloudFormationのテンプレート作成で困った時の解決法

Linuxインスタンスでのデバイスの名前付け

IAMロールは名前でOK

EC2の設定で、IAMロールを割り当てるのときのことです。

「IamInstanceProfile」という設定項目なのですが、インスタンスプロファイル ARNのことかと思ったのですが
IAMロールの名前を指定するようでした。割とハマりました。

AWS::EC2::Instance

リソース名の被りに気をつける

何個か同じような物を書くときに、コピペすると思うのですが、リソース名を直すのを忘れることがありました。

リソース名が被っていると、もちろんスタックを作成できないですし
Cloudformationデザイナーで図が表示されなくて焦ります。

  PublicSubnet: #リソース名
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: false
      AvailabilityZone: ap-northeast-1d
      Tags:
        - Key: Name
          Value: aws-network-basis-cfn-public 
      VpcId: !Ref VPC

まとめ

初CloudFormatinについて、ハマったポイントをまとめてみました。

確かに最初は手動より時間がかかりますが慣れてくると、CloudFormationの方が安全に早く構築できそうです。
運用時もCloudFormationとバージョン管理ツールを使うことで、変更点がわかりやすいです。