如何将参数传递给 AWS Lambda 函数
How to pass parameters to AWS Lambda function
我知道可以将参数传递给 AWS Lambda 上的 Java 程序 运行 以对其进行测试。但是如果这个程序被调度事件调用,我不知道如何传递这些参数。
有人知道这是否可行吗?如果是,如何?
我找不到任何相关信息。
提前致谢
目前,创建计划的 Lambda 函数的唯一方法是通过 AWS 控制台,它不提供任何方法在计划程序调用 Lambda 函数时将参数传递给它。由于 AWS 中的调度程序正在调用您的 Lambda 函数,因此我不太清楚参数传递的工作原理。
您可以间接传递参数,例如将参数存储在 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 配置中的环境变量。然后你在你的 Java 程序上阅读它们:
System.getenv("VAR_NAME")
您可以创建 CloudWatch 规则作为计划并将目标的输入配置为常量 json 值:
CloudWatch -> 事件 -> 规则 -> 计划 -> Targers
将配置输入设置为Сonstant(JSON文本)并在那里传递任何有效的json-data。
在 Lambda 中,您可以将常量输入作为输入对象访问。
我知道可以将参数传递给 AWS Lambda 上的 Java 程序 运行 以对其进行测试。但是如果这个程序被调度事件调用,我不知道如何传递这些参数。
有人知道这是否可行吗?如果是,如何? 我找不到任何相关信息。
提前致谢
目前,创建计划的 Lambda 函数的唯一方法是通过 AWS 控制台,它不提供任何方法在计划程序调用 Lambda 函数时将参数传递给它。由于 AWS 中的调度程序正在调用您的 Lambda 函数,因此我不太清楚参数传递的工作原理。
您可以间接传递参数,例如将参数存储在 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 配置中的环境变量。然后你在你的 Java 程序上阅读它们:
System.getenv("VAR_NAME")
您可以创建 CloudWatch 规则作为计划并将目标的输入配置为常量 json 值:
CloudWatch -> 事件 -> 规则 -> 计划 -> Targers
将配置输入设置为Сonstant(JSON文本)并在那里传递任何有效的json-data。
在 Lambda 中,您可以将常量输入作为输入对象访问。