web-dev-qa-db-fra.com

Impossible de supprimer la pile cfn, le rôle n'est pas valide ou ne peut être assumé

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?

6
pelican

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. 

15
Paul Duvall

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.

10
Juan Camilo Zapata

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!

0
Robbie

Un moyen plus simple de résoudre ce problème consiste à utiliser un ensemble de modifications. Les étapes suivantes peuvent être suivies

  1. Créer un rôle avec les droits corrects
  2. Sélectionnez la pile que vous souhaitez supprimer et créez un ensemble de modifications.
  3. Dans le jeu de modifications, utilisez le modèle existant, naviguez dans l’assistant mais modifiez le rôle IAM qu’il utilise.
  4. Puis créez et exécutez le jeu de modifications.

Ensuite, vous pouvez supprimer la pile en conséquence

0
hynespm