既存リソースから CloudFormation テンプレートを自動生成する方法を教えてください
困っていた内容
CloudFormation を使わず手動で作成した AWS リソースがあります。
実際のリソースから CloudFormation テンプレートを自動生成したいので、方法を教えてください。
また、可能であれば生成したテンプレートをそのままスタックとして CloudFormation にインポートしたいです。
どう対応すればいいの?
IaC ジェネレーターとリソースインポート機能を使用してください。
IaC ジェネレーター(infrastructure as code generator)は、CloudFormation 外で作成されたリソースをもとに、CloudFormation テンプレートを生成するツールです。
リソースインポートは、CloudFormation で管理されていないリソースを、CloudFormation の管理下(スタック)にインポートする機能です。インポートにはインポート対象を含む CloudFormation テンプレートを用意する必要がありますが、IaC ジェネレーターで生成したテンプレートも使用可能です。
なお、IaC ジェネレーターでテンプレートを生成する前に、リソースのスキャンを行っておく必要があります。スキャンはリージョン内のリソース全体に対して行われるため、時間が掛かる場合があるためご注意ください。
やってみた
手順
- リソースのスキャン
- テンプレートの生成
- テンプレートのインポート
今回は CloudFormation 外で作成した次の IAM ロールから CloudFormation テンプレートを生成してインポートします。
1. リソースのスキャン
テンプレートを生成する前に、リージョン内のリソースをスキャンします。
AWS CloudFormation コンソールの IaC ジェネレーターページを開き、「新しいスキャンを開始」をクリックします。
スキャンが完了するまで待ちます。
(適宜ページは閉じて後日確認してください)
2. テンプレートの生成
スキャンが完了したらテンプレートを生成します。
「テンプレートを生成」をクリックします。
任意のテンプレート名とポリシーを指定して「次へ」をクリックします。
「スキャンしたリソースを追加」からテンプレートを生成するリソースを選択し、「次へ」をクリックします。
今回は IAM ロール:hato-blog
のみを選択します。多くのリソースが表示される場合は、検索機能も活用してください。
「次へ」をクリックします。
「テンプレートを作成」をクリックします。
選択したリソースをもとに CloudFormation テンプレートが作成されました。
デフォルトはYAML
形式ですがJSON
形式に切り替えることもできます。
また「ダウンロード」をクリックするとファイルとしてダウンロードすることも可能で、クリップボードへのコピーも対応しています。
3. テンプレートのインポート
生成したテンプレートをもとに、既存のリソースをスタックにインポートします。
「スタックにインポート」をクリックします。
なお、生成したテンプレートのページを閉じた場合も、「新しいスキャンを開始」をクリックしたページの「テンプレート」タブ(「スキャンの概要」右横)から再度開くことが可能です。
任意のスタック名を指定して「次へ」をクリックします。
「次へ」をクリックします。
インポートされる内容を確認して「次へ」をクリックします。
「リソースをインポート」をクリックします。
インポートが完了するまで、しばらく待ちます。
IMPORT_COMPLETE
となり完了すると、スタックにインポートされたリソースが追加されます。