はじめに
こんにちは!
今回は、AWS既存リソースをコード化するリバースエンジニアリング機能「IaCジェネレーター」を用いた、CloudFormationテンプレートの作成についてご紹介します。
通常、手作業でのAWS環境構築後に作成するCloudFormationテンプレートですが、設計・構築後であっても、一からテンプレートを書き起こすのは手間がかかり、なかなか骨の折れる作業です。
しかし、今回ご紹介する「IaCジェネレーター」を用いたテンプレート作成であれば、既存リソースの構成情報を基に、迅速にコード化が可能です。
これにより、既存環境のIaC化を効率的に進めることができるのです。
AWS CloudFormationとは
AWS CloudFormationとは、Infrastructure as Code(IaC)を実現するためにAWSより提供されているサービスです。
各AWSリソースをどのように設定し利用するかを、JSONまたはYAML形式のテンプレートとして定義し、そのテンプレートに基づいてリソースの集合体(スタック)を、自動的に構築、更新、削除することができます。
自動構築によるDisaster Recovery (災害復旧)としての利用も可能であり、例えば東京リージョンのシステムダウン時には、大阪リージョンに同一環境を速やかに自動で立ち上げるといった活用例もあります。
CloudFormationを利用することで、設定ミスや環境構築自体の作業工数削減、再現性向上やバージョン管理などが行えるため、信頼性の高いシステム運用に欠かせないサービスです。
IaCジェネレーターとは
IaCジェネレーターとは、既存リソースの構成情報をスキャンし、それをInfrastructure as Code(IaC)のテンプレートとして、自動的に書き起こしてくれるリバースエンジニアリングツールです。
これはAWS CloudFormationの機能の一部として提供されており、マネジメントコンソール上で手動作成されたCloudFormationの管理下にないAWSリソースを、効率的にIaC化することが可能です。
既に稼働している環境をIaC管理下へ移行する際や、環境構築のベーステンプレートを迅速に作成する際に非常に便利であり、筆者自身も現在担当している業務で使用しています。
複雑な依存関係を持つリソース群であっても、その構成を自動でコード化できるため、IaC化の初期フェーズにおける工数を大幅に削減できます。
具体例:ELBのCloudFormationテンプレート生成
具体例として、ELB(Elastic Load Balancing)のIaC化における「IaCジェネレーター」を用いたCloudFormationテンプレートの作成プロセスについて説明します。
前提条件:
対象となる既存リソースが、既にAWS上で作成済みであることを前提とし、今回具体例とするELBの構成は、以下の簡易構成図の通りであるとします。
1. アカウントスキャン:
指定したAWSアカウントとリージョン内のリソースを検出します。AWSマネジメントコンソール上から検出範囲を選択できます。
今回は「CloudFormation > IaCジェネレーター > 新しいスキャンを開始 > すべてのリソースをスキャン」の手順で実施します。
これにより、環境全体のリソース構成情報が収集されます。
2. リソース選択・テンプレート作成設定:
マネジメントコンソール上にて、「テンプレート作成」を押下し、テンプレート名記入や詳細設定の選択をします。
その後、スキャン結果の一覧からテンプレート化したい特定のリソースを選択します。
今回はELBテンプレートのため、「AWS::ElasticLoadBalancingV2::LoadBalancer」が主な対象リソースとなります。
3. 関連リソースの自動検出と選択:
選択したリソースが依存している関連リソースが自動で検出されます。
検出された関連リソースの中から、テンプレートに含めるもの、既存として参照するものを細かく選択できます。
この機能により、テンプレートに必要な依存関係を自動的に組み込むことができ、その欠落を防ぐことができます。
4. 確認とテンプレート生成:
設定内容と選択リソースの確認後に「テンプレートの生成」を実行することで、CloudFormationテンプレートが出力されます。
具体例:ELBテンプレートのインポート
テンプレートが生成されただけでは、既存リソースは手動管理のままであるため、CloudFormationのリソースのインポート機能と組み合わせていきます。
1. テンプレートのダウンロード:
IaCジェネレーターで作成されたテンプレートをダウンロードします。
2. テンプレートの修正とパラメータ化:
生成されたテンプレートには、スキャンした構成情報を基に様々な値がハードコードされており、再利用性を高めるためにも修正が必要です。
環境によって変動する値やリソース間参照に用いられる物理IDなどは、コード管理が容易となるようにパラメータ化、値の動的解決を可能とする関数置き換えなどの修正を行います。
一部不要なリソースが作成されてしまう場合もあるため、必要に応じた修正も必要です。
【修正例:パラメータ追加】
【修正例:値の動的解決】
3. スタックへのインポート:
作成・修正を終えたテンプレートを、CloudFormationのリソースのインポート機能を用いて、新しいスタックとしてインポートします。
インポート操作が完了することで、CloudFormationの管理下に入ったこととなります。
おわりに
今回は、「IaCジェネレーター」でのCloudFormationテンプレート作成についてご紹介しました。
テンプレート修正時にはCloudFormationに関する理解が求められますが、既存リソースを迅速にコードとして取り込む機能は、既存環境のIaC化のハードルを下げ、初期のコード作成作業を大幅に効率化できます。
環境構築作業の自動化や環境の複製・再現性の向上など、AWSでの開発・運用において非常に大きなメリットを生むCloudFormationとIaCジェネレーターを、使いこなしていきたいですね!
いかがでしたでしょうか?
今回の記事を通してエム・ソフトをより深く知っていただくきっかけになれば幸いです!
ぜひ当社公式サイトも見てみてください!
https://www.msoft.co.jp/
https://en-gage.net/msoft_career/
【転機診断チェックシート】
https://www.msoft.co.jp/download/Qiita/

最後までお読みいただき、ありがとうございました。









