为4DN DCIC分叉。用于打包和部署lambda函数。

python-lambda-4dn的Python项目详细描述


PypiPython Versions

python lambda是用于在aws lambda中开发和部署serverlesspython代码的工具集。

重要

这是nick ficano最初python lambda包的一个分支。 它不会定期更新,并根据我们的项目需要冻结。

征集投稿人

随着python lambda和pytube都在继续增长,我呼吁贡献者帮助构建新的特性,审查pull请求,修复bug,并保持总体代码质量。如果你感兴趣,请发邮件到nficano[gmail.com]。

说明

aws lambda是一个允许您编写python、java或node.js代码的服务,这些代码是响应诸如http请求或上传到s3的文件之类的事件而执行的。

使用lambda相对来说比较容易,但是捆绑和部署代码的过程并没有那么简单。

python lambda库通过提供一个工具集来简化烦人的部分,从而消除了开发python lambda服务的猜测工作。

要求

  • python 2.7&3.6(在编写本文时,aws lambda只支持python2.7/3.6)。
  • PIP(~8.1.1)
  • virtualenv(~15.0.0)
  • 虚拟说唱歌手(~4.7.1)

开始

首先,必须在aws帐户上创建名为lambda_basic_execution的iam角色,并附加lambdabasiceexecution策略。

在您的计算机上,创建一个新的virtualenv和project文件夹。

$ mkvirtualenv pylambda
(pylambda) $ mkdir pylambda

接下来,通过pypi使用pip下载python lambda

(pylambda) $ pip install python-lambda

pylambda目录中,运行以下命令以引导项目。

(pylambda) $ lambda init

这将创建以下文件:event.json__init__.pyservice.pyconfig.yaml

首先,在您选择的文本编辑器中打开config.yaml。在本教程中,唯一需要的信息是aws_access_key_idaws_secret_access_key。您可以通过登录到aws管理控制台来找到它们。

接下来打开service.py,在这里您将找到以下函数:

defhandler(event,context):# Your code goes here!e=event.get('e')pi=event.get('pi')returne+pi

这是handler函数;这是aws lambda响应事件调用的函数。您将注意到,在示例代码epi中是dict中的值。aws lambda使用event参数将事件数据传递给处理程序。

因此,例如,如果您的函数正在响应http请求,event将是POSTjson数据,如果您的函数返回某些内容,则内容将在http响应负载中。

接下来打开event.json文件:

{"pi":3.14,"e":2.718}

在这里您可以找到示例代码中引用的epi的值。

如果您现在尝试运行:

(pylambda) $ lambda invoke -v

您将获得:

# 5.858
# execution time: 0.00000310s
# function execution timeout: 15s

如您所述,lambda invoke命令获取存储在event.json文件中的值并将它们传递给您的函数。

event.json文件应该可以帮助您在本地开发lambda服务。通过将--event-file=<filename>.json参数传递给lambda invoke,可以指定替代的event.json文件。

当您准备好将代码部署到lambda时,只需运行:

(pylambda) $ lambda deploy

部署脚本将评估您的virtualenv并确定您的项目依赖项。它会将这些文件和处理函数打包成一个zip文件,然后上传到aws lambda。

现在您可以登录到AWS Lambda management console来验证成功部署的代码。

连接到API端点

如果你想开发一个简单的微服务,你可以很容易地将你的函数连接到一个http端点。

首先导航到AWS Lambda management console并单击您的函数。单击API端点选项卡,然后单击“添加API端点”。

在“API端点类型”下,选择“API G阿泰韦”。

下一步将方法更改为POST,将security更改为“open”,然后单击submit(注意:您应该保护它以便在生产中使用,opensecurity用于演示)。

最后,您需要更改函数的返回值以符合为api网关端点定义的标准,该函数现在应该如下所示:

defhandler(event,context):# Your code goes here!e=event.get('e')pi=event.get('pi')return{"statusCode":200,"headers":{"Content-Type":"application/json"},"body":e+pi}

现在尝试运行:

$ curl --header "Content-Type:application/json"\
       --request POST \
       --data '{"pi": 3.14, "e": 2.718}'\
       https://<API endpoint URL>
# 5.8580000000000005

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
正在从节点解密字符串。Java中的js?   java未来超时和IO超时   java apache camel多播以异步方式执行聚合   java需要710次尝试在Android和Raspberry Pi之间建立socket连接   在Java中使用“+,”循环绘制形状   java安卓:如何计算两点之间的距离   java多线程Hello World   刷新后缓存共享变量的java Freemarker模板   java我试图通过迭代用整数填充数组,但我得到了ArrayIndexOutOfBoundsException   JNI C++到java 32位图像的不正确显示   java哪个更快:克隆还是使用流?   java cache2k和Generic T不能很好地结合在一起   java如何在读取文件之前更新文件内容?   java如何在GWT中从JSNI方法调用JSNI方法   将MySQL类型文本映射到Java Hibernate的类型   java如何按长度对字符串排序   java RecyclerView:在滚动期间不断更改数据