【问题标题】:How can I create an AWS Cloud Formation condition for creating a new SSM Parameter if not already created?如果尚未创建新的 SSM 参数,如何创建 AWS Cloud Formation 条件?
【发布时间】:2019-09-16 12:34:07
【问题描述】:

任何人在 Cloudformation 模板中使用 SSM 参数存储参数“如果之前未创建则创建或不执行任何操作”的条件,例如 Cloudformation 中的条件?

我尝试了很多方法,但没有运气。也搜索它,但没有真正的工作。

我在真正的 CF 模板之外尝试过的最简单的方法是这样,但不起作用。 AWS Cloudformation 部分没有详细的文档。

Parameters:
  DAXClusterUrl:
      Description: DAX Cluster Url
      Type: 'AWS::SSM::Parameter::Name<String>'
      Default: "/testservice/dev/AWS_CLUSTER_ENDPOINT"

Conditions:
  CreateDAXClusterUrlParameter: !Not [!Equals ["", !Ref DAXClusterUrl]]

Resources:
  DAXClusterUrlParameter:
    Condition: CreateDAXClusterUrlParameter
    Type: 'AWS::SSM::Parameter'
    Properties:
      Name: "/testservice/dev/AWS_CLUSTER_ENDPOINT"
      Type: String
      Value: "TestURL"
      Description: '-'

【问题讨论】:

  • 在我看来,这不是一个理想的场景,但您可以使用自定义资源执行此操作,允许您编写少量自定义代码来测试 SSM 参数是否存在并成为无操作。

标签: amazon-web-services parameters amazon-cloudformation ssm


【解决方案1】:

我认为你在这里尝试做的事情是不可能的。 Cloudformation 仅允许非常有限类型的编程和条件语句。

根据您要达到的目标,您可以使用一些解决方法。例如,如果您尝试这样做,因为您需要多次部署堆栈,您可以手动创建 SSM 参数或在不同的 CFN 堆栈中创建并将其作为参数传递。或者,如果您要在单独的 CFN 堆栈中创建 SSM 参数,则可以将其添加到模板的 outputs 部分,然后使用 Fn::ImportValue 方法创建跨堆栈引用。

编辑

在 OP 发表评论后,我进行了更多研究,虽然评论中的链接仅强制参数值以某种方式,dynamic references 可能会在此处提供解决方案。

【讨论】:

  • 当我查看 AWS 文档时,似乎可以检查 SSM 参数是否存在。还有一个条件选项使用了类似的东西,但文档不足以进行 SSM 参数检查。这里提到:docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…
  • 我在原始答案中添加了一个编辑。动态引用可能是您需要的。您提供的链接似乎仅对强制参数的值为某种类型有用。
猜你喜欢
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2018-04-26
  • 2018-12-07
  • 2018-08-25
  • 2022-01-23
相关资源
最近更新 更多