CloudFormation便利ですよね。
今回、業務で初めてCloudFormation使ってみました。
その際に「ハマったこと」「こうしておけばよかった」と思ったことを書きます。
初めて使う人、使う予定の人の参考になれば嬉しいです。
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のテンプレート作成で困った時の解決法
IAMロールは名前でOK
EC2の設定で、IAMロールを割り当てるのときのことです。
「IamInstanceProfile」という設定項目なのですが、インスタンスプロファイル ARNのことかと思ったのですが
IAMロールの名前を指定するようでした。割とハマりました。
リソース名の被りに気をつける
何個か同じような物を書くときに、コピペすると思うのですが、リソース名を直すのを忘れることがありました。
リソース名が被っていると、もちろんスタックを作成できないですし
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とバージョン管理ツールを使うことで、変更点がわかりやすいです。