こんにちは。クラウドインフラの世界へようこそ。
AWS CloudFormation(以下CFn)は、単なる「設定ファイル」ではありません。あなたのインフラを「宣言的」に定義し、コードとして管理するための強力な武器です。しかし、多くのエンジニアがその道中で「ロールバック地獄」という名の洗礼を受け、挫折していきます。
今日は、伝説的な現場で培った「壊れない、止めない、悩ませない」ためのCFn運用術を伝授しましょう。これをマスターすれば、毎日のインフラ作業が劇的に楽になりますよ。
—
1. ロールバック地獄に陥った時の原因特定と対応手順
CFnを使っていると、デプロイが失敗して「Rollback complete」と表示され、リソースが消えていく絶望的な状況に遭遇します。
原因の真実:
ほとんどの場合、原因は「リソースの依存関係」や「プロパティの整合性」です。特にVPCのCIDR重複や、IAMロールの権限不足が典型的です。
対応の極意:
- 「Disable Rollback」を活用せよ: 開発環境では、スタック作成時に `DisableRollback: true` を設定しましょう。失敗した瞬間にスタックが停止するため、何が失敗したのか、作成途中のリソース状態はどうなっているのかをコンソールでじっくり調査できます。
- イベントタブを信じろ: 「スタック」→「イベント」タブを時系列で追うのが鉄則です。エラーが発生した瞬間のリソースのステータスに必ずヒントがあります。
—
2. 「Resource already exists」エラーの回避方法
「既にそのリソースは存在します」というエラー。これは、手動で作ったリソースとCFnで作ろうとしたリソースが衝突した時に発生します。
解決の切り札:
- ドリフト(Drift)検出: 「スタック」→「アクション」→「ドリフトの検出」を実行してください。IaCの定義と、実際のAWS環境との乖離を可視化できます。
- インポート機能: すでに存在するリソースをCFnの管理下に置きたい場合は、スタックの「リソースのインポート」機能を使いましょう。手動で作ったリソースを壊さずに、CFnの傘下に取り込むことができます。
—
3. 権限不足(IAM)エラーのデバッグ手法
「User is not authorized to perform: cloudformation:CreateStack」など、IAMエラーは心が折れますよね。
デバッグの極意:
- IAM Policy Simulator: AWS公式のツールを使いましょう。どのポリシーが拒否されているのかを即座に特定できます。
- CloudTrailを確認せよ: 権限エラーは全てCloudTrailに記録されます。どのIAMエンティティが、どのAPIを呼び出し、どのポリシーで拒否されたのか。これを追うのが、プロのSREの仕事です。
—
4. エラーを防ぐための事前バリデーション
本番環境に投げてからエラーが出るのは、プロとして避けたいところです。
- `aws cloudformation validate-template`: 構文エラーをコマンドラインで瞬時にチェックできます。
- cfn-lint: これを使わない手はありません。VS Codeの拡張機能としても優秀で、記述の誤りやベストプラクティス違反をリアルタイムで指摘してくれます。
—
はじめてのCFn:HelloWorld(S3バケット作成)
まずは、最もシンプルな「S3バケット」を作成してみましょう。これができれば、インフラ自動化の第一歩を踏み出したことになります。
`template.yaml`
AWSTemplateFormatVersion: ‘2010-09-09’
Description: My First Infrastructure Stack
Resources:
# 論理ID: MyBucket
MyBucket:
Type: ‘AWS::S3::Bucket’
Properties:
# バケット名は世界中でユニークである必要があります
BucketName: !Sub ‘my-unique-bucket-name-${AWS::AccountId}’
AccessControl: Private
デプロイコマンド
テンプレートのバリデーション
aws cloudformation validate-template –template-body file://template.yaml
スタックの作成
aws cloudformation create-stack \
–stack-name my-first-stack \
–template-body file://template.yaml
このコードのポイント:
- `!Sub` を使ってアカウントIDを動的に埋め込んでいます。これにより、環境ごとに名前の衝突を防ぐ工夫をしています。
- 論理ID(`MyBucket`)を定義することで、CFnがリソースのライフサイクルを一元管理できるようになります。
—
最後に:あなたへのアドバイス
インフラの自動化は「失敗を恐れないこと」が最大の近道です。CFnは、何万回失敗しても、何度でも同じ状態を再現できる「冪等性(べきとうせい)」という強力な魔法を持っています。
エラーが出たら、「失敗した」と嘆くのではなく、「インフラの深い知識を得るチャンスが来た」と考えてください。一つひとつ丁寧に紐解いていけば、あなたは必ず、どんな障害も恐れない最強のクラウドエンジニアになれます。
さあ、次はあなたの番です。コードを書いて、世界を構築しましょう。