2016-01-06 216 views
8

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

有谁知道这是可能的吗?如果是,如何? 我无法找到任何有关它。

在此先感谢

回答

3

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

+0

将这些参数存储在S3中是一个绝妙的主意。不知道为什么它不会出现在我的脑海里:-)谢谢。 – sengbatz

0

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

0

另一个选择,如果你有自动部署或配置项,就是用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部署。

0

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

System.getenv("VAR_NAME")