Linux 在AWS实例中设置环境变量

Linux 在AWS实例中设置环境变量,linux,amazon-web-services,amazon-ec2,environment-variables,terraform,Linux,Amazon Web Services,Amazon Ec2,Environment Variables,Terraform,我使用terraform在EC2中创建了一个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

我使用terraform在EC2中创建了一个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连接到该实例并执行export命令,它就可以正常工作


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

使用export命令仅为当前外壳和从该外壳开始的所有进程设置这些变量。它不是一个持久的设置。任何要永久化的内容都应该在
/etc/environment
中设置

例如,在userdata中:

echo "JAVA_HOME=/jdk1.8.0_172" >> /etc/environment
这将把
JAVA_HOME=/jdk1.8.0_172
行添加到该文件中。注意,您不应该在该文件中使用
export

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

这里有很多关于设置环境变量的细节