You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将本地环境变量值传递到EC2的user data脚本中

解决方案

方法1:通过Terraform模板插值直接传入(适合快速实现)

你当前使用的是Terraform的HCL配置定义EC2的user data,按以下步骤修改即可完成需求:

  1. 在你的Terraform代码中新增敏感变量,用于接收本地传入的密码
variable "vault_password" {
  type        = string
  sensitive   = true
  description = "Vault登录密码,从本地环境变量传入"
}
  1. 本地导出环境变量时按照Terraform规则添加TF_VAR_前缀,Terraform会自动读取该值:
export TF_VAR_vault_password=$PASSWORD
  1. 修改你的user_data块,通过模板插值替换变量,同时添加环境变量持久化逻辑,保证SSH登录后也能读取到变量:
# 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

# 持久化PASSWORD变量到全局环境配置,所有用户登录都可读取
echo "export PASSWORD=${var.vault_password}" | sudo tee /etc/profile.d/custom_env.sh
sudo chmod +x /etc/profile.d/custom_env.sh
# 立即加载变量供当前user data脚本使用
source /etc/profile.d/custom_env.sh

# 原有安装逻辑保持不变
# 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
vault login -namespace=test -method=userpass username=myuser password=$PASSWORD
EOF

配置完成后执行terraform apply即可,实例启动后你SSH登录执行printenv PASSWORD就能获取到对应值,变量也会在user data运行时正常生效。

方法2:生产级安全方案(避免密码明文出现在user data中)

方法1会将密码明文写入EC2的user data,有权限访问实例元数据的进程都可读取,生产环境建议使用更安全的方案:

  1. 将PASSWORD值存入AWS Secrets Manager,密钥名称可设置为prod/vault_password
  2. 给EC2实例关联的IAM角色添加该密钥的读取权限
  3. 在user data脚本中通过AWS CLI拉取密钥值再配置环境变量,参考片段如下:
# 从Secrets Manager拉取密码
PASSWORD=$(aws secretsmanager get-secret-value --secret-id prod/vault_password --query SecretString --output text)
# 后续持久化、使用逻辑和方法1完全一致
echo "export PASSWORD=${PASSWORD}" | sudo tee /etc/profile.d/custom_env.sh
source /etc/profile.d/custom_env.sh

内容的提问来源于stack exchange,提问作者Tate_87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:05