问题描述
我有一个带有 efs 文件系统和实例启动配置的 cloudformation 模板。我需要在 UserData 脚本中引用 efs 文件系统 ID,因为我想在启动时挂载 efs。我已经像这样用 echo ${!Ref EFSFileSystem}
试过了:
EFSFileSystem:
Type: AWS::EFS::FileSystem
Properties:
...
InstanceLc:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
...
UserData:
Fn::Base64: !Sub |
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
aws s3 cp s3://aws-cloudinit/install.sh - | bash
echo ${!Ref EFSFileSystem}
/var/lib/cloud/instance/scripts/part-001: line 4: ${Ref EFSFileSystem}: bad substitution
我找到了一些示例(例如 https://github.com/awslabs/aws-cloudformation-templates/blob/master/community/services/EFS/efs_with_automount_to_ec2.json),但我无法将它们应用于我的 UserData 构造。
在 UserData 中导入 efs 文件系统 ID 的正确语法是什么?
解决方法
您已经在字符串上有一个 !Sub
,因此您只需要执行 ${!Ref EFSFileSystem}
而不是 ${EFSFileSystem}
。这将替换为资源的默认输出,在本例中为 Id
。