将我的本地环境变量值传递给我的 ec2 用户数据

Pass my local environment variables values to my ec2 user data

听起来很简单,我想在我的 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_dataroot 用户下运行,它 有自己的 shell 环境 。因此,当您将实例 ssh 作为 ec2-userubuntu 时,您将拥有自己的、不同的本地环境。这就是为什么您的 export 不起作用的原因。

要解决此问题,您的 user_data 必须修改您的 ssh 用户 (通常 ec2-userubuntu)。只有这样您的导出才会生效。

我能够通过在本地为我的敏感数据设置所有变量并将它们定义为我的 variables.tf 来使其工作。然后在我的用户数据字段中,我刚刚导出了 TF var 名称。见下文:

本地设置

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(查找 Set values with environment variables