ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

CloudFormationの機能を活用しよう!~IaCジェネレーターによるテンプレート生成とインポート~

こんにちは。伊藤です。
IaCといえば最近はほとんどTerraformしか触っておりません…

「一番好きなAWSサービスはCloudFormationです!」
と息巻いていたあの頃を取り戻すため、久しぶりにCloudFormationを触ってみました。
8/22のアップデート記事にIaCジェネレーターについての機能強化が追加されています。
せっかくなのでIaCジェネレーターを使ってみましょう。


該当の記事はこちら

aws.amazon.com

IaCジェネレーターにおけるスキャン結果の見やすさの向上
AWS Application Composerにおけるテンプレートプレビューの見やすさの向上
嚙み砕くと、これら2点が挙げられております。
(アップデート前のサービスを詳しく使っていなかったため比較できないことが悔やまれます)

事前準備

実際にIaCジェネレーターを使う前に、手動でいくつかのリソースを作成しておきます。

・S3バケット
・EBSボリューム
・RDSパラメーターグループ
の3つを作成しました。
これらのリソースには「IaC-managed : false」のタグを付けています。

その他にも私用で作成したCloudFormationテンプレートから生成されたリソースなどが存在しています。

概要

IaCジェネレーターについてのドキュメントはこちらになります

Generate templates from existing resources with IaC generator - AWS CloudFormation

手動作成したリソースをテンプレートに落とし込むことができ、
そのままCloudFormation管理下へのインポートまで可能です。


今回はドキュメントに記載の手順に沿う形で以下のように進めていきます。

  1. リソースのスキャン
  2. テンプレートを作成する
    (新しいテンプレートを最初から作成し、スキャンしたリソースと関連リソースを追加します)
  3. テンプレートレビュー
  4. リソースのインポート
  5. インポートしたリソースのタグ設定をCloudFormation経由で変更

1日あたりのスキャン数など制限がありますのでドキュメントの考慮事項もご確認ください。

IaCジェネレーターの料金についてはドキュメント上で明記されておりませんでしたが、
CloudFormationの利用と同様の扱いになっている、という認識をしております。

AWS Application Composerはドキュメントに記載があり、同じようにそれ自体には追加料金が発生しません。

Visually Compose Modern Applications - AWS Application Composer FAQs - AWS

IaCジェネレーターを使ってみる

それではIaCジェネレーターを使ってみましょう。

CloudFormationのサービスにIaCジェネレーターとApplication Composerが追加されています。
IaCジェネレーターのページに移動して「新しいスキャンを開始」を選択します。
IaCジェネレーターの画面01

ボタン押下後すぐに開始されました。
IaCジェネレーターの画面02

スキャン完了後の画面です。リソース数が少なかったためか数分で完了しました。
スキャンされたリソースの内訳や詳細などが確認できます。
IaCジェネレーターのスキャン結果01

内訳はフィルタリングすることもできます。
IaCジェネレーターのスキャン結果02

スキャンの結果を確認したら[テンプレート]タブに移動し「テンプレートを作成」を選択します。
IaCジェネレーターの画面03

「新しいテンプレートから開始」を選択し、テンプレート名、削除ポリシー、置換ポリシーの設定を行います。
今回は検証のため、削除ポリシーと置換ポリシーのどちらも「削除」にしました。
テンプレート作成画面01

「次へ」を押下すると先ほど実施したスキャンの内容が表示されました。
「スキャンしたリソースを追加」部分では今回の検証用に手動作成したリソースを指定します。
テンプレート作成画面02

タグキーでフィルタリングすることができたので「IaC-managed」で検索します。
テンプレート作成画面03

残念なことに事前作成したRDSパラメーターグループは検索結果に出ませんでした。

CloudFormationのドキュメントに追加されているIaCジェネレーターの対象リソース一覧を確認します。
Resource type support - AWS CloudFormation

AWS::RDS::DBParameterGroupは対象外のようです…事前に確認しておくべきでした…
RDSパラメーターグループのテンプレート作成は過去に苦戦した記憶があるので、今後のアップデートに期待です。

今回はS3バケットとEBSボリュームを対象としてテンプレートを作成します。

作成前の内容確認を行い「テンプレートを作成」を押下します。

テンプレートが作成されました!
作成されたテンプレート01

論理IDにはランダムな文字列が含まれていることがわかります。
「YAML⇔JSON」の切り替えやテンプレートファイルのダウンロード、コピー、スタックへのインポートなどが可能です。
このテンプレートを使って設定値を変更するためダウンロードしておきます。

キャンバス表示に切り替えるとアイコンベースのビジュアルエディターになります。
作成されたテンプレート02

「スタックにインポート」を選択してCloudFormationスタックの作成に進みます。

テンプレートソースが「生成されたテンプレート」になっています。
スタック名を入力して進みます。
スタック作成01

「変更を確認」では2つのリソースがImportアクションとして検出されています。
スタック作成02

「リソースをインポート」を押下して進みます。
問題無くスタックの作成が完了し、手動作成したリソースをインポートすることができました。
スタック作成03

インポートしたリソースの設定を変更してみる

CloudFormationを介してタグの値を更新してみましょう。
先ほどダウンロードしたテンプレートを編集して変更セットを作成します。
変更セット01

変更セットでは次のように変更内容を確認することができます。
変更セット02

4/16にアップデートが入っており差分が分かりやすくなりました。
該当の記事はこちら
aws.amazon.com

変更セットを実行し、無事に完了しました。
変更セット03

タグエディターで確認すると対象リソースのタグ設定が「IaC-managed : CloudFormation」になっていることがわかります。
タグエディター

まとめ

RDSパラメーターグループを除けば、当初の予定通りインポートから設定変更まで実施することができました。
IaCジェネレーターを使用する際には扱おうとしているリソースが対象になっているかどうかを確認しましょう。

CloudFormationに関して個人的な意見ではありますが、
IaCとしての環境を構築する必要が無く、適切なユーザ権限とテンプレートファイルがあれば使用することができるという特徴は
初学者からすれば特に大きなメリットだと考えています。

IaCに慣れたベテランエンジニアの方にとっては手が届かずもどかしく感じるような部分であっても、
視点を変えればその分シンプルな仕様であると言えます。

今回のアップデートで提示されたIaCジェネレーターやApplication Composerも含め、さらに良くなっていくCloudFormationを使って、
皆様もぜひ、気軽にIaCに入門してみましょう!