web-dev-qa-db-ja.com

cfnスタックを削除できません。ロールが無効であるか、引き受けることができません

AWSクラウドフォーメーションは初めてです。スタックが削除されないときに強制的に削除する方法を知っている人がいるかどうか疑問に思っています。このエラーで失敗します:

Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed

このエラーは通常、最初に親スタックを削除して開始するのではなく、ネストされた子スタックを削除しようとしたときに発生します。誤って親スタックを削除した場合、ネストされたスタックを削除する方法はありますか?

14
pelican

この問題は何度かありました。解決策はちょっとしたハックです。あなたの場合、CloudFormationRole-NestedCFN-CodePipelineという名前の新しいロールを作成する必要があります。このロールを作成するとき、このロールを使用するサービスを選択してください、そして許可ポリシーを添付する)を要求するときに、CloudFormationサービスを選択する必要があります。。ロールが作成されたら、スタックを再度削除してください。
「信頼できるエンティティ」である適切なリソース(AWSサービス)を選択する必要があるため、これのいくつかは推測ゲームです。ロール名に基づいて、CloudFormationまたはCodePipelineのいずれかです。

CloudFormationスタックを削除した後、作成したIAMロールを削除できます。

このエラーが発生する理由は、おそらく、削除しようとしているスタックで使用されているIAMロールを持つCloudFormationスタックを削除したためです。

AWSからよりエレガントなソリューションがあればいいのにと思いますが、これは私の回避策でした。

26
Paul Duvall

同じ問題が発生し、スタックを削除する唯一の方法は、AWS CLIを使用して次のコマンドを実行することでした。

aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack

十分な権限を持つ別のロールを使用してください。

25

残念ながら、CFスタックを強制的に削除する方法はありません。

あなたが試すことができるいくつかのこと:

  1. 競合するリソースを手動で削除してから、スタックの削除を再開してください。
  2. CFテンプレートから競合するリソースを削除し、それでスタックを更新します。
0
Victor

私の場合、スタックを作成したパイプラインを削除し、これによりスタックが使用するロールを削除しました。

オプション1)パイプラインスタックから別のパイプラインをロールアップし、削除できないスタックを「更新」しますが、パイプラインによって作成された新しいロールを使用するように指示します。次に、スタックを削除します(更新が失敗した場合でも、新しい役割はまだ有効です。削除できます)。

オプション2)削除したロール(私の場合は以下のとおり)に一致するロールを作成し、このロールを使用してスタックを更新してから削除します。

CloudformationServiceRole:
  Type: AWS::IAM::Role
  Properties:
    AssumeRolePolicyDocument:
      Statement:
      - Action:
        - sts:AssumeRole
        Effect: Allow
        Principal:
          Service:
          - cloudformation.amazonaws.com
      Version: '2012-10-17'
    Path: "/"
    Policies:
      - PolicyName: DeployCloudformationStack
        PolicyDocument:
          Version: '2012-10-17'
          Statement:
          - Resource: "*"
            Effect: Allow
            Action:
            - "*" 

その後、他の修理が必要になる場合があります!

0
Robbie

この問題を解決する簡単な方法は、変更セットを使用することです。次の手順に従うことができます

  1. 適切な権限を持つロールを作成します
  2. 削除するスタックを選択し、変更セットを作成します
  3. 変更セットで、既存のテンプレートを使用し、ウィザードをナビゲートしますが、使用するIAMロールを変更します
  4. 次に、変更セットを作成して実行します。

その後、それに応じてスタックを削除できます

0
hynespm

これは通常、ネストされたスタックの場合に発生します。同じ名前のロールを作成し、ロールへの完全な管理者アクセス許可を付与するだけです。この権限により、ロールはスタックを削除できます。スタックが正常に削除された後、ロールを削除します

0
Anmol