Мы используем Jenkins для автоматизации наших развертываний EC.
Последующие развертывания терпят неудачу после первого начального успешного развертывания, потому что CF жалуется, что роль, которую мы пытаемся создать в нашем шаблоне CF, уже существует.
Обнаружив в документации, что эти обновления невозможны, если ресурс роли назван, я попытался удалить это имя и получил отказ разрешений, связанный с попыткой пользователя Jenkins создать роль.
Документация по условию четко не описывает мне, каким должен быть синтаксис условия, чтобы проверить, существует ли уже роль.
У меня была половина мысли об удалении роли на отдельном шаге Jenkins с помощью aws cli, но меня отпугнуло поведение iam delete-role
и существующих экземпляров (это должны быть непрерывные обновления).
Как я могу условно создать ресурс роли в зависимости от того, существует ли эта роль?
Ближайший вопрос, который я нашел, был это, но он связан с DynamoDB.
Существующий YAML для создания роли (определения политики выше и ниже являются шаблонными):
Resources:
MySESRole:
Type: AWS::IAM::Role
Properties:
RoleName: MySESRole
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action: "sts:AssumeRole"
Principal:
Service: ["ecs-tasks.amazonaws.com", "ecs.amazonaws.com"]
Effect: "Allow"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSESFullAccess
Каждый раз это новый стек.
Это не работает, поскольку имена ролей уникальны. Вы пытались обновить существующий стек.
Я сделал и получил некоторую несвязанную ошибку. Что-то в нашем конвейере, на что я еще не нашел времени, но похоже, что мне придется это сделать. Вы хотите сказать, что я не могу использовать условие для создания ресурса роли, как вы можете использовать с другими ресурсами?
Я не видел такой возможности. у нас никогда не было проблем при обновлении существующего стека облачной информации.
это интересно. спасибо за понимание.
Вы используете стек обновлений? Или запустить CFT как новый стек?