【问题标题】:How to pass parameters to AWS Lambda function如何将参数传递给 AWS Lambda 函数
【发布时间】:2016-04-10 13:17:59
【问题描述】:

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

有人知道这是否可能吗?如果是,如何? 我找不到任何关于它的信息。

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗨,在传递自定义输入(比如在 json 中)之后,如何从 lambda 中的输入访问元素?我使用 Python 3.7 作为运行时。输入是在事件或上下文中传递的,还是有另一个对象可以访问元素?我已经被困在这里很长一段时间了,我们将不胜感激。谢谢
    • @UmangMistry 嗨!我在 .net 中的函数处理程序如下所示: public async Task FunctionHandler(Request request, ILambdaContext context) 其中 Request 只是一个使用 JsonProperty 序列化其字段的类 - 所以基本上输入是一个 json 值。我相信它对应于 py handler def my_handler(event, context) 中的事件
    【解决方案2】:

    您可以利用 lambda 配置中的环境变量。然后你在你的 Java 程序上阅读它们:

    System.getenv("VAR_NAME")
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果您有自动部署或 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。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2017-12-30
            • 2017-12-25
            • 2021-12-13
            • 2016-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多