首页 > 解决方案 > AWS CloudFormation:仅在角色不存在时创建角色

问题描述

我们使用 Jenkins 来自动化我们的 EC 部署。

在第一次成功部署后,后续部署失败,因为 CF 抱怨我们尝试在 CF 模板中创建的角色已经存在。

在文档中发现如果角色资源被命名,这些更新是不可能的,我尝试删除名称,并收到与尝试创建角色的 Jenkins 用户相关的权限失败。

条件文档没有向我清楚地描述检查角色是否已经存在的条件语法应该是什么。

我曾想过使用 aws cli 在单独的 Jenkins 步骤中删除该角色,但被现有实例的行为吓跑了iam delete-role(这些应该是不间断的更新)。

如何根据角色是否已存在有条件地创建角色资源?

我发现的最接近的问题是this,但它与 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

标签: amazon-web-servicesaws-sdkamazon-cloudformation

解决方案


推荐阅读