【问题标题】:Setting EC2 Environment Variables with CodeDeploy, Parameter Store and PM2使用 CodeDeploy、Parameter Store 和 PM2 设置 EC2 环境变量
【发布时间】:2020-09-18 10:30:46
【问题描述】:

我正在使用 CodeDeploy 将 Node.js 应用程序部署到 EC2。我将凭证存储在 AWS Systems Manager、Parameter Store 中,但是找不到将这些凭证公开给我的应用程序的方法。

我正在使用 PM2 进行流程管理。我可以成功地从目标机器上的 Parameter Store 中检索参数,所以没有权限问题。例如:

aws ssm get-parameters --region us-east-1 --names LOCAL_CACHE_PATH --with-decryption --query Parameters[0].Value`

...成功返回正确的字符串。我尝试在我的applicationStart.sh CodeDeploy 文件中使用它并启动应用程序:

#!/bin/bash
export LOCAL_CACHE_PATH=$(aws ssm get-parameters --region us-east-1 --names LOCAL_CACHE_PATH --with-decryption --query Parameters[0].Value)

pm2 start ecosystem.config.js --env production

LOCAL_CACHE_PATH 在我的应用程序中访问process.env.LOCAL_CACHE_PATH 时返回undefined

因此,环境变量在 applicationStart.sh 脚​​本中可用,但在应用从该脚本启动时未定义。

我正在寻找一种推荐的方法,将 Parameter Store 中的环境变量与 CodeDeploy 结合使用。

我已经阅读了几十篇关于类似主题的帖子,但无法解决。非常感谢任何指导。

【问题讨论】:

  • 确保分配给代码部署的 IAM 角色/用户具有从 SSM 检索参数的必要权限
  • 如前所述,ssm get-parameters 请求成功返回,因此不存在权限问题。

标签: node.js pm2 aws-code-deploy aws-systems-manager


【解决方案1】:

我使用的解决方案是将环境变量写入 .env 文件并在我的应用程序中使用:

afterInstall.sh:

echo LOCAL_CACHE_PATH=$(aws ssm get-parameters --output text --region us-east-1 --names LOCAL_CACHE_PATH --with-decryption --query Parameters[0].Value) >> /home/ubuntu/foo/.env

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多