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



听起来很简单,我想在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-userubuntu添加到实例时,您就拥有了自己的、不同的本地环境。这就是为什么你的export不工作的原因。

要纠正这个问题,您的user_data必须修改ssh用户(通常是ec2-userubuntu)的.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(查找使用环境变量设置值)

最新更新