我知道可以将参数传递给在AWS Lambda上运行的Java程序以进行测试。但是如果这个程序被调度事件调用,我不知道如何传递这些参数。
有人知道这是否可行?如果有,怎么样? 我无法找到任何相关信息。
提前致谢
答案 0 :(得分:5)
您可以间接传递参数,例如将参数存储在s3或dynamo db上。在每个预定的周期中,您可以从预定位置读取并将其传递给您的程序。通常,如果我需要使用共享源代码启动多个预定的lambda函数,我将一个文件(任何可读格式)与源代码本身捆绑在一起并在运行期间读取它。 @garnaat是对的,而且目前无法动态启动新的lambda函数,这是一个很大的不便。
答案 1 :(得分:4)
您可以将CloudWatch规则创建为计划,并将目标的输入配置为常量json值:
CloudWatch - >活动 - >规则 - >时间表 - > Targers 强>
将配置输入设置为Сonstant(JSON文本),并在那里传递任何有效的json数据。
在Lambda中,您可以将常量输入作为输入对象访问。
答案 2 :(得分:2)
您可以利用lambda配置中的环境变量。然后,您可以使用以下命令在Java程序中阅读它们:
System.getenv("VAR_NAME")
答案 3 :(得分:0)
目前,创建计划的Lambda函数的唯一方法是通过AWS控制台,并且在调度程序调用时,它不提供任何方法将参数传递给Lambda函数。由于AWS中的调度程序正在调用您的Lambda函数,因此参数传递如何工作并不是很清楚。
答案 4 :(得分:0)
如果您有自动部署或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。