Не удалось удалить стек cfn, роль недействительна или не может быть принята

Я новичок в облачной информации AWS; Мне интересно, если кто-нибудь знает способ принудительно удалить стек, когда он просто не удалит. Сбой с этой ошибкой:

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

Эта ошибка обычно возникает, когда я пытаюсь удалить вложенный дочерний стек вместо того, чтобы начать сначала с удаления родительского стека. Есть ли способ удалить вложенный стек, если я случайно удалил родительский стек?

Ответ 1

У меня была эта проблема несколько раз. Решение немного взломать. В вашем случае вам нужно создать новую роль с именем CloudFormationRole-NestedCFN-CodePipeline. Когда вы создаете эту роль, вам, вероятно, потребуется выбрать службу CloudFormation когда она попросит вас выбрать службу, которая будет использовать эту роль, а затем присоединить политики разрешений. Как только роль будет создана, попробуйте снова удалить стек.
Отчасти это игра в догадки, потому что вам нужно выбрать правильный ресурс (то есть сервис AWS), который является "доверенным объектом". В зависимости от вашей роли, это либо CloudFormation, либо CodePipeline.

После удаления стека CloudFormation вы можете удалить только что созданную роль IAM.

Причина, по которой вы получаете эту ошибку, заключается в том, что вы, вероятно, удалили стек CloudFormation с ролью IAM, который используется стеком, который вы пытаетесь удалить.

Хотелось бы, чтобы было более элегантное решение от AWS, но это был мой обходной путь.

Ответ 2

У меня такая же проблема, и единственный способ удалить стек - использовать AWS CLI и выполнить следующую команду:

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

просто не забудьте использовать другую роль с достаточными разрешениями.

Ответ 3

К сожалению, нет возможности принудительно удалить стек CF.

Пара вещей, которые вы можете попробовать:

  1. Удалите конфликтующий ресурс вручную, а затем повторно инициируйте удаление стека.
  2. Удалите конфликтующий ресурс из шаблона CF и обновите его с помощью Stack.

Ответ 4

В моем случае я удалил конвейер, который создал стек (ы), и это удалило роль, используемую стеком.

Вариант 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:
            - "*" 

После этого могут быть другие ремонты!

Ответ 5

Более простой способ решить эту проблему - использовать набор изменений. Следующие шаги могут быть выполнены

  1. Создать роль с правильными правами
  2. Выберите стек, который вы хотите удалить, и создайте набор изменений
  3. В наборе изменений используйте существующий шаблон, перемещайтесь по мастеру, но изменяйте роль IAM, которую он использует
  4. Затем создайте и выполните набор изменений.

Тогда вы можете удалить стек соответственно

Ответ 6

Это обычно происходит в случае вложенных стеков. Просто создайте роль с тем же именем и предоставьте ей полное право доступа администратора. С этим разрешением роль сможет удалить стек. Удалить роль после успешного удаления стека