【问题标题】:Introduce a condition on a custom resource in CloudFormation在 CloudFormation 中为自定义资源引入条件
【发布时间】:2020-05-29 10:23:26
【问题描述】:

另一位工程师在 prod 堆栈中的 AMIFInder 自定义资源中引入了部署日期参数,这意味着我们无法在不尝试重新创建 EC2 实例的情况下更新开发堆栈。

是否可以完全基于DeployDate 参数引入一个条件,以便我仍然可以为两个堆栈使用一个模板?

FindAmiResource:
    Type: 'Custom::FindAmiFunction'
    Properties:
      ServiceToken:
        Fn::ImportValue:
          !Sub 
          - cfn:find-ami:${AWSAccount}:arn
          - {AWSAccount: !FindInMap [AccountIDMap, Accounts, !Ref "AWS::AccountId"]}
      AmiName: 'Corp_w2016_Std-*'
      AmiOwner: '9999999999999'
      DeployDate: !Ref AMIDeployDate

【问题讨论】:

  • 我在理解您的要求时遇到了一些问题。您不想在您的开发环境中提供DeployDate 吗?
  • 嗨,杰森,没错

标签: amazon-cloudformation aws-cloudformation-custom-resource


【解决方案1】:

假设您有一些信息要关闭(例如已知的 AccountId 或堆栈中的参数),您可以创建一个 condition 将堆栈定义为 dev。然后你可以使用'Fn::If'函数,像这样:

FindAmiResource:
    Type: 'Custom::FindAmiFunction'
    Properties:
      ServiceToken:
        Fn::ImportValue:
          !Sub 
          - cfn:find-ami:${AWSAccount}:arn
          - {AWSAccount: !FindInMap [AccountIDMap, Accounts, !Ref "AWS::AccountId"]}
      AmiName: 'Corp_w2016_Std-*'
      AmiOwner: '9999999999999'
      DeployDate: 
        Fn::If:
          - DevCondition
          - !Ref AWS::NoValue
          - !Ref AMIDeployDate

【讨论】:

  • 不幸的是没有工作 - 仍然尝试在 dev 中创建一个新实例但最终回滚,因为该卷已附加到现有实例。
  • 是的,我显然不知道自定义资源在做什么,以及将其设置为空(即不设置)的影响究竟是什么。我只是提供了一种方法。我鼓励你让制作自定义资源的人改变它的工作方式。
  • 承包商早已不在。该值用于更新 ASG 的 AMI,但这不是 Auto Scaling 组的一部分。感谢您的帮助。
  • 如果未指定 DeployDate,您能否更改该代码以不这样做?
猜你喜欢
  • 1970-01-01
  • 2019-08-02
  • 2018-03-02
  • 2018-03-10
  • 2020-10-09
  • 2019-05-13
  • 2021-04-06
  • 2019-05-08
  • 2022-01-23
相关资源
最近更新 更多