我是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中导入我的代码?
答案 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