Ava*_*adh 0 amazon-web-services aws-cloudformation amazon-efs
我正在以云形式创建 EFS 卷并尝试在启动模板的用户数据中引用它。
我尝试了在 CF 中使用 Ref 的多种语法,但每次都遇到相同的错误。我实际上想用 EFS 做不同的事情,但发布的示例代码也不起作用
ClusterFileSystem:
Type: AWS::EFS::FileSystem
Properties:
Encrypted: true
ClusterLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
DependsOn: ClusterFileSystem
Properties:
LaunchTemplateName: !Sub ${AWS::StackName}
LaunchTemplateData:
ImageId: !Ref 'AMIId'
SecurityGroupIds: [!GetAtt 'ClusterSecurityGroup.GroupId']
InstanceType: !Ref 'InstanceType'
BlockDeviceMappings:
- DeviceName: "/dev/xvda"
Ebs:
VolumeSize: "40"
VolumeType: "gp2"
Encrypted: true
- DeviceName: "/dev/xvdcz"
Ebs:
VolumeSize: "22"
VolumeType: "gp2"
Encrypted: true
IamInstanceProfile:
Name: 'ECSHostInstanceProfile'
Monitoring:
Enabled: true
KeyName: !Ref 'Key'
UserData:
Fn::Base64: !Sub |
#!/bin/bash -xe
function setup-efs () {
{
mkdir -p /ecs-resources/${AWS::StackName}/environment
EFS_FILE_SYSTEM_ID= !Ref ClusterFileSystem
echo ${EFS_FILE_SYSTEM_ID} >> /tmp/xyz.txt
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误 -
模板格式错误:模板Resources块中未解析的资源依赖[EFS_FILE_SYSTEM_ID]调用UpdateStack操作时发生错误(ValidationError):模板格式错误:模板Resources块中未解析的资源依赖[EFS_FILE_SYSTEM_ID]-》
您不需要!Ref
在 a 中使用!Sub
,为了获得相同的行为,您只需在 中引用逻辑 ID 即可${}
。
此外,您需要转义 ,${EFS_FILE_SYSTEM_ID}
因为您想逐字打印它而不是!Sub
解析它。
UserData:
Fn::Base64: !Sub |
#!/bin/bash -xe
function setup-efs () {
{
mkdir -p /ecs-resources/${AWS::StackName}/environment
EFS_FILE_SYSTEM_ID= ${ClusterFileSystem}
echo ${!EFS_FILE_SYSTEM_ID} >> /tmp/xyz.txt
}
Run Code Online (Sandbox Code Playgroud)
请注意对${ClusterFileSystem}
和!
花括号内的引用EFS_FILE_SYSTEM_ID
。
如果您指定模板参数名称或资源逻辑 ID,例如 ${InstanceTypeParameter},AWS CloudFormation 将返回与您使用 Ref 内部函数相同的值。如果您指定资源属性,例如 ${MyInstance.PublicIp},AWS CloudFormation 返回的值与您使用 Fn::GetAtt 内部函数时的值相同。
和
要按字面写出美元符号和花括号 (${}),请在左花括号后添加感叹号 (!),例如 ${!Literal}。AWS CloudFormation 将此文本解析为 ${Literal}。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html
归档时间: |
|
查看次数: |
1128 次 |
最近记录: |