将函数转换为Lambda

时间:2015-11-28 06:23:22

标签: python aws-lambda

我在python中按预期运行此函数。 如何将其转换为AWS Lambda函数?

def mymailgun(url):    
    import urllib2
    myfile=urllib2.urlopen(url)

    import requests
    print requests.post("https://api.mailgun.net/v3/XXX.mailgun.org/messages",
                        auth=("api", "key-XXX"),
                        files=[("attachment", myfile)
                               #("attachment", open("files/test.txt"))
                               ],
                        data={"from": "Excited User <excited-user@example.com>",
                              "to": "XXX@gmail.com",
                              "cc": "YYY@yahoo.com",
                              "bcc": "ZZZ@hotmail.com",
                              "subject": "Hello",
                              "text": "Testing some awesomness with attachments!",
                              "html": myfile})

2 个答案:

答案 0 :(得分:2)

您的代码必须遵循Lambda函数编程模型,您似乎需要稍微修改您的代码以适应。您的Python代码必须将其中一个函数标识为处理程序。这样做如下:

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

从官方手册:

  

event-AWS Lambda使用此参数将事件数据传递给   处理程序。此参数通常是Python dict类型。它可以   也可以是list,str,int,float或NoneType类型。

     

context-AWS Lambda使用此参数提供运行时信息   你的经纪人。此参数属于LambdaContext类型。   可选地,处理程序可以返回值。返回后会发生什么   value取决于调用Lambda时使用的调用类型   功能:

     

如果使用RequestResponse调用类型(同步   执行),AWS Lambda返回Python函数调用的结果   调用Lambda函数的客户端(在HTTP响应中)   调用请求,序列化为JSON)。例如,AWS Lambda   console使用RequestResponse调用类型,因此在测试时   使用控制台调用该功能,控制台将显示   返回值。

     
      
  • 如果处理程序未返回任何内容,则AWS Lambda将返回null。

  •   
  • 如果使用Event调用类型(异步执行),则会丢弃该值。

  •   

通过这些更改,第一步是将代码与任何依赖项一起打包到部署包中。为此,您必须创建一个

  

.zip以下列方式提交文件。

首先,为您的包创建一个目录。在这种情况下,您可以将其称为MailgunScript或类似的东西。将所有Python源文件保存在根目录下的此目录中。

您可以使用pip命令将所有必需的库(如requests和urllib2库)安装到您选择的目录中:

pip install requests -t /absolutePathTo/MailgunScript
pip install urllib2 -t /absolutePathTo/MailgunScript

最后,您必须从此目录的 content 创建.zip存档,而不是从目录本身创建。{/ p>

您现在已准备好将部署包转换为Lambda函数。登录AWS管理控制台并选择Create a Lambda Function。如果系统提示您选择蓝图,则可以选择默认的hello-world蓝图,然后继续上传部署包并根据需要填写其余字段。

然后,您只需返回主AWS管理控制台,选择该功能并单击test即可测试该功能。或者,您可以使用以下命令从命令行界面手动调用新的Lambda函数:

aws lambda invoke \
--region yourRegion \
--function-name yourFunctionName \
--payload '{"url"}'  \
--invocation-type RequestResponse \
/tmp/response

这将执行您的功能并将响应输出到/tmp/response进行检查。

答案 1 :(得分:2)

您需要以lambda函数方式设置函数。如上所述:

def handler_name(event, context): 
     return some_value
  

事件 - AWS Lambda使用此参数将事件数据传递给处理程序。此参数通常是Python dict类型。它也可以是list,str,int,float或NoneType类型。

     

上下文 - AWS Lambda使用此参数向处理程序提供运行时信息。此参数属于LambdaContext类型。

将代码测试为lambda函数:

  1. 保存文件
  2. 将文件和所有依赖项打包成.zip文件More info
  3. 使用控制台或AWS CLI上传.zip文件以创建Lambda函数。 More info
  4. 用于创建lambda函数的CLI命令:

    aws lambda create-function \
     --region us-west-2 \
     --function-name HelloPython \
     --zip-file fileb://deployment-package.zip \
     --role arn:aws:iam::account-id:role/lambda_basic_execution  \
     --handler hello_python.my_handler \
     --runtime python2.7 \
     --timeout 15 \
     --memory-size 512
    

    有关lambda函数的更多信息: 点击herehere。 :)