【问题标题】:Set environment variables in an AWS instance在 AWS 实例中设置环境变量
【发布时间】:2018-11-13 01:33:34
【问题描述】:

我使用以下资源在 EC2 中使用 terraform 创建了一个AMI:

resource "aws_instance" "devops-demo" {
  ami           = "jnkdjsndjsnfsdj"
  instance_type = "t2.micro"
  key_name      = "demo-devops"
  user_data     = "${file("ops_setup.sh")}"
}

用户数据执行安装 Java JRE 的 shell 脚本

  sudo yum remove java-1.7.0-openjdk -y
  sudo wget -O /opt/server-jre-8u172-linux-x64.tar.gz --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/server-jre-8u172-linux-x64.tar.gz"
  sudo tar xzf /opt/server-jre-8u172-linux-x64.tar.gz
  export JAVA_HOME=/jdk1.8.0_172
  export JRE_HOME=/jdk1.8.0_171/jre
  export PATH=$JAVA_HOME/bin:$PATH

但是所有环境变量都不起作用。但是,如果我通过 ssh 连接到实例并执行导出命令,它就可以正常工作。

有没有办法用 terraform 定义环境变量?

【问题讨论】:

    标签: linux amazon-web-services amazon-ec2 environment-variables terraform


    【解决方案1】:

    使用 export 命令只会为当前 shell 和从该 shell 启动的所有进程设置这些变量。这不是一个持久的设置。任何你想永久化的东西都应该设置在/etc/environment

    例如在用户数据中:

    echo "JAVA_HOME=/jdk1.8.0_172" >> /etc/environment
    

    这会将JAVA_HOME=/jdk1.8.0_172 行添加到该文件中。请注意,您不应在该文件中使用export

    PATH 变量可能已在 /etc/environment 文件中定义,如果您要向其附加其他路径,则需要适当地覆盖它。

    answer 中提供了有关设置环境变量的详细信息。

    【讨论】:

      【解决方案2】:

      如果您使用的是 Amazon Linux 2 AMI 之一,那么 /etc/environment 将不适合您。但是,您可以将环境变量添加到/etc/profile.d/ 的新文件中,这将起作用。你的user_data

      echo "JAVA_HOME=/jdk1.8.0_172" | sudo tee /etc/profile.d/java_setup.sh
      echo "JRE_HOME=/jdk1.8.0_171/jre" | sudo tee -a /etc/profile.d/java_setup.sh
      echo "PATH=$JAVA_HOME/bin:$PATH" | sudo tee -a /etc/profile.d/java_setup.sh
      

      【讨论】: