APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【AWSリソースをIaC化】IaCジェネレーターがアップデートされたので使ってみた

この記事は約15分で読めます。

目次

はじめに

こんにちは。エーピーコミュニケーションズ クラウド事業部の髙野です。
CloudFormationのIaCジェネレーター、みなさん使ったことありますか?
手動で作成したAWSリソースをIaC化できるということで非常に便利そうだったので、使ってみたいなとは思っていたのですが、実際に使用したことはまだありませんでした。

しかし先日アップデートがあり、開発者にとってより使いやすいツールになったようなので、これは神からのお告げだと思い使ってみることにしました。本記事では、IaCジェネレーターの使用感をお伝えしていきたいと思います。

aws.amazon.com

以下の内容がアップデートされたようです。

  • リソースのスキャンが終了すると、さまざまなタイプのリソースの概要がグラフィカル形式で表示されるようになった
  • テンプレート化するリソースを選択した後、AWS Application Composer でテンプレートをプレビューすることができるようになった

IaCジェネレーターとは?

IaCジェネレーターは、CloudFormationを使用して既存のリソースからテンプレートを作成する機能で、2024年2月にリリースされました。これにより、CloudFormationで管理されていないアカウント内のAWSリソースをIaC化できます。

IaCジェネレーターがリリースされる前は、既存のリソースをIaC化するにはFormer2などのサードパーティーのツールを使用する必要がありましたが、公式でIaC化をサポートしてくれる機能がリリースされたのは非常に心強いです。

詳しくは以下を参照してください。

docs.aws.amazon.com

準備

まずは、IaC化するリソースを事前に作成しておきます。
詳細な設定や手順は省略しますが、以下の構成を用意しました。

なお、IaCジェネレーターでスキャンしたリソースからテンプレートに含めるリソースを抽出する際にタグでリソースをフィルタリングできるため、リソース作成時に各リソースに以下のタグを付与しておきました。

  • Key:System
  • Value:IaC-Generator-test |

検証

リソースをスキャン

まずはIacジェネレーターでリソースをスキャンしてみましょう。

なお、IaCジェネレーターによるスキャンには回数やスキャンするリソース数に以下のようにクォータが設定されているため注意が必要です。

  • 1 回のアカウントスキャンで処理できるリソースの最⼤数:100000
  • 1 ⽇あたりのスキャン数 (リソースが 10,000 未満のアカウントの場合):3
  • 1 ⽇あたりのスキャン数 (リソースが 10,000 以上のアカウントの場合):1

CloudFormationのコンソールからIaCジェネレーターを選択して、IaCジェネレーターの画面を開きます。

IaC化の手順がコンソール上に割と細かく書いているので、画面にしたがって操作していけば基本的には作業できると思います。

新しいスキャンを開始を選択するとリソースのスキャンが開始されます。

AWSアカウント上に存在しているリソースの数によってスキャン完了までの時間は前後しますが、最大で10分ほどかかります。

スキャンが完了するとスキャンの概要タブにスキャン結果が表示されます。

スキャン項目にはスキャンを実施した日時有効期限までの日数などが表示されます。

スキャンには有効期限が決められており、1スキャンに対する有効期限は30日間です。この期間が経過するとテンプレートの生成には使用できなくなります。30日経過後にテンプレートを生成したい場合は再度スキャンを実施する必要があります。

スキャンされたリソースの内訳にはスキャンしたリソースの製品タイプ別の内訳が視覚的に表示されます。製品タイプを選択すると、さらに詳しい内訳が表示されます。

テンプレートを作成

次にスキャンしたリソースの中からテンプレートに含めたいリソースを選択して、テンプレートを作成します。

テンプレートを作成を選択します。

新しいテンプレートから開始を選択して、任意のテンプレート名を入力します。
削除ポリシー置換ポリシーを更新に関しては、今回は削除に設定します。

削除ポリシー置換ポリシーを更新を保持にすると、作成したテンプレートを使用したCloudFormationスタックを削除した際にスタックに含まれるリソースが削除されずに保持されるようになります。

次にスキャンしたリソースを追加項目でテンプレートに含めたいリソースを選択します。
タグでフィルタリングすることもできます。今回は事前に各リソースに付与していた「タグ値 = IaC-Generator-test」でフィルタリングします。

関連リソースを追加項目では、スキャンしたリソースを追加項目で選択したリソースに基づいて、追加するべき関連リソースが表示されます。

今回はタグをつけ忘れていたリソースや、EC2を作成したときに自動で作成されたENIやEBSボリュームなどが表示されたので追加しました。関連したリソースを自身で全部把握することはなかなか難しいので、これは非常に便利だと思いました。

あとは画面通りに進んでいき、テンプレートを作成を選択するとテンプレートの作成が開始されます。

テンプレートの作成が完了すると、テンプレートの詳細画面が表示されます。

テンプレートの定義タブでは作成されたテンプレートの内容が確認できます。

デフォルトではYAML形式で表示されていますが、赤枠の部分でJSONに切り替えることもできます。

キャンバスに切り替えると、各リソースの関係性を視覚的に確認できます。

テンプレートリソースタブにはスキャンしたリソースの一覧が表示されています。

リソースを再同期を選択すると、リソースの現在のライブ状態に基づいてテンプレートが更新されます。再同期した後に、以前の状態に戻すことはできません。

本記事では細かく説明しませんが、AWS CDKタブではスキャンしたリソースをAWS CDKで管理するための手順が記載されています。

CDKの詳細を確認したい場合は、以下を参照してください。

docs.aws.amazon.com

CloudFormationにインポート

最後に作成したテンプレートを使用してスキャンしたリソースをCloudFormationにインポートします。

スタックにインポートを選択します。

今回はIaCジェネレーターによって作成したテンプレートからとくに修正を加えていないため、生成されたテンプレートを選択しますが、IaCジェネレーターによって作成したテンプレートをダウンロードして修正を行った場合は編集したテンプレートをアップロードを選択します。

任意のスタック名を入力します。

今回のテンプレートでは、パラメーターとしてRDSのsubnet IDを入力するようになっているので、フォームにRDSのsubnet IDを入力します。

後は画面の指示に沿ってに操作し、最後にリソースをインポートを選択します。

インポートが開始されます。

ステータスがIMPORT_COMPLEATEになればインポート完了です。

スタック詳細画面のリソースタブでスキャンしたリソースが表示されており、スタックのリソースとして管理されていることが確認できます。

これで手動で作成したリソースをIaC化することができました。
以後は、テンプレートを更新することでリソースの設定変更等を実施できます。

おわりに

今回はじめてIaCジェネレーターを使用してみましたが、なかなか便利だと思いました。 手順が比較的細かくコンコール上に書いてあるので、そこまで悩むことなく検証を実施できました。

生成されたテンプレートは、リソースやパラメーターによっては一部修正を加えないといけない場合があるみたいなので、ある程度CloudFormationの知識は必要かと思いますが、すべて自力でテンプレートを作成することに比べればかなり作業量は減らすことができます。

IaC化は作業を自動化したり、環境を複製したりするのが簡単になるなど、AWSで開発を行うにあたって非常にメリットが多いです。みなさんもぜひIaCジェネレーターを使ってIaC化にチャレンジしてみてください。

関連記事

techblog.ap-com.co.jp

techblog.ap-com.co.jp

お知らせ

APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。


その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp

https://www.ap-com.co.jp/service/utilize-aws/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: sk07103
AWSをメインにインフラ系のご支援を担当しています。