CloudFormationを自チームでも使いこなしたいのですが学習方法を教えてください

2022.02.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな ネクストモード株式会社 の吉井です。

Infrastructure as Code (IaC) という言葉が世の中に登場してから十数年が経過しています。
概念は IT 業界に浸透し、すでに何らかの形で IaC を実践・導入されている企業さんも数多いことと思います。

AWS からは CloudFormation が提供されています。
「CloudFormation の活用を開始しているが良い学習方法を教えてほしい」といった要望を多く頂戴します。
今回は学習に役立つコンテンツを集めてみました。

AWS公式ドキュメント

まずは UserGuide を読みましょう。
全ページ読まなくても大丈夫ですが、ブックマークくらいはしておきます。

Template reference

Template reference ではリソースごとのテンプレート記述方法が解説されています。
ここを参照しながらご自身のテンプレートを作成していくことをお勧めします。
※ サイト右上にある言語選択リストボックスで「English」を選択してください。

下は VPC のタグ付けをするプロパティです。
Required は必須であるかどうか、Yes ならもちろん記述する、 No なら必要に応じて記述する判断が必要です。(最初は判断が難しい)
Type には String、Boolean、Interger、List など指定された形式で記述します。
ということを読み解いていくわけです。

Tags
    The tags for the VPC.
    Required: No
    Type: List of Tag
    Update requires: No interruption

また、ほとんどのリソースには Example が記述されています。
とても参考になります。テンプレート記述に困ったら Example を参考にしてみてください。

Sample templates

「どこかにサンプルありませんか?」という相談をよく頂戴します。
実は公式にあります。
Sample templates

あまり知られていないのでしょうか…

Blackbelt

我らが Blackbelt でも CloudFormation は解説されています。
これから CloudFormation を勉強していく方々は必読ではないでしょうか。

[AWS Black Belt Online Seminar] AWS CloudFormation 資料及び QA 公開
[AWS Black Belt Online Seminar] AWS CloudFormation deep dive 資料及び QA 公開

ハンズオン

AWS らしくハンズオンが提供されています。
実際に手を動かしながらステップバイステップで基本を学べると思います。

システム運用の際にご活用いただける2つのハンズオンを公開しました!- Monthly AWS Hands-on for Beginners 2020年7月号

CDK

AWS Cloud Development Kit(CDK)がリリースされました。
開発者、または、開発経験のあるインフラエンジニアを中心に人気を博しています。
CloudFormation の書式ではなく使い慣れた開発言語でコードを定義可能です。
学習スキルの低減、生産性向上の可能性があるので検討してみてください。

[DevAx::connect番外編] CDK実践勉強会の資料およびQ&A公開

便利ツール

CloudFormation に関する便利ツールを紹介します。
OS 標準のテキストエディタでベタ書きするのは非効率ですし、プロビジョニング/デプロイも楽に行っていきたいです。

Rain

Rain は CloudFormation によるデプロイメントを強力に補助してくれるツールです。
手元でデプロイを実施するケースでは重宝すると思います。是非導入を検討ください。
主な機能は以下です。

  • 対話式デプロイメント
    • AWS CLI よりもフレンドリーなデプロイメントが可能
  • 一貫性のあるテンプレート整形
    • 可読性向上やタイプミス発見のためにも整形は大切
  • ネストとフィルターされた見やすいログ
    • 必要な情報だけ適切に得られるようなログ表示
  • 新規テンプレート作成
    • プロパティ要素が列挙されたテンプレートの生成

導入方法は Rain Github を参照いただく他に、以下のエントリでも紹介されています。

Former2

既存の AWS リソースをスキャンしテンプレートを作成してくれるサービスです。
IaC を自社に導入する際に課題になるのが「既存リソースをどうするか」ということです。
既存リソースをコード化する作業は大変な労力です。誰もがやりたくない作業だと思います。
この Former2 を使えば比較的楽に既存リソースをコード化可能です。

VS Code 拡張

私は VS Code でテンプレートを書いています。
楽をしたい、間違いを減らしたいという考えから以下の2つの拡張を利用しています。

私自身は使っていませんが、これも少々興味があります。
Indent-Rainbow

CloudFormation Guard

事前定義したルールでテンプレートをチェックします。
企業のコンプライアンスに準拠したルールを定義しておき、デプロイ前にテンプレートをチェックするような使い方をします。

cfn-diagram

テンプレートからダイアグラムを作成してくれます。
オンプレミス時代の構成図を思い浮かべれると少し期待と現実のギャップがあるかもしれません。
IaC ではコード自体を成果物にできるはずです。それを補完する視覚的な資料としては十分だと思います。

CloudFormation運用

チームで CloudFormation を使ったプロビジョニング/デプロイメントを進めていくうえで考えなければならないことがあります。

命名規約

ファイル名、リソース名、タグ、変数名、アウトプット名などルールを決めておきましょう。
決めても守られないかもしれませんが、無いと無法地帯になり ”書いた人しかメンテできないコード” が出来上がってしまいます。

Git

コードは Git で管理します。
ブランチ戦略も忘れずに決めておきましょう。

スタック戦略

1つテンプレートファイルに含めるリソースの基準を決めます。
リソースライフサイクルに合わせたスタックすることが運用上好ましいと考えます。
ここは正解は無く誰もが悩むところです。チーム内で話合ってやりやすいスタック戦略を模索してみてください。

クロススタック参照

クロススタック参照は便利である反面、硬直性を生む可能性もあります。
スタック参照使用の可否、使う場合の使用シーン、使わない場合の代替案を決めておきましょう。

CI/CD

CodePipeline,CodeCommit,CodeBuild を組み合わせてプロビジョニング/デプロイメントを自動化することも検討の一つです。
3rd Party にも優秀な製品は数多く存在します。
コードレビューや承認を取り入れたい場合に活用します。

近道はない

CloudFormation にしても他の IaC にしても近道はないと考えます。
数をこなす、経験を積んでいくことが習得への道ではないでしょうか。
書くか書かないか、Dead or Write !!!

おまけ

DevelopersIO の AWS CloudFormationの記事一覧 です。

以上、吉井 亮 がお届けしました。