Elastic Beanstalk Procfile 中不可用的环境变量

Posted

技术标签:

【中文标题】Elastic Beanstalk Procfile 中不可用的环境变量【英文标题】:Environment variables not available in Elastic Beanstalk Procfile 【发布时间】:2017-05-23 05:01:24 【问题描述】:

我正在尝试通过 Procfile 使用环境变量配置我的弹性 beanstalk java 应用程序,如下所示:

web: ./bin/myservice -Dhttp.port=$PORT

PORT 环境变量是通过 AWS ui 在我的 beanstalk 环境的“软件配置”屏幕中设置的。

但是,日志表明 $PORT 没有被插值:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.whatever.services.myservice.Main.main(Main.scala)
Caused by: java.lang.NumberFormatException: For input string: "$PORT"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:569)

将选项传递给我的应用程序的正确方法是什么?

编辑 1: 这似乎是与我用来创建项目的可分发 zip 存档的 sbt 本机打包程序插件有关的问题。它生成的 bin/myservice 文件按字面意思解释 $PORT 并将其传递给应用程序。

【问题讨论】:

我正在尝试做同样的事情,在我的 Procfile 中使用一个变量。你有过什么运气吗? 【参考方案1】:

尝试从Procfile 中删除-Dhttp.port=$PORT

在“软件配置”的 ui 中,尝试将变量 JAVA_OPTS 设置为 -Dhttp.port=9000(将 9000 替换为您的 nginx 代理使用的任何端口——我相信 5000 是默认值)。

【讨论】:

我在 beanstalk UI 中没有看到“JVM 命令行选项”。 您是否使用 Java SE 容器类型 @novon? docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 是的,这就是我选择的。 对不起——这曾经是一个选项——它仍然出现在我的旧应用程序中。我刚刚创建了一个新环境,但它不再存在。看看新方法是什么。 啊——好的。您可以使用软件配置进行设置,但尝试使用此键 => val: JAVA_OPTS: "-Dhttp.port=9000" (将 9000 替换为任何值)。 LMK 如果可行,我将更新答案以反映最新机制。

以上是关于Elastic Beanstalk Procfile 中不可用的环境变量的主要内容,如果未能解决你的问题,请参考以下文章

elastic-beanstalk http请求超时

在 AWS Elastic Beanstalk 和 EKS 上部署了一个 laravel 应用程序 相同的数据库 RDS 为啥在 Elastic Beanstalk 中获得快速响应

AWS Elastic Beanstalk CLI 安装错误

text codepipeline + Elastic Beanstalk

text AWS Elastic Beanstalk

[AWS] Elastic Beanstalk