如何编写我的AWS lambda函数?

时间:2016-07-13 09:23:07

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

我是AWS lambda函数的新手,我正在尝试将现有代码添加到AWS lambda。我现有的代码如下:

import boto3
import slack
import slack.chat
import time
import itertools
from slacker import Slacker

ACCESS_KEY = ""
SECRET_KEY = ""
slack.api_token = ""
slack_channel = "#my_test_channel"

def gather_info_ansible():
           .
           .

def call_snapshot_creater(data):
           .
           . 
def call_snapshot_destroyer(data):
           .
           .
if __name__ == '__main__':
    print "Calling Ansible Box Gather detail Method first!"
    ansible_box_info = gather_info_ansible()

    print "Now Calling the Destroyer of SNAPSHOT!! BEHOLD THIS IS HELL!!"
    call_snapshot_destroyer(ansible_box_info)

    #mapping = {i[0]: [i[1], i[2]] for i in data}
    print "Now Calling the Snapshot Creater!"
    call_snapshot_creater(ansible_box_info)  

现在我尝试在AWS Console上从头开始创建一个lambda函数,如下所示(一个hello world)

from __future__ import print_function

import json


print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    print("test")
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

并且AWS控制台上的示例测试事件是:

{
  "key3": "value3",
  "key2": "value2",
  "key1": "value1"
}

我真的不确定如何将我的代码放在AWS lambda中,如果我甚至在lambda控制台中添加模块并运行它会引发错误:

Unable to import module 'lambda_function': No module named slack

如何解决这个问题并在lambda中导入我的代码?

2 个答案:

答案 0 :(得分:3)

你必须制作一个压缩包,其中包含包含lambda函数的python脚本和你在python脚本中导入的所有模块。在aws上传压缩包。

无论您要导入哪个模块,都必须在zip包中包含该模块。只有这样才能使用import语句。

例如,您的zip包应包含

test_package.zip
|-test.py (script containing the lambda_handler function)
|-boto3(module folder)
|-slack(module folder)
|-slacker(module folder)

答案 1 :(得分:1)

您收到错误,因为AWS lambda没有关于名为slack的模块的任何信息。

模块是一组存储在计算机上某处的.py文件。 对于lambda,您应该通过创建部署包来导入所有库。

这是另一个描述类似案例的问题,并提供了几种解决方案: AWS Lambda questions