我使用以下资源在 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定义环境变量?
使用导出命令仅为当前 shell 以及从该 shell 启动的所有进程设置这些变量。这不是一个持久的设置。您希望永久保存的任何内容都应在
/etc/environment
中设置。
例如在用户数据中:
echo "JAVA_HOME=/jdk1.8.0_172" >> /etc/environment
这会将
JAVA_HOME=/jdk1.8.0_172
行添加到该文件中。请注意,您不应在该文件中使用 export
。
PATH
变量可能已在/etc/environment
文件中定义,如果您要向其附加其他路径,则需要适当地覆盖该变量。
这个answer中提供了有关设置环境变量的非常详细的信息。
如果您使用的是 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
要在 AWS 实例中设置环境变量,您可以执行以下操作:
就是这样!您的环境变量现在应该已设置并可以使用。