NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

AWS CloudFormationのIaCジェネレータを試してみる

こんにちは、西内です。
先日、AWSから以下のようなアップデートが発表されました。

AWS CloudFormation は、CloudFormation の外部で管理されている既存の AWS リソース用の AWS CloudFormation テンプレートと AWS CDK アプリを簡単に生成できる新機能をリリースしました。生成されたテンプレートとアプリを使用して、CloudFormation と CDK にリソースをインポートしたり、新しい AWS リージョンまたはアカウントにリソースを複製したりすることができます

※下記サイト「既存の AWS リソース用の AWS CloudFormation テンプレートと AWS CDK アプリケーションを数分で生成」より引用
aws.amazon.com

「手動作成したリソースをコード化出来る!?」ということで、界隈でも話題になっていたと思います。
今回、このIaCジェネレーターがどんなものか試してみました。

実際にやってみた

CloudFormationのコンソールを開くと、左メニューに「IaCジェネレーター」というものが出来ていました。
これが今回追加された新機能ですね。

CloudFormationのコンソールトップ画面

IaCジェネレーターを開くと下図の画面に遷移します。

IaCジェネレーター画面

画面記載の手順によると、

  1. アカウントのリソースをスキャンする
  2. CloudFormation テンプレートを作成する
  3. CloudFormation または CDK にインポートする

という流れのようです。

まずはアカウントのリソーススキャンからやっていきましょう。
画面中段右の「新しいスキャンを開始」ボタンを押します。

IaCジェネレータ画面で「新しいスキャンを開始」をクリック

「スキャンステータス」の部分に進捗が表示されて、しばらく経つとスキャンステータスが完了になります。(今回は2-3分でスキャンが完了しました)

スキャンステータスが完了に

スキャンが完了したら、「テンプレートを作成」ボタンを押します。

「テンプレートを作成」をクリック

「テンプレートの詳細を指定」画面に遷移するので、各種項目を入力します。

「テンプレートの詳細を指定」画面

今回は、新たにテンプレートを作成するので、「新しいテンプレートから開始」を選択します。
テンプレート名は「BlogTemplate」として、削除ポリシー・置換ポリシーは「保持」を選択して「次へ」ボタンを押します。

すると、「スキャンしたリソースを追加」画面に遷移します。
この画面で、当該アカウント内に作成されているリソースの一覧が表示されます。
(これ、リソースの整理にも使えそうですね)

スキャンしたリソースを追加画面

コード化したいリソースを選択すると、画面下部の「選択したリソース」に追加されます。

「選択したリソース」に対象リソースが追加される

「次へ」ボタンを押すと、「関連リソースを追加」画面に遷移します。
この画面では、先ほどの画面で選択したリソースに対して、「この辺のリソースも関係してるんじゃないの?」とAWSが提案してくれる画面になっています。ありがたいですね!

「関連リソースを追加」画面

「次へ」ボタンを押すと、確認画面に遷移します。

「確認して作成」画面

「テンプレートを作成」ボタンを押すと、テンプレートの作成が開始されます!
今回は12リソースを選択しましたが、1分もかからずにコードが作成されました。早いですね。
画面右の「YAML」と書かれたプルダウンからは、出力形式をYAMLかJSONで選択できるようになっています。

テンプレート作成画面

これでテンプレートの作成が完了です!

なお、「テンプレートリソース」タブを開くと、今回テンプレート化したリソースの一覧が表示されます。

テンプレートリソースタブ

また、「AWS CDK」タブを開くと先ほどのテンプレートをCDKに変換することが出来ます。

AWS CDKタブ

作成できたけど・・・

テンプレート作成できましたが、画面上に何やら警告が表示されています。

警告文

どうやら、リソースの全てを完璧にコード化できるわけではなく、一部制約があるようです。
例えば、データベースのパスワード等の外部から読み取れない情報はコード化出来ません。
ただ、そういった外部から読み取れない情報でもStack作成時のパラメータとして入力するようにしてくれる場合もあります。

Write-only properties are resource properties that can be written but can’t be read by AWS CloudFormation. (An example would be a database password.) This causes issues when generating templates from existing resources. In general, write-only properties are converted into parameters in the generated template. This allows you to enter the properties as parameter values during import operations.

※下記サイトの「IaC generator and write-only properties」より引用 docs.aws.amazon.com

テンプレート化してもそのまますぐ使えるわけではなく多少人手で修正が必要な場合があるので、そこは要注意です。

さいごに

今回はCloudFormationのIaCジェネレーターを使ってみました。
はじめて使うサービスをいきなり、IaCで構築するのは難しいです。
まずはコンソールから手作業で試行錯誤することが多いのではないでしょうか。
今回のこのサービスを使うことにより、手作業でリソースを作成した後でもコード化をすることが格段に容易になりました。
コンソールから作成したリソースをコード化したい方は、ぜひ一度お試しください!!