AWS EB部署Node.js应用已配置环境变量仍无法读取求GUI解决方案
- 我使用GUI操作,不熟悉也从未用过AWS CLI,是程序开发新手,这是我第一次部署到AWS。
- Stack Overflow上很多解决方案都用到CLI,但我需要的是GUI方案。
程序需要使用环境变量,我已经在EB中设置了环境变量,但程序仍然无法正常运行(环境变量已设置成功,没有跳转报错)。我已经被这个问题卡了2天,谷歌搜索、查阅文档都没能解决。
- CodePipeline实现持续部署(对接GitHub v2)
- EB作为应用运行环境,使用Node 10.x版本
注:CodePipeline部署流程运行正常无报错
所有流程看起来都正常,但网站访问返回502错误。
事件报错信息:100.0 % of the requests are erroring with HTTP 4xx. Insufficient request rate (12.0 requests/min) to determine application health.
常规报错
---------------------------------------- /var/log/web.stdout.log ---------------------------------------- Sep 17 10:15:57 ip-172-31-14-49 web: throw new TypeError('JwtStrategy requires a secret or key'); Sep 17 10:15:57 ip-172-31-14-49 web: ^ Sep 17 10:15:57 ip-172-31-14-49 web: TypeError: JwtStrategy requires a secret or key
偶现报错
---------------------------------------- /var/log/nginx/error.log ---------------------------------------- 2021/09/17 15:55:34 [error] 9567#9567: *5385 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.35.193, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "172.31.14.49"
config/passport 对应代码如下:
let jwtOptions = {} jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken() jwtOptions.secretOrKey = process.env.TOKEN_SECRET
我已在EB和EC2控制台中完成TOKEN_SECRET环境变量配置,事件记录显示环境变量已经设置成功,没有任何报错信息。但实际运行时程序仍然无法成功读取process.env.TOKEN_SECRET。
注:配置界面为中文,因区域设置问题无法切换为英文展示。
- 重启EB环境
打开AWS Elastic Beanstalk控制台,进入对应应用的环境页面,点击右上角的操作下拉菜单,选择重启环境,等待重启完成后再测试访问。
原因:部分场景下EB设置环境变量后没有自动触发应用进程重载,重启环境可以保证新的环境变量被Node进程正确加载。
检查CodePipeline部署配置
打开CodePipeline控制台,进入对应流水线的编辑页面,检查部署阶段的EB配置是否勾选了保留现有环境变量,避免部署时覆盖你已经配置好的环境变量。添加环境变量检测代码验证加载情况
在应用启动入口最开头添加如下日志打印代码:
console.log('TOKEN_SECRET加载结果:', process.env.TOKEN_SECRET)
修改后提交到GitHub触发自动部署,部署完成后在EB控制台的日志页面下载web.stdout.log,查看打印结果确认TOKEN_SECRET是否真的被加载。
- 确认EB平台版本兼容性
你使用的是Node 10.x版本,在EB控制台的配置->平台页面确认当前使用的平台版本是否兼容Node 10.x,如果是旧版Amazon Linux AMI,点击更新切换到兼容的平台版本后重新部署即可。
内容的提问来源于stack exchange,提问作者JHIH-LEI

