Jestem nowy w cloudformation aws; Zastanawiam się, czy ktoś zna o sposobie usunięcia stosu, gdy po prostu nie usunie. Nie powiedzie się z tym błędem:

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

Ten błąd zwykle dzieje się, gdy próbuję usunąć zagnieżdżone stos dziecka, zamiast najpierw rozpocząć stosowanie stosu macierzystego. Czy jest jakiś sposób, aby usunąć zagnieżdżonego stosu, jeśli przypadkowo usunięłem stos macierzystego?

33
pelican 9 luty 2018, 18:46

6 odpowiedzi

Najlepsza odpowiedź

Miałem ten problem kilka razy. Rozwiązanie jest nieco hackiem. W twoim przypadku musisz stworzyć nową rolę o nazwie CloudFormationRole-NestedCFN-CodePipeline. Kiedy tworzysz tę rolę, prawdopodobnie będziesz musiał wybrać usługę CloudFormation, gdy poprosi Cię o Wybierz usługę, która wykorzysta tę rolę , a następnie dołączyć polisy uprawnień . Po utworzeniu roli, spróbuj ponownie usunąć stos.
Niektóre z nich jest gra odgadywania, ponieważ musisz wybrać właściwy zasób (I.E. AWS Service), który jest "zaufanym podmiotem". W oparciu o nazwę roli, jest cloudformation lub Codepipeline.

Po usunięciu stosu cloudformation możesz usunąć rolę, którą właśnie stworzyłeś.

Powodem, dla którego otrzymasz ten błąd, jest to, że prawdopodobnie usuniesz stos cloudformation stos, który ma rolę, która jest używana przez stos, który próbujesz usunąć.

Chciałbym, żeby było bardziej eleganckie rozwiązanie od AWS, ale to było moje obejście.

34
Eliran Malka 12 listopad 2018, 15:40

Mam ten sam problem, a jedynym sposobem na usunięcie stosu używał AWS CLI i wykonując następujące polecenie:

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

Pamiętaj, aby użyć innej roli z wystarczającą ilością uprawnień.

37
Juan Camilo Zapata 16 luty 2018, 07:21

Niestety nie ma sposobu, aby wymusić usunięcie stosu CF.

Kilka rzeczy, które możesz spróbować:

  1. Usuń konfliktowe zasoby ręcznie, a następnie ponownie inicjuj usunięcie stosu.
  2. Usuń konfliktowy zasób z szablonu CF i zaktualizuj z nim stos.
0
Victor 9 luty 2018, 21:45

W moim przypadku usunęłem rurociąg, który stworzył stos (y) i usunęła rolę używaną przez stos.

Opcja 1) Rola w górę innego rurociągu z stosu rurociągu, a następnie "zaktualizuj" stos, którego nie można usunąć, ale powiedz mu, aby użyć nowej roli utworzonej przez rurociąg. Następnie usuń stos (nawet jeśli aktualizacja nie powiedzie się, nowa rola jest nadal w grze, a możesz usunąć).

Opcja 2) Utwórz rolę pasującą do roli, jaką usunięto rolę (w moim przypadku było jak poniżej), a następnie aktualizuj stos przy użyciu tej roli, a następnie usuń.

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:
            - "*" 

Potem mogą być inne naprawy!

0
Robbie 26 sierpień 2018, 13:30

Łatwy sposób rozwiązania tego problemu jest użycie zestawu zmian. Następujące kroki mogą być przestrzegane

  1. Stwórz rolę z odpowiednimi prawami
  2. Wybierz stos chcesz usunąć i utwórz zestaw zmian
  3. W zestawie Zmień użyj istniejącego szablonu, poruszaj się przez Kreatora, ale zmień rolę IAM, której używa
  4. Następnie utwórz i wykonaj zestaw zmian.

Następnie odpowiednio usunąć stos

0
hynespm 21 grudzień 2018, 14:23

Dotyczy to ogólnie w przypadku zagnieżdżonych stosów. Po prostu stwórz rolę o tej samej nazwie i przyznaj pełne uprawnienia dostępu do roli. W tej mocy uprawnień Rola będzie mogła usunąć stos. Usuń rolę po udanej usunięciu stosu

0
Anmol 4 wrzesień 2019, 11:55