この記事でわかること
インフラ構築や移行の案件において、「別ベンダーが管理しているリソースと同じものを新規環境に構築してほしい」といった依頼を受けた際、ドキュメントが不十分でCloudFormation管理外のリソースの設定値把握に苦労した経験はありませんか?
マネジメントコンソールでの目視確認や、設計書の新規作成となると、大変な手間がかかる上に、設定を見落とすリスクも伴います。
私は今回、AWS CloudFormationの「IaCジェネレーター」を利用して、これらの手間や設定見落としのリスクをサクッと解決しました!
本記事では、このIaCジェネレーターを「既存環境の構成調査ツール」として活用して設定値を把握する手順を解説します。
IaCジェネレーターは、現在稼働しているAWSリソースの設定情報を読み取り、CloudFormationテンプレートとして出力できるAWSの標準機能です。
今回のように「他環境の設定値を調査したい」「環境の棚卸をしたい」といったケースにおいて、以下のようなメリットがあります。
・稼働中のシステムに対しても実行可能
設定変更や再起動を伴わない「読み取り処理」のみを実行するため、稼働中のシステムに対しても実行できます。
・関連リソースも芋づる式に可視化
取得したいリソースだけでなく、それに紐づくサブネットグループやセキュリティグループなどもまとめて出力可能です。
・マネジメントコンソールから数クリックで実行可能
スキャン自体に費用はかからず、手軽に構成をコード化できます。
【利用時の考慮事項】
スキャンはリージョン単位で実行されます。
また、1回のスキャンで処理できるリソースの最大数(100,000)や、1日あたりのスキャン数など、いくつかのクォータ(制限)が定められています。
詳細はAWSの公式ドキュメントをご参照ください。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/generate-IaC.html
ーーーーーーーーーーーーーーーーーーーーーーーーー
【AWSの設定でお困りですか?専門エンジニアがサポートします】
作業を行うユーザーに、必要な権限が付与されているか確認します。
管理者権限(AdministratorAccess)をお持ちの場合は、個別の設定は不要です。
管理者権限がない場合は、以下2つの権限セットが必要です。
・リソース参照用(AWS管理ポリシー)
スキャン時に各AWSサービスの設定値を読み取るため、AWS管理ポリシーの ReadOnlyAccess を付与します。
・IaCジェネレーター操作用(インラインポリシー等)
IaCジェネレーターの機能(スキャン、テンプレート生成など)を実行するために必要な最小限の権限です。
以下のJSONを使用してポリシーを作成し、付与してください。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ResourceScanningOperations",
"Effect":"Allow",
"Action":[
"cloudformation:DescribeResourceScan",
"cloudformation:GetResource",
"cloudformation:ListResources",
"cloudformation:ListResourceScanRelatedResources",
"cloudformation:ListResourceScanResources",
"cloudformation:ListResourceScans",
"cloudformation:ListTypes",
"cloudformation:StartResourceScan"
],
"Resource":"*"
},
{
"Sid":"TemplateGeneration",
"Effect":"Allow",
"Action":[
"cloudformation:CreateGeneratedTemplate",
"cloudformation:DeleteGeneratedTemplate",
"cloudformation:DescribeGeneratedTemplate",
"cloudformation:GetResource",
"cloudformation:GetGeneratedTemplate",
"cloudformation:ListGeneratedTemplates",
"cloudformation:UpdateGeneratedTemplate"
],
"Resource":"*"
}
]
}※IaCジェネレーターの利用に必要な権限の最新情報については、AWS公式ドキュメントも併せてご参照ください。
ここからは具体的な手順になります。
使い方としては、以下のステップで完了します。
1.リソースのスキャン
2.テンプレートの作成とリソースの追加
1.対象リソースが存在するリージョンを選択した状態で、マネジメントコンソールから CloudFormation を開きます。
2.左側のメニューから[IaCジェネレーター]をクリックします。
3.[新しいスキャンを開始]のプルダウンから[すべてのリソースをスキャン]をクリックします。
※「特定のリソースをスキャン」という選択肢もありますが、手動で指定すると関連リソースを見落とす可能性があるため、今回は構成全体を俯瞰しやすい「すべてのリソースをスキャン(フルスキャン)」を実施しました。
ただし、パスワードやシークレット情報などの「書き込み専用プロパティ」や、IaC未対応のリソースは取得できない点にご注意ください。
4.ステータスが[完了]となることを確認します。
通常数分程度ですが、リソース数によっては長くかかる場合もあります。
画面をリロードして進捗を確認してください。
1.[テンプレートを作成]をクリックします。
2.[新しいテンプレートから開始]を選択し、以下を入力します。
a.テンプレート名:任意の名前
b.削除ポリシー:保持/削除
c.置換ポリシー:保持/削除
【補足:削除・置換ポリシーの使い分けシーン】
1.削除ポリシーとは
スタックそのものを削除した際や、テンプレートのコードからそのリソースの記述を消して更新(デプロイ)した際に、AWS上の実際のリソースをどう処理するかを決める設定です。
2.置換ポリシーとは
スタックの設定値を更新した際、リソースの「置換(作り直し)」が発生した場合に、古い方のリソースをどう処理するかを決める設定です。
IaCジェネレーターでテンプレートを作成する際、これらのポリシーは「既存リソースを今後どのように運用したいか」によって以下のように使い分けます。
・保持(Retain)を選ぶシーン
今回のように「構成確認・調査だけが目的」の場合や、「既存リソースをCloudFormationの管理下に置くが、誤ってスタックを削除した際に本番リソースまで消えてしまうのを防ぎたい(保護したい)場合」に選択します。
・削除(Delete)を選ぶシーン
既存リソースのライフサイクルを完全にCloudFormationへ委ね、「今後はスタックを削除したら、実環境のリソースも一緒に削除されるようにしたい場合」に選択します。
不要になったら丸ごと消したい検証環境や、一時的なリソースの移行などに適しています。
今回はあくまで構成確認が目的であり、万が一このテンプレートをスタックとして誤って展開・削除してしまった場合でも実際の稼働リソースを保護するため、「保持(Retain)」を選択しています。
3.[スキャンしたリソースを追加]画面で、フィルターを利用して出力したいリソースを選択、[テンプレートに追加]をクリックします。
※すでにコード化されているものなどは、一覧に表示されていても選択できないようになっています。
4.[関連リソースを追加]画面で依存リソースが提案されるため、必要に応じて追加してください。
5.作成内容を確認し、[テンプレートを作成]をクリックします。
6.テンプレートが作成されたことを確認します。
無事にテンプレートが作成されたら、構成調査を開始します。
1.[テンプレートの定義]タブで表示言語(YAMLまたはJSON)を指定し、[ダウンロード]をクリックします。
※スキャン結果は30日間で失効し自動消去される仕様のため 、早めにテンプレート化してダウンロードしておくことをオススメします。
2.ダウンロードしたファイルをVS Codeなどで開き、設定値を確認します。
【構成調査の具体例】
出力されたファイルを見ると、以下のような項目が1つのファイルで俯瞰できます。
・RDSインスタンスの DBInstanceClass(インスタンスサイズ)や EngineVersion(バージョン情報)
・紐づいているサブネットのIDや、適用されている VPCSecurityGroups のID群。
・自動バックアップの保持期間や、マルチAZ化の有無など。
今までマネジメントコンソールで「RDSの画面」→「VPCの画面」→「EC2のセキュリティグループの画面」と遷移して調べていたものが、テキストの検索機能だけで確認できるようになります。
ーーーーーーーーーーーーーーーーーーーーーーーーー
【AWSの設定でお困りですか?専門エンジニアがサポートします】
今回は、CloudFormationのIaCジェネレーターを活用して、既存環境にあるリソースの設定情報を安全かつ効率的に取得してみました。
IaCジェネレーターは、インフラをコード化したいという場面だけでなく、既存構成の調査・可視化においても便利なツールだと実感しました。
設定値を探し回る時間を大幅に削減できるので、環境移行や引継ぎ案件などでぜひ活用してみてください!
著者プロフィール
K.A(AWSエンジニア)
🏅保有資格
・AWS Certified Cloud Practitioner
・AWS Certified Solutions Architect - Associate
・AWS Certified SysOps Administrator - Associate
・Snowflake SnowPro Core
不動産業界のインフラ構築プロジェクトに約半年間従事。AWSエンジニアとして設計からテストまでを一貫して担当。現在は同環境の運用保守や、セキュリティ強化・構成改善の提案などを実施し、お客様の安定したシステム運用を支援している。