【実例】AWS CloudFormation IaC ジェネレーターで爆速 IaC 化
AWS CloudFormation IaC ジェネレーター
☘️ はじめに
本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
👀 Contents
CloudFormation IaC ジェネレーター とは
既存リソースから、CloudFormation のテンプレートを作成できる機能です。
やってみる
AWS CloudFormation コンソールにログインします。[IaC ジェネレーター]をクリックします。
[新しいスキャンを開始]をクリックして、スキャンを開始します。
1000 個のリソースで最大 10 分となっていますが、5 分くらいだったと思います。
「2804」もリソースがあったようです。そんなに?と思いましたが、これは後で出てくる CloudWatch ログがかなりの割合を占めていたようです。
スキャンした内容からテンプレートを作成します。
テンプレートにする対象リソースを一つずつ選択しなけれなばりません。
列ヘッダ部分にある全選択をするといくつか選択されません。「スタックによる管理」が「はい」になっているものが選択されないようです。
既存スタック管理のリソースが選択できれば、既存テンプレートと違いがあるか確認できたのですが、残念。
次のページに移動すると、選択されていないので、先ほどと同じことを繰り返す必要があります。
ドキュメントにも「必要なリソースがすべてテンプレートに追加されるまで繰り返します。」と書いてあります。結構大変です。(※この点について、「さいごに」の部分に補足しています)
ページ数が減るので、「スタック管理されていて選択できないもの」くらい除外できないかと思いましたが、「リソースタイプ/タグキー/タグ値/リソース識別子」でしか検索できず、演算子は一致(=)でしか絞り込めません。
無心で全選択 → ページ移動を繰り返すと、「AWS::Logs::LogStream」ばかりになってきました。スキャンしたリソース数が多かったのはこれが原因です。
今回はお試しなので、これくらいでやめてテンプレートを生成しようと思います。
[次へ]をクリックすると
「リソースの数は 500 を超えることができません」となりました。無心で 894 リソースを選択したのはやりすぎでした。。
ドキュメントに書いてあります。(事前によく読みましょう・・)
チェックを外して減らすのも大変ですが、なんとか減らしました。
[次へ]で進むと、「関連リソースを追加」ということで全部にチェックが入っているようです。
AWS::Logs::LogStream
は不要だと思いつつも、チェック外すのが大変そうだったので、そのまま[次へ]
[次へ]で進むと、また出ました。「リソースの数は 500 を超えることができません」
親切に全部チェック入っているものを解除しなければなりませんでした。。
何とかチェックを外して、[次へ]をクリック。
[テンプレートを作成]をクリック!
・・・最初に指定したテンプレート名に _
が使われているのを注意されてしまいました(最初に教えて・・)
-
に変更して、[テンプレートを作成]をクリック!
ようやく生成が開始されました。
しばらくすると、「Internal Error」が!詳細については、「テンプレートリソース」を参照してくださいとあったので確認してみます。
全部、「COMPLETE」となっていて何が失敗か分かりません。
テンプレートの定義タブに戻って見ると、[ダウンロード]がクリックできるので、ダウンロードをしてみると YAML ファイルがダウンロードできました。
生成されています。
ただ、[スタックにインポート]というボタンが押せないので、ファイルは生成されているが処理が最後まで完了しなかったということなのでしょうか。
しっかり対象リソースを選択できていれば、次のように成功するようです。
📖 さいごに
今回は AWS CloudFormation の IaC ジェネレーターがマネジメントコンソールでも使えるようになっていたので、お試しで確認してみました。
リソース選択のところは除外もできるといいなと思いましたが、次のような使い方にすることで除外しなくても出来そうです。
リソースタイプで、AWS::ApiGateway::RestApi
のようにメインとなるリソースだけ選択すれば関連リソースが抽出されて追加されます。ドキュメントには、「必要なリソースがすべてテンプレートに追加されるまで繰り返します。」と書いてありますが、関連リソース抽出機能に期待したリソース選択をすることで、選択の手間も軽減されてよいのではないかと思いました。
Discussion