如何将参数传递给AWS Lambda函数

时间:2016-01-06 12:35:37

标签: java amazon-web-services aws-lambda

我知道可以将参数传递给在AWS Lambda上运行的Java程序以进行测试。但是如果这个程序被调度事件调用,我不知道如何传递这些参数。

有人知道这是否可行?如果有,怎么样? 我无法找到任何相关信息。

提前致谢

5 个答案:

答案 0 :(得分:5)

您可以间接传递参数,例如将参数存储在s3或dynamo db上。在每个预定的周期中,您可以从预定位置读取并将其传递给您的程序。通常,如果我需要使用共享源代码启动多个预定的lambda函数,我将一个文件(任何可读格式)与源代码本身捆绑在一起并在运行期间读取它。 @garnaat是对的,而且目前无法动态启动新的lambda函数,这是一个很大的不便。

答案 1 :(得分:4)

您可以将CloudWatch规则创建为计划,并将目标的输入配置为常量json值:

CloudWatch - >活动 - >规则 - >时间表 - > Targers

配置输入设置为Сonstant(JSON文本),并在那里传递任何有效的json数据。

在Lambda中,您可以将常量输入作为输入对象访问。

AWS CloudWatch screenshot

答案 2 :(得分:2)

您可以利用lambda配置中的环境变量。然后,您可以使用以下命令在Java程序中阅读它们:

System.getenv("VAR_NAME")

答案 3 :(得分:0)

目前,创建计划的Lambda函数的唯一方法是通过AWS控制台,并且在调度程序调用时,它不提供任何方法将参数传递给Lambda函数。由于AWS中的调度程序正在调用您的Lambda函数,因此参数传递如何工作并不是很清楚。

答案 4 :(得分:0)

如果您有自动部署或CI,则另一个选项是使用maven(或类似)和属性在构建时插入参数。 我想它不需要从S3读取文件就更加优化了吗?

例如,您可以config/env1/app.propertiesconfig/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。