MeWrite Docs

AWS CloudFormation: ROLLBACK_COMPLETE

CloudFormationスタック作成に失敗してロールバックした場合のエラー

概要

AWS CloudFormationでスタック作成中にエラーが発生し、すべてのリソースがロールバックされた状態を示すステータスです。

エラーメッセージ

Stack [my-stack] is in ROLLBACK_COMPLETE state and can not be updated.

または

CREATE_FAILED - Resource handler returned message: "..."

原因

  1. テンプレートエラー: YAML/JSON構文エラーや参照エラー
  2. リソース作成失敗: IAM権限不足やリソース制限
  3. 依存関係エラー: リソース間の依存順序が不正
  4. パラメータエラー: 必須パラメータの不足や不正な値

解決策

1. 失敗原因を確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# スタックイベントを確認
aws cloudformation describe-stack-events \
  --stack-name my-stack \
  --query 'StackEvents[?ResourceStatus==`CREATE_FAILED`]'

# 詳細なエラーメッセージ
aws cloudformation describe-stack-events \
  --stack-name my-stack \
  --query 'StackEvents[*].[LogicalResourceId,ResourceStatus,ResourceStatusReason]' \
  --output table

2. ROLLBACK_COMPLETEスタックを削除

1
2
3
4
5
# ロールバック完了したスタックは更新できないため削除
aws cloudformation delete-stack --stack-name my-stack

# 削除を待機
aws cloudformation wait stack-delete-complete --stack-name my-stack

3. テンプレートの検証

1
2
3
4
5
6
7
8
9
# テンプレート構文を検証
aws cloudformation validate-template --template-body file://template.yaml

# SAMテンプレートの検証
sam validate --lint

# cfn-lintでより詳細なチェック
pip install cfn-lint
cfn-lint template.yaml

4. 依存関係の修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 明示的な依存関係を設定
Resources:
  MyLambdaFunction:
    Type: AWS::Lambda::Function
    DependsOn: MyRole  # ロール作成後に実行
    Properties:
      Role: !GetAtt MyRole.Arn
      # ...

  MyRole:
    Type: AWS::IAM::Role
    Properties:
      # ...

5. ロールバック無効化(デバッグ用)

1
2
3
4
5
6
7
8
# スタック作成時にロールバックを無効化
aws cloudformation create-stack \
  --stack-name my-stack \
  --template-body file://template.yaml \
  --disable-rollback

# 失敗したリソースを調査後、手動で削除
aws cloudformation delete-stack --stack-name my-stack

6. Change Set で事前確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Change Setを作成
aws cloudformation create-change-set \
  --stack-name my-stack \
  --template-body file://template.yaml \
  --change-set-name my-changes

# Change Setの内容を確認
aws cloudformation describe-change-set \
  --stack-name my-stack \
  --change-set-name my-changes

7. よくあるエラーの修正

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# エラー: 循環参照
# 悪い例
Resources:
  A:
    DependsOn: B
  B:
    DependsOn: A  # 循環参照!

# エラー: S3バケット名の重複
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-unique-bucket-name  # グローバルで一意が必要

# 良い例: 名前を自動生成
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    # BucketNameを省略すると自動生成

8. IAM権限の確認

1
2
3
4
5
# スタック作成に必要な権限
Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    # 必要な権限: lambda:CreateFunction, iam:PassRole
1
2
3
4
# 現在のIAM権限を確認
aws iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::123456789012:user/myuser \
  --action-names cloudformation:CreateStack lambda:CreateFunction

9. ネストされたスタックのエラー

1
2
3
# ネストされたスタックのイベントを確認
aws cloudformation describe-stack-events \
  --stack-name arn:aws:cloudformation:region:account:stack/nested-stack-id

10. CloudFormation Drift Detection

1
2
3
4
5
6
# ドリフト検出を開始
aws cloudformation detect-stack-drift --stack-name my-stack

# ドリフトステータスを確認
aws cloudformation describe-stack-resource-drifts \
  --stack-name my-stack

よくある間違い

  • S3バケット名やIAMロール名がグローバルで重複
  • Lambdaのランタイムバージョンが古い
  • VPCサブネットのCIDRが重複
  • DeletionPolicyを設定せずに置換が発生するリソースを更新

AWS の他のエラー

最終更新: 2025-12-09