AWS のリソース構築の自動化に取り組んでみよう !
~ AWS CloudFormation テンプレートの効率的な作成方法
野邊 哲男
builders.flash 読者の皆さん、こんにちは !
AWS のシニアテクニカルインストラクター 野邊 (のべ) です。
今回は AWS リソースをコード (テンプレート) から作成できる AWS CloudFormation の初学者の方向けに、テンプレートを効率的に作成する方法を紹介していきます !
筆者はふだん AWS のトレーニングを登壇していますが、その中で AWS CloudFormation の説明を行うと、受講者の方から「テンプレートを簡単に作成する方法はないですか ?」や、「既存の AWS サービスのリソースからテンプレートを生成する方法はないですか ?」というご質問をよく受けます。そのご質問の回答として紹介している方法をこの記事で挙げていきます !
目次
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
1. AWS CloudFormation について
AWS CloudFormation は、コードから AWS サービスのリソース群 (スタック) を作成できるサービスです。
コードは、JSON または YAML のフォーマットで記載しますが、そのコードを記載したファイルをテンプレートといいます。AWS CloudFormation に対しテンプレートを指定してスタックの作成リクエストを発行すると、 テンプレートに記載された内容に基づきスタックが作成されます。
また、単に作成するだけではなく、下記のような機能もサポートしています。
- スタックの変更 : テンプレートを変更し、その内容をスタックに反映する
- スタックの削除 : スタック単位で AWS サービスのリソースをまとめて削除する
- ロールバック : スタックの作成途中で問題が発生した場合、それまで作成したリソースも削除して作成処理自体を取り消す
- ドリフトの検知 : 作成されたスタックが、AWS CloudFormation 以外の手段 (AWS マネジメントコンソールなど) で変更された場合、その差分を検出して表示する
これらの機能を活用することで、テンプレートから同じスタックを繰り返し作成・変更・削除が可能になるため、手動での作成と比較し、ミスの削減や時間短縮が期待できます。
ただ、もちろん最初にテンプレートを作成する必要がありますので、そのテンプレートを効率的に作成する方法を紹介していきます。
2. サンプルの活用
まず方法の一つとして、サンプルの活用があります。例えば、AWS CloudFormation ユーザーガイドの「テンプレートスニペット」では、様々な AWS サービスのリソースを作成するためのテンプレートのスニペットを参照できるリンクがまとめられています。
もちろん、スニペットのコードをそのまま使える場合もあれば、自分が必要なコードに編集する必要はある場合もありますが、自分で一からコードを記述するよりは効率的に作成できますよね。
これらのスニペットをベースに、テンプレートのリファレンス を参照して目的のコードを完成させるという方法も検討してみて下さい。
3. AWS CloudFormation IaC ジェネレーターの活用
AWS CloudFormation IaC ジェネレーター (IaC ジェネレーター) は、ちょうどこの記事の原稿を作成中 (2024 年 2 月) に利用可能になった機能で、タイミング的にドンピシャですので記事のテーマとして取り上げないわけにはいきませんww
IaC ジェネレーターにより、すでに作成済の AWS サービスのリソースから AWS CloudFormation テンプレートを生成できます。従来、既存リソースからテンプレートを生成するには 3rd party ツールが必要でしたが、
IaC ジェネレーターは AWS CloudFormation の機能として提供されており、AWS マネージメントコンソールからテンプレートを生成できます。
次のスクリーンショットでは、AWS マネージメントコンソールの左側のナビゲーションメニューで IaC ジェネレーターのメニューが追加されていることが確認できます。
画像をクリックすると拡大します
このメニューをクリックしてテンプレート生成を開始します。まずスキャンを実行して既存の AWS サービスのリソースの一覧を表示させます。
画像をクリックすると拡大します
スキャンが完了したあと、表示された AWS サービスのリソースの一覧からテンプレートとして生成したいものを選択します。
次のスクリーンショットでは、EC2 インスタンスを選択してます。
画像をクリックすると拡大します
次に選択したリソースと関連するリソースを選択します。
関連リソースは次のスクリーンショットのように自動的に表示されるので、テンプレート化したいものを選択します。次のスクリーンショットでは、選択した EC2 インスタンスの関連リソースとして、Amazon VPC やサブネット、セキュリティグループなどが表示されている様子がわかります。
画像をクリックすると拡大します
そのあと、テンプレート名などを指定してテンプレート作成を実行すると、次のスクリーンショットのようにテンプレートが生成されます。生成されたテンプレートはコピーやダウンロード、またスタックへのインポートも行えます。
画像をクリックすると拡大します
この IaC ジェネレーターにより「既存の AWS サービスのリソースから AWS CloudFormation のテンプレートを生成したい」というニーズに対応できそうですね。ただ使用するうえではスキャン数の制限などの留意点もありますので、詳細は AWS CloudFormation のユーザーガイドの AWS CloudFormation IaC generator の説明部分 をご参照ください!
4. Amazon CodeWhisperer の活用
Amazon Whisperer は、AI により生成されたコードを提案・自動挿入できるツールです。求めるコードについてコメントに自然言語で記述すれば、Amazon CodeWhisperer がそのコメントの内容や既存のコードから、次に書くべきコードを提案してくれます。
Amazon CodeWhisperer は、Python や JavaScript、TypeScript、Go などのアプリケーションを作成するコードを提案してくれるだけでなく、AWS CloudFormation の JSON や YAML のテンプレートや、AWS Cloud Development Kit (AWS CDK) (TypeScript、Python)、HashiCorp Terraform (HCL) のコードの提案も可能です。
下のアニメーションの例をご参照ください。
この例では、Visual Studio Code から Amazon CodeWhisperer を使用し、Amazon S3 バケット名のパラメータと、S3 バケットを作成する AWS CloudFormation の YAML コードを提案させています。
Amazon CodeWhisperer は、複数の候補を提示する場合もあるので、自分が求めるテンプレートに一番近いものを選択して、必要に応じて編集すると効率的です。
Amazon CodeWhisperer については、「Amazon CodeWhisperer を使ってみよう !」という記事でも詳細を説明していますので、ぜひご覧ください !
5. AWS Application Composer の活用
AWS Application Composer は視覚的に AWS のサーバーレスアプリケーションをはじめとする AWS サービスのアーキテクチャを設計できるサービスです。設計した AWS サービスのリソースを作成するためのコードを生成したり、コードを読みこんでの視覚化も可能です。
AWS のサーバーレスアプリケーションの開発やデプロイを支援するツールとして、AWS Serverless Application Model (AWS SAM) があります。この AWS SAM では、AWS CloudFormation のテンプレートを拡張した SAM テンプレートを使用し、サーバーレスアプリケーション を構成する AWS Lambda 関数や Amazon API Gateway の API などのリソースを作成するコードをよりシンプルな構文で記述できます。
AWS Application Composer はサーバーレスアプリケーションにフォーカスしており、SAM テンプレートを GUI ベースで設計し、そのコードを生成できます。
例えばサーバーレスアプリケーションとして Amazon API Gateway と統合した AWS Lambda 関数を作成する場合、以下のアニメーションのように視覚的に設計し、SAM テンプレートのコードを作成できます。
また、サーバーレスアプリケーションだけでなく AWS CloudFormation でサポートしているリソースも対象にできます。
次の図は、Amazon VPC や Amazon EC2 インスタンス、Amazon RDS のデータベースを使用する Web アプリケーション環境を構築する AWS CloudFormation テンプレートを AWS Application Composer に読み込ませた時のイメージです。このように既存のテンプレートを読み込んで視覚化し、さらに編集していくことも可能です。
さらに、既存の AWS Lambda 関数や Amazon API Gateway の API の設定情報を Application Composer へエクスポートし、SAM テンプレートを生成させることもできます。これは、AWS Lambda のコンソールから実施できます。
以下のアニメーションでその様子をご確認ください。
このように、Application Composer ではテンプレート内容を視覚化しながらテンプレートのコードの生成や編集を行えます。ただ、AWS サービスによっては、テンプレートのプロパティ設定は GUI ではなく手入力が必要なケースもあるので留意しておきましょう。
AWS Application Composer は、今回紹介した機能の他にも AWS Step Functions のワークフロースタジオとの連携や、Visual Studio Code で使用するなどの機能もありますので、興味がある方は AWS Application Composer の Developer Guide をご参照ください !
6. AWS Console-to-Code の活用
AWS Console-to-Code は、AWS マネジメントコンソールで EC2 インスタンスを作成すると、その操作内容に基づいて AWS CloudFormation のテンプレートのコードや、AWS CDK のコードを生成してくれます。2024 年 2 月時点ではプレビューリリースで、バージニア北部 (us-east-1) リージョンでのみ使用可能です。
以下のアニメーションでは、AWS Console-to-Code で EC2 インスタンスを作成する AWS CloudFormation テンプレートを生成しています。
AWS Console-to-Code は、EC2 インスタンスだけでなく、EC2 インスタンスのインスタンスプロファイルに AWS Identity and Access Management (AWS IAM) のロールを指定した場合はそれらを作成するコードや、同時作成するように指定したセキュリティグループのコードも生成できるので、かなりのコード記述量の削減が期待できそうですね。現在はプレビューですが、今後も着目していきたい機能です。
Amazon EC2 のユーザーガイドにも AWS Console-to-Code の説明 がありますので、ご参照ください。
7. その他の方法
AWS CloudFormation のテンプレート作成を効率化するその他の方法をいくつか紹介します。
AWS ソリューションライブラリ
AWS ソリューションライブラリ では、AWS および AWS パートナーによって構築された様々なソリューションを参照できます。これらのソリューションの紹介ページでは、ソリューションの環境を構築するための実装ガイドや AWS CloudFormation テンプレートも参照できますので、これらを参考にするのも一つの方法です。
Amazon EventBridge のイベントバスやルール、パイプのテンプレート生成
AWS マネジメントコンソールの Amazon EventBridge のページでは、作成済のイベントバスやパイプから AWS CloudFormation テンプレートを生成できます。
次の図は作成済のカスタムイベントバスからテンプレートを生成するメニューを選択している様子を示しています。またイベントバスだけでなく、設定されているルールのテンプレートも生成できます。
画像をクリックすると拡大します
AWS CloudFormation デザイナー
テンプレートをグラフィカルに作成・編集できるツールで、AWS マネジメントコンソールから使用できます。既存のテンプレートを読み込んでの編集も可能です。また、JSON 形式と YAML 形式を相互変換も可能です。
また、これら以外でも 生成 AI を活用するという方法も考えられます。例えば、Amazon Bedrock を活用し、テンプレートのコードを生成する仕組みを自分たちで作成するのも面白いかもしれませんね。
8. まとめ
今回は AWS CloudFormation のテンプレートを効率的に作成する方法を紹介しました。
- AWS CloudFormation について
- サンプルの活用
- AWS CloudFormation IaC ジェネレーターの活用
- Amazon CodeWhisperer の活用
- AWS Application Composer の活用
- AWS Console-to-Code の活用
- その他の方法
この記事を執筆していて AWS CloudFormation のテンプレートのコードを効率的に作成できる AWS のサービスやツールが以前に比べるとかなり増えたなと感じました。筆者も AWS CloudFormation や AWS SAM のテンプレートを作成する機会は多いのですが、 以前はこの記事の「2. サンプルの活用」の方法で、リファレンスなどを読み込みながら一生懸命コードを記述していました。現在はこの記事に挙げた方法によってかなり効率的に作成できるようになり、便利になったなとしみじみ感じています。
みなさんもこの記事を参考に、効率的にテンプレートを作成してくれると嬉しいです !
筆者プロフィール
野邊 哲男
アマゾン ウェブ サービス ジャパン合同会社
AWS トレーニングサービス本部 シニアテクニカルインストラクター
自分が体験した「成功」と「失敗」、そこから「学んだこと」を皆さんにお伝えするべく、日々 AWS のトレーニングの登壇をしています。
最近は「仮面サーバーレス」としてサーバーレスのトレーニングやデジタルトレーニングの情報を皆様にお届けしています。
AWS を無料でお試しいただけます