既存のAWSリソースを基にCloudFormationテンプレートを生成する「IaCジェネレータ」が2024年2月にリリースされました。
このツールによって、既存のリソース情報を簡単にコード化できるようになっています。
8月にアップデートされた情報と合わせて、使ってみた感想、ポイントをご紹介します。
最新の情報については、AWS 公式ドキュメントをご参照ください。
IaCジェネレータとは
AWS IaCジェネレータは、既存のリソースを基にCloudFormationテンプレートを生成できるサービスです。
テンプレートはJSONとYAML形式で出力できます。
こちらはCloudformationの機能の一部として提供されているので、マネジメントコンソールの[Cloudformation]のサービス画面から利用が可能です。
使い方
既存のリソース情報をスキャンし、スキャンされたリソースの中からコード化したいリソースを選択することで、テンプレートが作成できます。
▼Cloudformationテンプレート化の方法
1. マネコンのCloudFormationから[IaCジェネレーター]のメニューを選択する。
3. [テンプレートの作成]からテンプレートの詳細を指定し、テンプレート化したいリソースを選択して[スキャンしたリソースを追加]に追加する。
※リソースはリソース識別子(ID等)、リソースタイプ(AWS::EC2::Instance等)、タグのいずれかでフィルター可能。
4. 選択したリソースに関連するリソース一覧がデフォルトでチェックされた状態で表示されるので、必要に応じて追加選択する。
5. [テンプレートの作成]でテンプレートを作成する。以下は作成されたテンプレート。
▼テンプレートを用いたリソース作成の方法
1. CloudFormationの[スタックの作成]>[新しいリソースを使用]を選択する。
2. [テンプレートの指定]でテンプレートを選択しスタックを作成する。
ちなみに、8月のアップデートは以下2点でした。
これにより、視覚的にリソースを容易に理解することが可能です。
コスト
テンプレート化は無料で利用可能です。
※Cloudformationで作成したリソースには利用料金が発生します。
制約事項
クォータ制限については、以下の表のとおり通り制約がありました。
1 回のアカウントスキャンで処理できるリソースの最大数 | 100,000 |
1日あたりのスキャン数 (リソースが 10,000 未満のアカウントの場合) | 3 |
1日あたりのスキャン数 (リソースが 10,000 以上のアカウントの場合) | 1 |
アカウントあたりの同時に生成されるテンプレートの数 | 5 |
1回のテンプレート生成で同時にモデル化されるリソースの数 | 5 |
1つのテンプレートでモデル化できるリソースの合計数 | 500 |
生成されたテンプレートのアカウントあたりの最大数 | 1,000 |
追加で、スキャンは30日間のみ有効なためそれ以降は利用できなくなること、スキャン後に削除されたリソースに関してはテンプレート対象として選択できない点に注意です。
また、スキャンはアカウント内の全リソースに対しておこなわれる(特定のリソースのみのスキャンは不可である)ことから、リソース数が多い環境では時間に余裕をもってスキャン実施することをお勧めします。
公式情報によると「1,000リソースで10分程度かかる可能性がある」とのことで、実際に自分が検証で30,000近くのリソースがある環境でスキャンした際は50分程かかりました。
テンプレート作成時の注意点
IaCジェネレータでテンプレートを生成してみて、個人的に引っかかったポイントです。
-
- テンプレート作成時のリソース検索は、「リソース識別子(ID等)、リソースタイプ(AWS::EC2::Instance等)、タグ」のいずれかでフィルター可能ですが、
検索文字列はいずれも完全一致の必要有りでした。またリソース名で検索は不可です。
- テンプレート作成時のリソース検索は、「リソース識別子(ID等)、リソースタイプ(AWS::EC2::Instance等)、タグ」のいずれかでフィルター可能ですが、
-
- テンプレート作成時に「関連リソース」としてテンプレート化するリソースがレコメンドされますが、レコメンドされるリソースの判断基準は不明のようです。
※AWSサポートに問い合わせると「現在のところ公開している情報がなく、AWS 内部の仕組みのため案内は難しい」と回答有り
- テンプレート作成時に「関連リソース」としてテンプレート化するリソースがレコメンドされますが、レコメンドされるリソースの判断基準は不明のようです。
-
- テンプレート化したリソースの更新・削除ポリシーはデフォルトが”保持”になっています。
この設定により、Cloudformationのスタックを削除しても作成されたリソースは削除されず保持されます。
Cloudformationで一からテンプレートを作成する場合このポリシーは”削除”がデフォルトのため、仕様の違いに注意です。
- テンプレート化したリソースの更新・削除ポリシーはデフォルトが”保持”になっています。
-
- EC2はテンプレート内で指定しているAMIが現在存在していない場合、テンプレートを使ってリソースを構築することはできません。
-
- テンプレート内のリソース参照がハードコードされている場合、別のアカウントで同じリソースを作成しようとすると、そのアカウントの情報に合わせてテンプレートを修正する必要があります。
-
- テンプレートには、AWSマネコンでは直接表示や設定ができないリソースタイプ(例: “AWS::EC2::EIPAssociation” や “AWS::Lambda::Version” など)が含まれることがあります。
リソースタイプは普段マネコンからリソース作成していると馴染みが薄いかもしれませんが、Cloudformationのユーザーズガイドにリソースタイプリファレンスとしてそれぞれの意味や構文などの説明が記載されているので参考にしてみてください。
- テンプレートには、AWSマネコンでは直接表示や設定ができないリソースタイプ(例: “AWS::EC2::EIPAssociation” や “AWS::Lambda::Version” など)が含まれることがあります。
また、Cloudformationの仕組みとして、以下はマネコン上で構築する際と異なるルールになりますので、Cloudformation初心者の方はお気を付けください。
-
- リソースの設定内容によってはCloudformationテンプレートで設定できないものもあります。(リソース作成後マネコンから設定可能)
-
- テンプレートで構築するEC2はリソース定義するのみのため、内部のソフトウェアやデータ構成など中身は反映されません。
ユーザデータにスクリプトを書き込んでおくなど別途対応が必要になります。
- テンプレートで構築するEC2はリソース定義するのみのため、内部のソフトウェアやデータ構成など中身は反映されません。
活用できそうな場面
構築では、同じ環境を複製したい場合、同等の環境を作成したい場合、アカウントをまたいでリソースを移行したい場合に
運用では、リソースを棚卸したい場合、リソースの依存関係を可視化したい場合、現状のリソースの設定状況を保管しておきたい場合(変更管理)に
また、BCP用、不要リソースの削除前のバックアップにも活用できそうです。
みなさまも色々IaCジェネレータを触ってみて、活用方法をぜひ考えてみてください。