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

如何将AWS Parameter Store密钥导入EC2上的Docker化Node.js应用

无需修改代码从AWS Parameter Store注入环境变量到Docker化Node.js应用

下面是几种不用修改应用代码的实现方案:

方案1:启动容器前通过AWS CLI拉取参数并注入

这种方式直接在启动容器的脚本里拉取参数,然后通过docker run的-e参数传递环境变量:

前提条件

  • 给EC2实例关联的IAM角色添加AmazonSSMReadOnlyAccess权限(或更精细的权限,比如仅允许ssm:GetParameter操作目标参数)
  • EC2实例已安装AWS CLI(如果未安装,可通过sudo yum install aws-cli(Amazon Linux)或sudo apt install awscli(Ubuntu)安装)

实现步骤

编写启动脚本(比如start-app.sh):

#!/bin/bash

# 从Parameter Store拉取需要的参数(--with-decryption用于解密SecureString类型的参数)
DB_PASSWORD=$(aws ssm get-parameter --name "/myapp/db/password" --with-decryption --query "Parameter.Value" --output text)
API_KEY=$(aws ssm get-parameter --name "/myapp/api/key" --with-decryption --query "Parameter.Value" --output text)

# 启动Docker容器,将参数作为环境变量传入
docker run -d \
  -e DB_PASSWORD="$DB_PASSWORD" \
  -e API_KEY="$API_KEY" \
  --restart unless-stopped \
  --name my-node-app \
  my-node-app-image:latest

给脚本添加执行权限:chmod +x start-app.sh,运行脚本即可启动应用。

方案2:生成.env文件后用Docker Compose启动

如果需要管理较多环境变量,可先将参数写入.env文件,再通过Docker Compose加载:

前提条件

同方案1,确保EC2实例有SSM访问权限且安装了AWS CLI和Docker Compose。

实现步骤

  1. 编写生成.env文件的脚本(比如generate-env.sh):
#!/bin/bash

# 清空旧的.env文件(可选)
> .env

# 写入参数到.env文件
echo "DB_PASSWORD=$(aws ssm get-parameter --name "/myapp/db/password" --with-decryption --query "Parameter.Value" --output text)" >> .env
echo "API_KEY=$(aws ssm get-parameter --name "/myapp/api/key" --with-decryption --query "Parameter.Value" --output text)" >> .env
echo "REDIS_URL=$(aws ssm get-parameter --name "/myapp/redis/url" --query "Parameter.Value" --output text)" >> .env
  1. 创建docker-compose.yml文件:
version: '3.8'
services:
  node-app:
    image: my-node-app-image:latest
    env_file:
      - .env
    restart: unless-stopped
    container_name: my-node-app
  1. 执行脚本生成.env文件,再启动容器:
chmod +x generate-env.sh
./generate-env.sh
docker-compose up -d

方案3:迁移到ECS(可选)

如果后续考虑容器编排,AWS ECS支持在任务定义中直接引用Parameter Store参数作为环境变量,无需任何代码修改:

  • 在ECS任务定义的环境变量配置中,选择Value from parameter store,输入参数的ARN或名称
  • ECS会自动拉取参数并注入到容器中,前提是ECS任务执行角色有SSM访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:03:09