【问题标题】:CloudFormation: Create a resource only in specific stageCloudFormation:仅在特定阶段创建资源
【发布时间】:2018-04-16 20:42:32
【问题描述】:

我有一个用例,我只想在测试环境中使用云形成创建资源。我正在尝试使用条件来实现这一点,但它失败了。

 Resources: 
    TestClientRole:
        Type: AWS::IAM::Role
        Condition: NotProdStage
        Properties:
          AssumeRolePolicyDocument:
            Statement:
            - Action: <>
              Effect: Allow
              <>
            Version: '2012-10-17'
          RoleName:
            "some-test-role"

它在非生产阶段工作正常,但因“模板的资源块中未解决的资源依赖项 [TestClientRole]”而失败

如何让云形成忽略生产阶段的资源?

【问题讨论】:

  • 你是说它对非产品工作正常,但在 prod 阶段显示特定错误?即NotProdStage何时为假?
  • @JohnRotenstein 正确
  • 我还看到资源 TestClientRole 块中的模板存在一些问题。您确定此资源已正确创建吗?例如:AssumeRolePolicyDocument 中缺少 Principal 标签。传递给Action 的值是错误的。

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

错误消息表明您的 CloudFormation 模板中的其他位置依赖于 TestClientRole

问题是角色没有在 Prod 环境中创建,但其他资源说它依赖于正在创建的角色。

解决方案:删除模板中其他地方引用TestClientRole的依赖项。

事实上,实际上需要依赖项是非常罕见的,因为 CloudFormation 根据资源之间的引用计算出正确的构建顺序。唯一需要依赖的时候是当您特别希望一件事在另一件事开始之前完成构建,例如让应用服务器等待数据库服务器准备好。通常,除非您有不明显的特殊需求,否则不要使用它们。

【讨论】:

    猜你喜欢
    • 2021-04-06
    • 2020-03-29
    • 2017-06-12
    • 2017-07-15
    • 2019-06-13
    • 2019-07-26
    • 2018-02-20
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多