こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
今日は先日、本業で少し触れることになったIaCジェネレータのお勉強をしてみたいと思います。
IaCジェネレータとは?
既存のクラウドリソースから自動でIaC(Infrastructure as Code)コードを生成するツール
主な機能とユースケース
-
レガシー環境のIaC化
手動で作成した既存リソース(EC2/VPC等)をコード化し、バージョン管理可能に。 -
設定ドキュメント化
リソース構成をコードとして出力 → チームでの共有・監査が容易に。 -
IaC学習支援
実稼働環境を基にしたサンプルコード生成で、IaC文法習得を加速。 -
マルチクラウド移植
(Terraformer等)AWSリソースをTerraform化 → GCP/Azureへ移植する基盤作成。
制限事項(注意点)
-
生成コードの最適化が必要
自動生成コードは冗長な場合があり、手動でリファクタリング推奨。 -
非対応リソースの存在
特定のサービス(例:一部のマネージドサービス)は生成できない可能性あり。 -
セキュリティ設定の継承
既存リソースの不適切な設定(例:公開S3バケット)がそのままコード化されるリスク。
ハンズオン
非IaC管理下のリソースをIaC管理下にする手順
CFnの管理画面の画面左にIaCジェネレーターという表示があるので、これを押下すると以下のような画面になります。
兎にも角にもスキャンをしないと何も始まらないので、左上の新しいスキャン配下の"すべてのリソースをスキャン"を押下します。
スキャンが開始されると、わかりづらいですが、スキャンの概要タブのスキャンステータスが進行中になります。
暫くステイします。
スキャンが完了すると、以下のようにステータスが完了となります。
画面をググっと下にスクロールすると、スキャンされたリソースの内訳を確認することが出来ます。
今回はセキュリティ・ID・コンプライアンス系が6割を占めていますね。

内訳を右側で見ることが出来るのですが、IAM Roleが圧倒的に多いことがわかります。
テンプレートを作成していきます。
画面中央上部のテンプレートを作成を押下します。
テンプレートを準備の部分では、新しいテンプレートから開始を押下します。
テンプレート名はEC2-template、削除ポリシーは保持、置換ポリシーも保持とします。
次に進みます。
今回は手動で作成したWindows系のEC2をyaml化していきます。
リソースタイプをAWS::EC2::Instanceとして、検索を掛けると、リソース識別子が絞られますので、対象の識別子を選択して次に進みます。

今回は以下のwin-2022-shadowをyaml化します。

関連リソースをAWS側が自動で検索してくれて、提案をしてくれる画面が表示されます。
基本的には全てチェックを入れて、次に進めばいいと思います。
確認画面が表示されます。確認して、テンプレートを作成を押下します。
作成が開始されます。
正常に終了すると、以下のようになります。
テンプレートの定義タブを下にスクロールすると、色々ばーっと書いてます。
これが、IaC化された結果ですね。
スタックにインポートを押下します。

CFnのいつもの画面が自動で表示されます。
スタック名は適当にEC2のNameタグから取ってきました。
変更を確認します。今回の場合変更しないで、手動作成したものをIaC管理下に置く感じになるので、全てImportになりますね。
次に進みます。
内容をかくにんして、リソースをインポートボタンを押下します。

動作確認:ドリフトを発生させて検知させてみる
先程IaC管理下に置いたEC2からEBSを1つでタッチしてみます。
デタッチされたことを確認します。
この状態で先ほど作成したStackからドリフト検出を行ってみます。

結果としてドリフトを検出していますね。
EBSで検知していることがわかるため、挙動としては問題なさそうです。
動作確認:変更セットを作成して、そこからリソースに変更を掛けてみる
CFnの管理画面のテンプレートからyamlを取得。
内容を以下のように変更してみます。
# タグ修正
## 変更前
Tags:
- Value: "win-2022-shadow"
Key: "Name"
## 変更後
Tags:
- Value: "win-2022-shadow"
Key: "Name"
- Value: "Dev"
Key: "Env"
# インスタンスタイプ変更
## 変更前
InstanceType: "t3.medium"
## 変更後
InstanceType: "t3.small"
変更したyamlを保存します。
CFnの管理画面のスタックからスタックを更新 > 変更セットを作成を押下します。
変更セットタイプを標準変更セット、既存のテンプレートを置換、
テンプレートファイルのアップロードを選択して、先ほど変更したyamlをアップロードします。
この辺りはデフォルトで入っているもので問題ありません。
次に進みます。
ここもデフォルトで問題ありません。次に進みます。
変更セットをレビューの画面が表示されます。
内容を確認して、変更セットを作成を押下します。
変更セットが正常に作成されたことを確認します。
変更される内容をレビューすることが出来るので、このタイミングで最終確認をしておきます。
確認出来ましたら、変更セットを実行を押下します。
UPDATE_COMPLETEと表示されていればOKです。





























