在AWS实例中设置环境变量

21

我使用这个资源在EC2上用terraform创建了一个AMI:

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

用户数据执行一个shell脚本,安装Java JRE:

  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连接到实例并执行export命令,它就可以正常工作。

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

2个回答

26

使用export命令只会将那些变量设置为当前shell和从该shell启动的所有进程。它不是一个持久性的设置。任何您希望长期生效的内容都应在/etc/environment中设置。

例如,在用户数据中:

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

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

/etc/environment文件中可能已经定义了PATH变量,如果您要将其他路径附加到它上面,就需要适当地覆盖它。

有关设置环境变量的详细信息,请参阅此答案


3
如果您正在使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接