【问题标题】:Add a Condition that gets attributes from a custom resource添加从自定义资源获取属性的条件
【发布时间】:2018-08-21 22:57:39
【问题描述】:

我有一个创建 EBS 卷的 CFT。然后我有第二个 CFT 将卷附加到实例。我使用运行 lambda 的自定义资源来查找 EbsVolumeId 和 InstanceId

这 2 个 CFT 是 jenkins 管道的一部分,使用 CFT 创建 EBS 卷的剧本可能会被跳过,因此没有 EbsVolumeId 可供参考。

所以在附加 EBS 卷的 CFT 中,我尝试添加一个 Condition

Resources:
  MountPoint:
    Type: AWS::EC2::VolumeAttachment
    Condition: AttachEBS
    Properties:
      InstanceId: !GetAtt SCSHelper.InstanceId
      VolumeId: !GetAtt SCSHelper.EbsVolumeId

自定义资源的样子

SCSHelper:
  Type: Custom::SCSHelper

所以我必须在资源之前定义条件:

Conditions:
  AttachEBS: !Not [!Equals http:// !GetAtt SCSHelper.EbsVolumeId , None ]

问题是条件失败:

调用 CreateStack 操作时发生错误(ValidationError):模板格式错误:未解决的依赖项https://forums.aws.amazon.com/。无法在模板的Conditions块中引用资源调用CreateStack操作时发生错误(ValidationError):模板格式错误:未解析的依赖项https://forums.aws.amazon.com/

因此,SCSHelper.EbsVolumeId 属性似乎不适用于该条件。

有没有办法使这项工作或有更好的方法来有条件地运行附加 EBS 卷的 CFT?

提前谢谢...

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    Conditions 文档的重要部分是这个

    参数

    定义您要在条件中评估的输入值。条件将根据这些输入参数的值得出真或假。

    CloudFormation 中的条件可以仅基于参数。它们不能考虑动态资源值,因为这些值在编译时是未知的。

    【讨论】:

    • 感谢杰米的回复。是的,这就是我的错觉。我的管理人员希望我创建 2 个单独的 CFT。一个用于创建 EBS 卷,另一个用于执行附件。您能想出一种方法,我可以从 CREATE 堆栈中获取 InstanceId 和 VolumeId 并将其传递给 ATTACH 堆栈吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2021-05-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多