听起来很简单,我想在我的 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 用户(通常是 .bashrc
或
ec2-user
)的
ubuntu
(或等效内容,具体取决于操作系统)。只有这样您的导出才会生效。
我能够通过在本地为我的敏感数据设置所有变量并将它们定义为我的
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(查找使用环境变量设置值 )
我将发送一段我在用户数据中所做的代码。
#!bin/bash
echo 'export MY_VAR="some value"' >> /home/ubuntu/.bashrc
source /home/ubuntu/.bashrc
如果您的用户通过 ssh 启动某个进程,您将获得这些变量。