微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloudformation中如何将Resource ID导入UserData

如何解决Cloudformation中如何将Resource ID导入UserData

我有一个带有 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。