【发布时间】:2016-04-10 13:17:59
【问题描述】:
我知道可以将参数传递给在 AWS Lambda 上运行的 Java 程序以对其进行测试。但是如果这个程序被调度事件调用,我不知道如何传递这些参数。
有人知道这是否可能吗?如果是,如何? 我找不到任何关于它的信息。
提前致谢
【问题讨论】:
标签: java amazon-web-services aws-lambda
我知道可以将参数传递给在 AWS Lambda 上运行的 Java 程序以对其进行测试。但是如果这个程序被调度事件调用,我不知道如何传递这些参数。
有人知道这是否可能吗?如果是,如何? 我找不到任何关于它的信息。
提前致谢
【问题讨论】:
标签: java amazon-web-services aws-lambda
【讨论】:
您可以利用 lambda 配置中的环境变量。然后你在你的 Java 程序上阅读它们:
System.getenv("VAR_NAME")
【讨论】:
您可以间接传递参数,例如将参数存储在 s3 或 dynamo db 上。在每个预定的周期中,您可以从预定位置读取并将其传递给您的程序。通常,如果我需要使用共享源代码启动多个计划的 lambda 函数,我会将一个文件(任何可读格式)与源代码本身捆绑在一起,并在运行期间读取它。 @garnaat 是对的,而且目前无法动态启动新的 lambda 函数,这是一个很大的不便。
【讨论】:
如果您有自动部署或 CI,另一种选择是在构建时使用 maven(或类似)和属性插入您的参数。 我想它会更加优化,因为您不必从 S3 读取文件?
例如你可以有config/env1/app.properties和config/env2/app.properties
您使用 maven 创建加载相应配置的配置文件,例如:
...
<profiles>
<profile>
<id>env1</id>
<build>
<resources>
<resource>
<directory>config/env1</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
<profile>
<id>env2</id>
<build>
<resources>
<resource>
<directory>config/env2</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
</profiles>
...
在你的代码中像往常一样阅读道具props.load(ClassLoader.getSystemResourceAsStream("app.properties"));
在您的自动化中,您可以构建 mvn install -P en1 来部署您的 Jar。
【讨论】:
目前,创建计划的 Lambda 函数的唯一方法是通过 AWS 控制台,它不提供在计划程序调用时将参数传递给 Lambda 函数的任何方法。由于 AWS 中的调度程序正在调用您的 Lambda 函数,所以我不清楚参数传递的工作原理。
【讨论】: