Cloudformation 无法识别 UserData 脚本中的 Shell 个变量

Cloudformation Doesn't Recognize Shell Variables in UserData Scripts

我注意到具有 CloudFormation 的 UserData 属性的脚本 运行 无法识别 EC2 实例的 shell 变量。例如,下面的模板部分在配置时不会打印任何值。有什么办法可以解决这个问题吗?

UserData:
  Fn::Base64: !Sub |
    #!/bin/bash
    echo HOME: $HOME
    echo USER: $USER
    echo PATH: $PATH

请注意,执行 cloud-init's User-Data Script 的环境通常不包含 HOMEUSER 变量,因为脚本在 non-login shell.

UserData 中尝试 env 命令以查看可用环境变量的完整列表:

Description: Output shell variables.
Resources:
  Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-9be6f38c # amzn-ami-hvm-2016.09.1.20161221-x86_64-gp2
      InstanceType: m3.medium
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          env

在 Amazon Linux AMI 上(请注意,结果将取决于您使用的 AMI 运行!),我在 Console Output 中得到以下输出:

TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
RUNLEVEL=3
runlevel=3
PWD=/
LANGSH_SOURCED=1
LANG=en_US.UTF-8
PREVLEVEL=N
previous=N
CONSOLETYPE=serial
SHLVL=4
UPSTART_INSTANCE=
UPSTART_EVENTS=runlevel
UPSTART_JOB=rc
_=/bin/env