amazon-cloudformation - AWS CloudFormation GetAtt 在 Fn::Sub 下不起作用
问题描述
我有以下 EC2 用户数据:
UserData: !Base64
Fn::Sub: |
#PROVISIONER_PEER_PASSWORD_INPUT=${AWS::AccountId} ${AWS::StackId} ${AWS::Region}
#PROVISIONER_PEER_PASSWORD=${pDatabasePassword}
#PROVISIONER_SHARED_UNIQUE_ID_INPUT=${AWS::AccountId} ${AWS::StackId} ${AWS::Region}
#PROVISIONER_CFN_RESOURCE=Machine
#PROVISIONER_CFN_STACK=${AWS::StackName}
#PROVISIONER_CFN_REGION=${AWS::Region}
#PROVISIONER_DATA_DISK=/dev/xvdc
#PROVISIONER_TIER=frontend
#PROVISIONER_PEER_ADDRESS=
Fn::GetAtt:
- rDatabaseCluster
- Endpoint.Address
#PROVISIONER_APP_PASSWORD=${pApplicationPassword}
用户数据代码被破坏的地方就在这里。
#PROVISIONER_PEER_ADDRESS=
Fn::GetAtt:
- rDatabaseCluster
- Endpoint.Address
Fn::GetAtt 没有被执行/解决。堆栈创建成功后用户数据代码的结果,如下所示:
#PROVISIONER_PEER_PASSWORD_INPUT=11111333393 arn:aws:cloudformation:us-east-1:171602812093:stack/daxz/16085e70-5b2b-11ea-91e9-122e54527a47 us-east-1
#PROVISIONER_PEER_PASSWORD=Jane85
#PROVISIONER_SHARED_UNIQUE_ID_INPUT=11111333393 arn:aws:cloudformation:us-east-1:171602812093:stack/daxz/16085e70-5b2b-11ea-91e9-122e54527a47 us-east-1
#PROVISIONER_CFN_RESOURCE=Machine
#PROVISIONER_CFN_STACK=daxz
#PROVISIONER_CFN_REGION=us-east-1
#PROVISIONER_DATA_DISK=/dev/xvdc
#PROVISIONER_TIER=frontend
#PROVISIONER_PEER_ADDRESS=
Fn::GetAtt:
- rDatabaseCluster
- Endpoint.Address
#PROVISIONER_APP_PASSWORD=Jane85
如您所见,代码Fn::GetAtt
按原样进入用户数据,但未解析为实际值。
#PROVISIONER_PEER_ADDRESS=
Fn::GetAtt:
- rDatabaseCluster
- Endpoint.Address
我如何Fn::GetAtt
在 下工作Fn::Sub
?或者获得正确价值的最佳方法是什么???
解决方案
您也可以像这样使用 GetAtt 内联:
!Sub "... ${rDatabaseCluster.Endpoint.Address}"
推荐阅读
- reactjs - 从 React js 中的服务器端位置下载 zip 文件夹中的多个文件
- javascript - setState 不会立即更新,最好的替代方法是什么?
- node.js - 为什么我在控制台中未定义?
- django - 如何检查 Django 中是否存在特定记录?
- javascript - 为什么 Vue 认为字符串操作是响应式数据属性?
- ruby - 合并多个大哈希
- flutter - Dart/Flutter 中 Intl 包的 NumberFormat 的反直觉结果
- javascript - 获取包含变量的数据
- xml - 无法打开 jmeter 5.2.1 - 无法将 org.apache.jorphan.collections.ListedHashTree 转换为 org.apache.jmeter.testelement.TestElement
- google-maps - Flutter:从列表视图中滚动排除一个对象