AWS Lambda运行在Windows

时间:2017-09-16 15:34:30

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

我刚刚在AWS工作,所以这就是为什么这可能是一个基本问题。无论如何,我要在我的计算机上使用 virtualenv 上传我的项目的zip文件。基本上我的环境是:

Windows 10 Python 3.6 PyCharm编辑 为aws创建一个虚拟环境:virtualenv

我的脚本需要导入一个新的python库请求,我的脚本下面使用了一种lambda_handler(可能我的代码在该函数中有错误,因为记住我'在aws中是新的,而不是python中最好的。)

import requests
import datetime
import json



def handler_name(event, context):
    file = 'https://secure.bixi.com/data/stations.json'
    result = requests.get(file)
    data = result.json()
    now = datetime.datetime.now()
    hour = now.hour
    day = now.day
    month = now.month
    mins = now.minute


    with open('Bixi_%s_%s_%s-%s.json' % (month,day,hour,mins) , 'w') as outfile:
        json.dump(data, outfile)
    return print("download succeed")

#handler_name('n','n')

一旦我这样做,我已经在我的virtualenv中创建了一个env来安装所需的python包,最后我测试了我的脚本并成功执行了。 virtualenv与我的python脚本同名,你可以看到它和()中的命令行的开头:

enter image description here

现在我转到我创建环境的项目中获取文件夹并压缩以在AWS Lambda中上传。不幸的是,在执行zip文件后,我收到了这条消息。

  

START RequestId:42e3e3ce-9aec-11e7-b97c-8116ad342de4版本:$ LATEST   无法导入模块' lambda_function':没有命名的模块   ' lambda_function'

     

END RequestId:42e3e3ce-9aec-11e7-b97c-8116ad342de4报告RequestId:   42e3e3ce-9aec-11e7-b97c-8116ad342de4时长:0.38 ms   持续时间:100毫秒内存大小:128 MB最大使用内存:22 MB

我尝试了什么: 我说好的我会用Lambda提供的默认建议脚本改变我的脚本作为hello-world。

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'])
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

不幸的是,当我再次运行我的函数时返回相同的消息。可能我的错误是当我创建virtualenv但是我真的不知道如何解决它。如果有人能帮我一把,我感激不尽。感谢。

更新 基于几个答案,我已经验证了我的项目,我意识到了两件事:

  1. 我的函数中使用的名称未使用正确的文件名更新
  2. 我的项目不是很好。
  3. 对于第二点,我只是在aws lambda中设置了正确的名称:bixi_import.lambda_handler

    第一点我再次创建了一个虚拟环境然后我在我的文件系统中看到为这个环境创建了一个新的文件夹文件然后我下载了所需的包我去了我的虚拟环境中的路径site-packages我只是复制了python文件,然后小心地为所有文件做了一个crt + a并创建了我的zip,以确保Lambda能够直接读取所有文件,而无需通过文件夹。

    感谢@Michael在第2点和@Kannaiyan在第1点。

1 个答案:

答案 0 :(得分:1)

根据文档,

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'])
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

如果将其存储在名为lambda_function.py。

的文件中

此功能的处理程序配置为 lambda_function.lambda_handler

  

格式为文件名(不带扩展名).functionname

http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html