Je suis nouveau sur aws cloudformation; Je me demande si quelqu'un connaît un moyen de forcer la suppression d'une pile alors que ce n'est pas le cas. Il échoue avec cette erreur:
Failed to delete stack: Role arn:aws:iam::role/CloudFormationRole-NestedCFN-CodePipeline is invalid or cannot be assumed
Cette erreur se produit généralement lorsque j'essaie de supprimer une pile enfant imbriquée au lieu de commencer par supprimer la pile parent en premier. Est-il possible de supprimer la pile imbriquée si j'ai accidentellement supprimé la pile parente?
J'ai eu ce problème plusieurs fois. La solution est un peu un bidouillage. Dans votre cas, vous devez créer un nouveau rôle nommé CloudFormationRole-NestedCFN-CodePipeline
. Lorsque vous créez ce rôle, vous devrez probablement sélectionner le service CloudFormation
lorsqu'il vous le demandera Choisissez le service qui utilisera ce rôle puis puis Attachez les politiques de permissions . Une fois le rôle créé, essayez à nouveau de supprimer la pile.
C’est en partie une question de devinette, car vous devez choisir la bonne ressource (par exemple, le service AWS) qui est une "entité de confiance". Selon votre nom de rôle, il s’agit de CloudFormation ou de CodePipeline.
Après avoir supprimé la pile CloudFormation, vous pouvez supprimer le rôle IAM que vous venez de créer.
Vous obtenez cette erreur parce que vous avez probablement supprimé une pile CloudFormation ayant un rôle IAM utilisé par la pile que vous tentez de supprimer.
J'aimerais que AWS propose une solution plus élégante, mais c'était ma solution de contournement.
J'ai eu le même problème et le seul moyen de supprimer la pile était d'utiliser l'AWS CLI et d'exécuter la commande suivante:
aws cloudformation delete-stack --role-arn arn:aws:iam::xxxx:role/anyrolewithpermissions --stack-name StuckStack
assurez-vous simplement d'utiliser un autre rôle avec suffisamment d'autorisations.
Dans mon cas, j'ai supprimé le pipeline qui a créé la (les) pile (s), ce qui a supprimé le rôle utilisé par la pile.
Option 1) Mettez en place un autre pipeline de la pile de pipeline, puis "mettez à jour" la pile que vous ne pouvez pas supprimer, mais indiquez-lui d'utiliser le nouveau rôle créé par le pipeline. Supprimez ensuite la pile (même si la mise à jour échoue, le nouveau rôle est toujours en cours et vous pouvez le supprimer).
Option 2) Créez un rôle correspondant au rôle que vous avez supprimé (dans mon cas, c'était comme ci-dessous), puis mettez à jour la pile en utilisant ce rôle, puis supprimez-le.
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:
- "*"
Il se peut qu'il y ait d'autres réparations à faire par la suite!
Un moyen plus simple de résoudre ce problème consiste à utiliser un ensemble de modifications. Les étapes suivantes peuvent être suivies
Ensuite, vous pouvez supprimer la pile en conséquence