听起来很简单,我想在ec2用户数据脚本中传递我的本地环境变量值。例如,我在本地运行这个:
export PASSWORD=mypassword
printenv PASSWORD
mypassword
然后一旦我ssh到我的ec2并运行
printenv PASSWORD
我应该看到相同的值mypassword
。我还没有找到在用户数据脚本中注入正确代码的方法。如果可以,请帮忙。
这是我的用户数据,我基本上安装了一些包,然后用我想从笔记本电脑上传到我的ec2的密码值对我的保险库进行身份验证。我只是不想硬编码mypassword
在我的用户数据脚本。(甚至不确定是否可行?)
# User Data for ASG
user_data = <<EOF
#!/usr/bin/env bash
set -x -v
exec > >(tee -i user-data.log 2>/dev/console) 2>&1
# Install latest AWS cli
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update
# Install VAULT cli
sudo wget https://releases.hashicorp.com/vault/1.8.2/vault_1.8.2_linux_amd64.zip
sudo unzip vault_1.8.2_linux_amd64.zip
sudo mv vault /usr/local/bin/vault
sudo chmod +x /usr/local/bin/vault
vault -v
# Vault env var
export VAULT_ADDR=https://myvault.test
export VAULT_SKIP_VERIFY=true
export VAULT_NAMESPACE=test
# Vault login (to authenticate to vault must export local value of $PASSWORD
export VAULT_PASSWORD=$PASSWORD
vault login -namespace=test -method=userpass username=myuser password=$VAULT_PASSWORD
user_data
运行在root
用户下,有自己的shell环境. 因此,当您将ssh
作为ec2-user
或ubuntu
添加到实例时,您就拥有了自己的、不同的本地环境。这就是为什么你的export
不工作的原因。
user_data
必须修改ssh用户(通常是ec2-user
或ubuntu
)的.bashrc
(取决于操作系统)。只有这样,你的导出才会生效。
我能够通过为我的敏感数据设置本地所有变量并将它们定义为我的variables.tf
来使其工作。然后在用户数据字段导出TF变量名。见下文:
本地设置
export TF_VAR_password=password
TF代码—>variables.tf
variable "password" {
description = "my password"
type = string
default = ""
}
现在在我的应用程序用户数据脚本
export MYPASSWORD=${var.password}
瞧:)
这里是网站作为参考点——>https://learn.hashicorp.com/tutorials/terraform/sensitive-variables?in=terraform/0-14(查找使用环境变量设置值)