IaC ジェネレーターで検証用 ALB のバックアップと復元をしてみた

頻繁に作成・削除する検証用の ALB は IaC ジェネレーターで CloudFormation テンプレート化しておくと便利です
2024.04.09

はじめに

アノテーション テクニカルサポートのShimizuです。

日々のサポート業務において、検証用の ALB(Application Load Balancer)を作成することがよくあります。
しかしながら数日にまたがる検証では課金を抑えるため、いったん ALB を削除 → 翌日に再作成という作業を毎回行っており、これがなかなか大変です。

そこで今回は、手動で作成したリソースを簡単に CloudFormation(以下 CFn )のテンプレートに変換できる「IaC ジェネレーター」で、検証用 ALB のバックアップと復元を試してみました。以下に手順をご紹介します!

ALB とリスナー設定を CFn テンプレートとしてバックアップする

まず検証用の ALB とリスナー設定、ターゲットグループがすでに作成されている前提で進めます。

CloudFormation コンソールの「IaC ジェネレーター」から「新しいスキャンを開始」をクリックします。スキャンには数分かかるのでしばらく待ちます。

スキャンステータスが完了になったら「テンプレートを作成」をクリックします。

「新しいテンプレートから開始」を選択し、テンプレート名を任意で入力します。
今回は検証用の ALB が目的なので、一括で削除できるよう「削除ポリシー」は「削除」にしておきます。

「スキャンしたリソースを追加」でテンプレート化したいリソース名を検索し、チェックを入れて選択します。
今回は ALB とリスナー設定、ターゲットグループが目的なので、下記の4つを選択して「次へ」をクリックします。

AWS::ElasticLoadBalancingV2::Listener
AWS::ElasticLoadBalancingV2::ListenerRule
AWS::ElasticLoadBalancingV2::LoadBalancer
AWS::ElasticLoadBalancingV2::TargetGroup

「関連リソースを追加」では対象の ALB に関連したリソース(VPC、サブネット、ログ保存用の S3 バケット)が表示されます。
今回は ALB とリスナー設定のみをテンプレート化し、VPC 等は既存のものを流用する想定なので、選択せずに次へ進みます。

入力内容を確認して「テンプレートを作成」をクリックします。

テンプレート生成ステータスが「完了」になったら、ダウンロードボタンでテンプレート(yamlファイル)をローカルにダウンロードしましょう。

これで ALB の CFn テンプレート化は完了です。
次の手順では、作成したテンプレートから ALB とリスナー設定を復元してみます!

CFn テンプレートから ALB とリスナー設定を復元する

まず復元する前に、最初に用意した検証用の ALB とターゲットグループは削除しておきましょう。

次に、前の手順でダウンロードしたテンプレート(yamlファイル)をそのまま使用するとエラーになる可能性があるため、テキストエディタで何箇所か修正します。

修正が必要な箇所は ALB の設定や環境にもよると思いますが、筆者が試した際には以下のような点でエラーになりました。参考までに記載しておきます。

  • SubnetsSubnetMappings のセクションが両方設定されているとエラーになるため、どちらかを削除します。
  • access_logs.s3.bucket の項目は空白だとエラーになるため、実際に存在するバケット名を記述します。さらに対象バケットには適切なアクセス許可を設定しておきます(参考[1]
  • 関連付けるサブネットやセキュリティグループ等のリソースが変更になる場合は、各リソースIDも修正しておきます。

テンプレートを修正したら、ALB の復元を行なっていきます。
CloudFormation のコンソールで「スタックの作成 > 新しいリソースを使用(標準)」をクリックします。

「既存のテンプレートを選択」で先ほど作成したテンプレート(yamlファイル)をアップロードし、次へ進みます。

スタック名を任意で入力して、次へ進みます。

もしテンプレートに不備があった場合はリソース作成を中断したいので「すべてのスタックリソースをロールバックする」を選択して次へ進みます。

入力した内容を確認し、問題なければ「送信」ボタンをクリックします。

リソースの作成が開始されるので、しばらく待ちます。

もしテンプレートの内容にエラーがあれば ROLLBACK_IN_PROGRESS と表示され、作成が中断されます。
この場合は「根本原因を検出」をクリックし、画面に表示されているエラーメッセージやドキュメント[2] を参考にして、テンプレートの不備箇所を修正します。

テンプレートを修正したら、作成に失敗したスタックを削除し、再度スタックの作成をやり直します。

テンプレートに不備がなければ CREATE_COMPLETE と表示され、スタックの作成が完了します。

これで検証用の ALB + リスナー設定を復元することができました。
検証が済んで不要になったら、スタックを削除することでリソース一式が削除され、復元したい場合はまたスタックの再作成を実施するだけです。お疲れ様でした!

さいごに

いかがでしたでしょうか。
筆者が試した際には何箇所かテンプレートの修正が必要なことに手間取りましたが、一度作成しておけば次回からは簡単にリソース一式を復元できるため、検証がとても楽になりました。
今まで CloudFormation テンプレートの作成は難しいイメージがありましたが、IaC ジェネレーターでグッと作成のハードルが下がりました。

今回は検証用の ALB のみ作成しましたが、VPC やターゲット EC2 なども含めてテンプレート化することも可能なので、別リージョンにリソース一式を復元するような DR 対策にも利用できます。

この情報がどなたかのお役に立てば幸いです!

参考資料

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。