如何向AWS Lambda函数传递参数

15

我知道在AWS Lambda上运行Java程序时可以传递参数以进行测试。但是,如果该程序由计划事件调用,我不知道如何传递这些参数。

有人知道是否有可能吗?如果是,怎么做? 我没有找到任何相关信息。

提前感谢。

5个回答

10

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

CloudWatch -> 事件 -> 规则 -> 计划任务 -> 目标

配置输入设置为常量(JSON文本),并传递任何有效的json数据。

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

AWS CloudWatch截图


1
你好,如果我传递了自定义输入(例如JSON格式),该如何在lambda内部访问输入中的元素?运行时使用的是Python 3.7。输入是通过事件(event)还是上下文(context)传递的,还是有其他对象可用于访问其中的元素?我已经卡在这里一段时间了,非常感谢您的帮助。谢谢。 - Umang Mistry
@UmangMistry 你好!我的 .net 函数处理程序看起来像这样:public async Task FunctionHandler(Request request, ILambdaContext context),其中 Request 只是一个类,它使用 JsonProperty 序列化其字段 - 所以基本上输入是一个 json 值。我相信它对应于 py 处理程序中的事件 def my_handler(event, context)。 - Sergey Nikitin

10

您可以利用Lambda配置中的环境变量。然后,您可以通过以下方式在Java程序中读取它们:

System.getenv("VAR_NAME")

5
您可以间接地传递参数,例如将它们存储在S3或DynamoDB上。在每个计划的周期内,您可以从预定位置读取并将其传递给程序。通常情况下,如果我需要启动多个共享源代码的计划Lambda函数,我会将一个文件(任何可读格式)与源代码捆绑在一起,并在运行时读取它。
@garnaat是正确的,此外,目前不可能动态启动新的Lambda函数,这是一个很大的不便。

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 props.load(ClassLoader.getSystemResourceAsStream("app.properties"));

在你的自动化中,你可以构建mvn install -P en1来获取你要部署的Jar。


-2

目前,创建定时Lambda函数的唯一方法是通过AWS控制台,但它不提供在调度程序调用时向Lambda函数传递参数的任何方式。由于您的Lambda函数是由AWS调度程序调用的,我对参数传递的工作原理并不清楚。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接