やあ、インフラエンジニアの道へようこそ。
AWS CloudFormation(CFn)という強力な武器を手に取った君は、すでに「手動運用」という名の泥沼から抜け出す第一歩を踏み出している。
今日は、多くのエンジニアが運用フェーズに入ってから頭を抱える「クロススタック参照の罠」について、現場の知見を詰め込んだ講義をしよう。これを知っているだけで、君のインフラ設計は一気にプロの領域へ達する。
—
1. なぜ「クロススタック参照」が必要なのか?
大規模なシステムを構築する際、全てのリソースを一つの巨大なテンプレート(モノリススタック)に詰め込むのは悪手だ。変更の影響範囲が広がりすぎて、デプロイのたびに心臓が止まる思いをすることになる。
だからこそ、「ネットワーク層」「データベース層」「アプリケーション層」と責務ごとにスタックを分割するのが定石だ。その際、各スタック間で「VPCのID」や「サブネットのID」を共有するために使われるのが `Export` と `ImportValue` だ。
2. 禁断の果実:Export/ImportValueの罠
`!Export` を使って値を公開し、`!ImportValue` で参照する。一見便利だが、これには「スタック削除を阻害する」という致命的な制約がある。
- 罠の正体: `Export` されている値を使っているスタックが存在する限り、元のスタックを削除(あるいはExportの変更)ができない。
- 現場の悲劇: 「ネットワーク設定を変えたい」と思っても、依存先を一つずつ探して書き換えないとエラーで弾かれる。これが積み重なると、インフラは「誰も触れない聖域」と化す。
—
3. 【実践】循環依存を回避するSSMパラメータストア活用術
この「密結合」を断ち切り、疎結合にするための黄金パターンが 「AWS Systems Manager (SSM) パラメータストア経由での参照」 だ。
ステップ1:値をSSMに格納する(供給側)
リソースを作成したら、そのIDをSSMに書き込む。
Resources:
MyVpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
# VPC IDをSSMに保存する
VpcIdParameter:
Type: AWS::SSM::Parameter
Properties:
Name: /my-app/network/vpc-id # 一意なパス名
Type: String
Value: !Ref MyVpc
ステップ2:SSMから値を取得する(利用側)
利用側では `ImportValue` を使わず、動的にSSMを読み込む。
Resources:
MySubnet:
Type: AWS::EC2::Subnet
Properties:
# 直接参照せず、SSMから動的に取得
VpcId: ‘{{resolve:ssm:/my-app/network/vpc-id:1}}’
CidrBlock: 10.0.1.0/24
なぜこれが最強なのか?
SSMパラメータは「値の置き場所」に過ぎない。もしスタックを削除したければ、SSMの値を消すか、スタックの参照を外せばいいだけだ。CloudFormationによる「スタック間ロック」が発生しないため、運用が驚くほど柔軟になる。
—
4. 初心者がまずやるべき「HelloWorld」な構成管理
まずは以下の手順で、疎結合の美しさを体感してほしい。
1. 環境準備: AWS CLIをインストールし、`aws configure` で認証を通す。
2. テンプレート作成: 上記の「SSMへの書き込み」を含むスタックを作成する。
3. 動作確認: AWSコンソールで「Systems Manager」を開き、「パラメータストア」に値が書き込まれていることを確認する。
4. 参照確認: 別のテンプレートから `{{resolve:ssm:…}}` を使い、正常にリソースが作成できるか試す。
これができれば、君はもう「スタックの依存関係」に怯える必要はない。
—
5. 先輩からのアドバイス:依存関係を可視化せよ
どれだけ技術が進化しても、「どのスタックが何に依存しているか」という依存グラフ(Dependency Graph)をドキュメント化する習慣だけは捨てないでほしい。
- 下層スタック: ネットワーク、共通IAMロール
- 中間スタック: DB、キャッシュ
- 上層スタック: アプリケーション、API
「下から積み上げ、上から壊す」。この原則を守りつつ、SSMによる疎結合を組み合わせれば、君の構築するインフラは非常に堅牢で、かつ変更に強いものになるはずだ。
—
まとめ
- `Export/ImportValue` は強力だが、依存の鎖で身動きが取れなくなる。
- SSMパラメータストアを「疎結合な橋渡し」として活用せよ。
- 常に「削除可能なインフラ」を意識して設計せよ。
インフラコードは、一度書いて終わりじゃない。育てていくものだ。この設計思想をマスターして、毎日の作業を劇的に楽にしていこう。何か詰まったら、いつでも聞きに来てくれ。応援しているよ。