【问题标题】:Why do I need an extra element in AWS CloudFormation for interpolating variables为什么我需要 AWS CloudFormation 中的额外元素来插值变量
【发布时间】:2020-03-19 00:13:18
【问题描述】:

我正在尝试使用以下方法将用户数据传递给在 Cloudformation 中创建的 EC2 实例:

      UserData: !Base64
        'Fn::Join':
          - ''
          - - |
              #!/bin/bash -xe
              echo '
            - !Ref 'someVar'
            - |
              ' > /tmp/some-content

有效。这是扩展的用户数据(顺便说一句,我也不知道为什么echo ' 后面有一个新行,但这不是主要问题):

#!/bin/bash -xe
echo '
some string passed as parameter' > /tmp/some-content

但如果我从 !Ref 部分中删除 -,它会将 !Ref 视为字符串:

      UserData: !Base64
        'Fn::Join':
          - ''
          - - |
              #!/bin/bash -xe
              echo '
              !Ref 'License'
              ' > /tmp/some-content

这是扩展的用户数据。

#!/bin/bash -xe
echo '
!Ref 'someVar'
' > /tmp/some-content

为什么会这样?这是 cloudformation 内部的东西,仅当 !Ref 变量单独作为列表中的元素时才会扩展?

【问题讨论】:

    标签: amazon-web-services yaml amazon-cloudformation string-interpolation


    【解决方案1】:

    这样做会不会更容易:

      UserData: 
        Fn::Base64: !Sub |
              #!/bin/bash -xe 
              echo "${someVar}" > /tmp/some-content
    

    基本上没有必要使用Join而受苦。使用!Sub |,使用起来会更痛苦。代码可读性更强,也更容易管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2015-08-17
      • 2015-08-24
      • 1970-01-01
      • 2013-07-15
      相关资源
      最近更新 更多