AWSクラウドフォーメーションは初めてです。スタックが削除されないときに強制的に削除する方法を知っている人がいるかどうか疑問に思っています。このエラーで失敗します:
Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed
このエラーは通常、最初に親スタックを削除して開始するのではなく、ネストされた子スタックを削除しようとしたときに発生します。誤って親スタックを削除した場合、ネストされたスタックを削除する方法はありますか?
この問題は何度かありました。解決策はちょっとしたハックです。あなたの場合、CloudFormationRole-NestedCFN-CodePipeline
という名前の新しいロールを作成する必要があります。このロールを作成するとき、このロールを使用するサービスを選択してください、そして許可ポリシーを添付する)を要求するときに、CloudFormation
サービスを選択する必要があります。。ロールが作成されたら、スタックを再度削除してください。
「信頼できるエンティティ」である適切なリソース(AWSサービス)を選択する必要があるため、これのいくつかは推測ゲームです。ロール名に基づいて、CloudFormationまたはCodePipelineのいずれかです。
CloudFormationスタックを削除した後、作成したIAMロールを削除できます。
このエラーが発生する理由は、おそらく、削除しようとしているスタックで使用されているIAMロールを持つCloudFormationスタックを削除したためです。
AWSからよりエレガントなソリューションがあればいいのにと思いますが、これは私の回避策でした。
同じ問題が発生し、スタックを削除する唯一の方法は、AWS CLIを使用して次のコマンドを実行することでした。
aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack
十分な権限を持つ別のロールを使用してください。
残念ながら、CFスタックを強制的に削除する方法はありません。
あなたが試すことができるいくつかのこと:
私の場合、スタックを作成したパイプラインを削除し、これによりスタックが使用するロールを削除しました。
オプション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:
- "*"
その後、他の修理が必要になる場合があります!
この問題を解決する簡単な方法は、変更セットを使用することです。次の手順に従うことができます
その後、それに応じてスタックを削除できます
これは通常、ネストされたスタックの場合に発生します。同じ名前のロールを作成し、ロールへの完全な管理者アクセス許可を付与するだけです。この権限により、ロールはスタックを削除できます。スタックが正常に削除された後、ロールを削除します