如何使用Python 2.7在AWS Lambda中编写hello world示例?

时间:2016-03-18 05:22:06

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

我完全被AWS中的文档搞糊涂了。

我尝试了什么

  1. 使用us-west-2
  2. 区域注册AWS账户
  3. 创建了一个名为helloworld的Lambda函数
  4. enter image description here

    1. 在里面创建了一个名为hello_world的处理程序。
    2. enter image description here

      1. 所选操作>配置测试事件>选择的共同> Hello World
      2. enter image description here

        1. 按测试,我收到以下错误消息:

          下面的区域显示了函数执行返回的结果。 {   “errorMessage”:“模块'helloworld'中的语法错误” }

        2. enter image description here

          START RequestId: f71b8c46-ecc8-11e5-91b6-c55c85fd12cb Version: $LATEST
          Syntax error in module 'helloworld': invalid syntax (helloworld.py, line 1)
          
          END RequestId: f71b8c46-ecc8-11e5-91b6-c55c85fd12cb
          REPORT RequestId: f71b8c46-ecc8-11e5-91b6-c55c85fd12cb  Duration: 0.29 ms   Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 10 MB  
          

          enter image description here

          我想要的是什么

          我只想成功执行python hello world,所以我知道我应该在哪里观察输出以及如何运行脚本。

          更新

          我已将代码更改为

          def print_something(entry, second_entry):
              print str(entry)
              print str(second_entry)
              return str(second_entry)
          

          并且执行得当。

          这就是我所看到的:

          START RequestId: 33bf2a83-ecda-11e5-bdcd-2de843a18bed Version: $LATEST
          {u'key3': u'value3', u'key2': u'value2', u'key1': u'value1'}
          <__main__.LambdaContext object at 0x7f66d1848990>
          END RequestId: 33bf2a83-ecda-11e5-bdcd-2de843a18bed
          

          究竟是什么LamdaContext对象出现在第二个参数中?

3 个答案:

答案 0 :(得分:2)

两个问题:

  1. 错误地定义了python函数

  2. Lambda的主处理程序需要2个参数

  3. 答案:

    def hello_world(event_data, lambda_config):
        print "hello world"
    

    有关主处理程序参数的更多信息,请阅读http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html

    摘录:

    在Python中创建处理函数时,请使用以下一般语法结构。

    def handler_name(event, context): 
        ...
        return some_value
    

    在语法中,请注意以下内容:

    • event - AWS Lambda使用此参数将事件数据传递给处理程序。此参数通常是Python dict类型。它也可以是list,str,int,float或NoneType类型。
    • context - AWS Lambda使用此参数向处理程序提供运行时信息。此参数属于LambdaContext类型。
    • 可选地,处理程序可以返回值。返回值的作用取决于调用Lambda函数时使用的调用类型: 如果使用RequestResponse调用类型(同步执行),AWS Lambda会将Python函数调用的结果返回给调用Lambda函数的客户端(在对响应请求的HTTP响应中,序列化为JSON)。例如,AWS Lambda控制台使用RequestResponse调用类型,因此当您使用控制台测试调用该函数时,控制台将显示返回的值。 如果处理程序未返回任何内容,则AWS Lambda将返回null。 如果使用事件调用类型(异步执行),则会丢弃该值。

答案 1 :(得分:1)

将您的python语法更改为

def event_handler(event,context):
    message = "hello{0}".format(event['world'])
return mesaage 

这里的事件总是像字典类型对象 和Context是lambda context

答案 2 :(得分:0)

对于python函数:

def helloworld(): print "helloworld"

然后,在配置中你应该使用“helloworld”作为lambda处理程序。