IaCジェネレーターで生成したCFnテンプレートを使った環境構築に失敗した話

記事タイトルとURLをコピーする

こんにちは!
カスタマーサクセス部の河本です。

前回のブログの検証用として、Transit Gatewayを用いたマルチリージョン構成を構築しました。 ブログを書き終えられたことに満足する中で、こんなアップデートを見かけました。

docs.aws.amazon.com

既存のAWSリソースからCFnテンプレートを生成できるIaCジェネレーターという新機能が追加されたというものです。 当社内部でも地味に盛り上がりを見せているアップデートです。

試してみたいなと思いつつアクティブウィンドウをAWSマネジメントコンソールに戻すと、そこにあるではありませんか。前回構築したマルチリージョン環境が。

前回構築した検証環境の構成図

ということで今回はIaCジェネレーターで生成したCFnテンプレートを使って、環境構築にチャレンジしました。 結果はタイトル通り失敗に終わったのですが、なぜ失敗したのかを共有したいと思います。

本記事の目次は以下の通りです。

IaCジェネレーターでCFnテンプレートを作成してみた

CloudFormationコンソールを開くと、IaCジェネレーターが増えてます。
IaCジェネレーターをクリックしてみると、使用方法が記載されていました。まずは環境をスキャンするようです。
ということで画面中段にある[新しいスキャンを開始]をクリックします。
無事に完了。私の場合はリソース230個で3分ほどかかりました。
画面下段にある[テンプレートを作成]をクリック。
テンプレートの詳細を指定して[次へ]をクリック。
リソースの選択画面に遷移したのですが、ここでちょっとした問題が発生しました。
本画面ではCFnテンプレート化するリソースを選択するのですが、一覧にはリソース識別子、リソースタイプなどしか表示されません。リソース名を見ることができないため、どれが今回の検証で作成したリソースなのかが分かりませんでした。
今回の検証環境におけるリソース名ですが、実は「test-transit」を含めるという命名規則としていました。しかし、タグ値で検索しようと試みるも演算子は完全一致を意味する「=」しか選択できません。正規表現や「:」などで無理やり部分一致できるか試したものの、できませんでした。

教訓①:あらかじめ対象のリソースIDをまとめておく。または共通のタグを付与する。

ということで思い出せる範囲で作成したリソースの識別子をメモし、選択しました。正直なところ必要なリソース全てを選択できてないと思います。このまま[次へ]をクリックしますが、不安しかありません。
すると次は「関連リソースを追加」という画面がでてきました。これで不足しているリソースも選択できるかもしれません。希望が湧いてきました。既にすべてのリソースが選択されていたため、そのまま[次へ]をクリックします。
最後の確認画面で[テンプレートを作成]をクリックします。
20秒で作成が完了しました。
テンプレートをダウンロードしたり、スタックに直接インポートできるようです。何やら警告が出てますね。[警告の詳細を表示]をクリックしてみます。
CFnテンプレートに特定のプロパティを追加できなかったという警告のようです。
致命的なものであれば修正する必要がありますが、構築に影響がないパラメータのため、今回はスルーします。

このあと大阪リージョンでも同じ流れでテンプレートを作成しました。その際、東京リージョンから共有していたピアリングアタッチメントを選択するとエラーが出力されたため、対象外としました。

生成したテンプレートを使用して構築してみた

検証用に作成したAWSリソースを削除し、先ほど生成したCFnテンプレートを流してみました。 するとさっそくエラーが出ました。サブネット作成のところで存在しないVPCのIDが指定されているようです。
CFnテンプレートを見ると、VPCのIDがそのまま入力された状態でした。このVPCは先ほど削除したため当然のエラーといえます。
教訓②:パラメータタイプのうち、存在するリソースIDを指定する必要があるものは、テンプレート生成元のIDがそのまま使用される。

リソースIDを参照するように修正しました。他の部分も同様に修正しました。
気を取り直して再実行すると先ほどのエラーが出なくなりました。しかし次はRoute 53 Resolverに関するエラーが出ました。見落としていましたが、どうやらCFnテンプレート作成時に「関連リソースを追加」の画面で追加していたようです。
教訓③:関連するリソースを追加してくれる機能は便利だが、精査する必要がある。

このあとも度重なるトライ&エラーを実施するはめになりましたが、構築はここで中断します。 理由ですが、CFnテンプレート構築のトライ&エラーを繰り返すことにより、AWSリソースの起動停止を起因としたAWS利用料が発生するのと、他のサービスを検証したいためです。

最後に

今回は残念ながら失敗に終わりましたが、IaCジェネレーターは非常に便利なツールだと感じました。今の具合だと、公式ページに書かれている別リージョンへのリソースの複製といった用途で使用するためには、少し壁があるように感じます。今後のアップデートに期待しつつ、以下の用途で使用するのが良さそうですね。

  • シンプルな構成でのテンプレート作成(手直し前提)
  • CFnテンプレート作成の補助的なツール

ご一読いただきありがとうございました。

河本 直輝 (記事一覧)

CS5課所属

スラダンの映画を4回だけ見に行きました。