amazon-web-services - 为什么我需要 AWS CloudFormation 中的额外元素来插值变量
问题描述
我正在尝试使用以下命令将用户数据传递给在 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 ,它会将 !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 变量?
解决方案
这样做会不会更容易:
UserData:
Fn::Base64: !Sub |
#!/bin/bash -xe
echo "${someVar}" > /tmp/some-content
基本上没有必要使用Join
和受苦。使用!Sub |
起来痛苦得多。该代码更具可读性并且更易于管理。
推荐阅读
- python - Django Celery:函数仅在 True While 循环中运行一次
- flutter - 在 appbar 上更新时,Flutter 脚手架更新了整个页面
- c# - '无法将'System.String'类型的对象转换为'System.Windows.Controls.ComboBoxItem
- r - 是否有可以梳理 .csv 文件并将该电子表格中列出的选定文件移动到新文件夹的 R 函数?
- codeigniter - Community-auth Codeigniter 3 - 随机似乎丢失会话变量
- c++ - ADL 未找到模板化的自由函数
- ruby-on-rails - 部分可以是特定于控制器的吗?
- python - Python/Tkinter - 如何创建一个窗口的无限副本?
- ios - UITableViewRowAction 动作在滑动而不是点击时触发
- reactjs - 在一对多关系中,有没有办法通过子属性过滤父对象?