跳转到主要内容

在Amazon Lambda上运行的Python应用程序所需的最基本条件。

项目描述

========
python-λ
========

.. image:: https://img.shields.io/pypi/v/python-lambda.svg
:alt: Pypi
:target: https://pypi.python.org/pypi/python-lambda/

.. image:: https://img.shields.io/pypi/pyversions/python-lambda.svg
:alt: Python Versions
:target: https://pypi.python.org/pypi/python-lambda/

Python-lambda 是一个用于在 AWS Lambda 中开发和部署 *无服务器* Python 代码的工具集。

呼吁贡献者
=======================
随着 python-lambda 和 `pytube <https://github.com/nficano/pytube/>`_ 继续发展势头,我正在呼吁贡献者帮助构建新功能,审查拉取请求,修复错误,并维护整体代码质量。如果您感兴趣,请通过 nficano[at]gmail.com 发送电子邮件给我。

描述
===========

AWS Lambda 是一种服务,允许您编写 Python、Java、Node.js、C# 或 Go 代码,这些代码在响应事件(如 http 请求或上传到 S3 的文件)时执行。

与 Lambda 一起工作相对简单,但打包和部署代码的过程并不像可能的那样简单。

“Python-Lambda”库通过提供一套工具来简化开发过程中的繁琐部分,从而消除了您开发Python-Lambda服务的猜测工作。

要求
============

• Python 2.7 & 3.6(在撰写本文时,AWS Lambda仅支持Python 2.7/3.6)。
• Pip (~8.1.1)
• Virtualenv (~15.0.0)
• Virtualenvwrapper (~4.7.1)

入门指南
===============

首先,您必须在AWS账户中创建一个名为`lambda_basic_execution`的IAM角色,并附加`LambdaBasicExecution`策略。

在您的计算机上,创建一个新的虚拟环境和一个项目文件夹。

.. code:: bash

$ mkvirtualenv pylambda
(pylambda) $ mkdir pylambda

接下来,使用pip通过pypi下载“Python-Lambda”。

.. code:: bash

(pylambda) $ pip install python-lambda

从您的“pylambda”目录中,运行以下命令以初始化您的项目。

.. code:: bash

(pylambda) $ lambda init

这将创建以下文件:`event.json`、`__init__.py`、`service.py`和`config.yaml`。

让我们首先在您选择的文本编辑器中打开`config.yaml`。在本教程中,唯一需要的信息是`aws_access_key_id`和`aws_secret_access_key`。您可以通过登录AWS管理控制台找到这些信息。

接下来让我们打开`service.py`,在这里您会找到以下函数

.. code:: python

def handler(event, context)
# 在这里输入您的代码!
e = event.get('e')
pi = event.get('pi')
return e + pi


这是处理函数;这是AWS Lambda在接收到事件时将调用的函数。您会注意到在示例代码中,“e”和“pi”是字典中的值。AWS Lambda使用`event`参数将事件数据传递给处理程序。

所以,例如,如果您的函数是对http请求做出响应,那么`event`将是`POST` JSON数据,如果您的函数返回某些内容,则这些内容将包含在您的http响应体中。

接下来让我们打开`event.json`文件

.. code:: json

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

在这里,您将找到示例代码中引用的“e”和“pi”的值。

如果您现在尝试运行

.. code:: bash

(pylambda) $ lambda invoke -v

您将得到

.. code:: bash

# 5.858

## 执行时间:0.00000310s
## 函数执行超时:15s

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

`event.json`文件可以帮助您在本地开发Lambda服务。您可以通过将`--event-file=.json`参数传递给`lambda invoke`来指定一个替代的`event.json`文件。

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

.. code:: bash

(pylambda) $ lambda deploy

部署脚本将评估您的虚拟环境并识别项目依赖项。它将把这些以及处理函数打包成一个zip文件,然后上传到AWS Lambda。

您现在可以登录到`AWS Lambda管理控制台 <https://console.aws.amazon.com/lambda>`_以验证代码是否成功部署。

连接到API端点
=========================

如果您想开发一个简单的微服务,您可以将函数轻松连接到http端点。

开始时,请转到您的`AWS Lambda管理控制台 <https://console.aws.amazon.com/lambda>`_并点击您的函数。单击“API端点”选项卡,然后单击“添加API端点”。

在API端点类型下选择“API Gateway”。

接下来,将方法更改为`POST`,将安全性更改为“公开”,然后提交(注意:您应该在生产中使用安全连接,公开安全性仅用于演示目的)。

最后,您需要更改函数的返回值以符合API Gateway端点定义的标准,函数现在应如下所示

.. code:: python

def handler(event, context)
# 在这里输入您的代码!
e = event.get('e')
pi = event.get('pi')
返回{
"statusCode": 200,
"headers": { "Content-Type": "application/json"},
"body": e + pi
}

现在尝试运行

.. code:: bash

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

环境变量
=====================
Lambda函数支持环境变量。为了设置部署代码使用的环境变量,您可以在`config.yaml`中配置它们。要加载
部署时环境变量的值(而不是在配置文件中硬编码它们),您可以使用本地环境值(如下面的示例代码中的'env3'所示)。

.. code:: yaml

environment_variables
env1: foo
env2: baz
env3: ${LOCAL_ENVIRONMENT_VARIABLE_NAME}

这将部署时在Lambda实例中创建环境变量。如果您的函数不需要环境变量,只需在您的配置中省略此部分即可。

上传到S3
===============
您可能会发现您不需要工具包来完全部署Lambda,或者您的代码包太大,无法通过API上传。您可以使用`upload`命令将包发送到您选择的S3桶。
在此操作之前,您需要在`config.yaml`中设置以下变量

.. code:: yaml

role: basic_s3_upload
bucket_name: 'example-bucket'
s3_key_prefix: 'path/to/file/'

您的角色必须具有对您指定的桶/键的`s3:PutObject`权限,以便上传操作可以正常工作。设置好之后,您可以执行`lambda upload`来启动传输。

通过S3部署
===============
您还可以选择使用S3作为Lambda部署的源。这可以通过使用与执行`upload`命令相同的变量/AWS权限来执行`lambda deploy_s3`来完成。

开发
===========

"python-lambda"的开发仅限于GitHub。以补丁、测试和功能创建以及/或请求的形式的贡献非常受欢迎,并受到高度鼓励。如果此工具不符合您的预期,请打开一个问题。


如何发布更新
----------------------

如果您第一次发布到pypi,您需要运行:`pip install -r tests/dev_requirements.txt`。

完成之后,执行以下命令

.. code:: bash

git checkout master

# 增加版本号并标记发布。
bumpversion [major|minor|patch]

# 将分发布布到PyPi
python setup.py sdist bdist_wheel upload

# 由于master经常包含工作正在进行中的更改,将版本
# 增加到修补程序版本以防止不准确归因。
bumpversion --no-tag patch

git push origin master --tags


项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分发布布

dmn-python-lambda-3.3.1.tar.gz (13.2 kB 查看哈希)

上传

构建分发布布

dmn_python_lambda-3.3.1-py2.py3-none-any.whl (14.7 kB 查看哈希)

上传于 Python 2 Python 3

由以下提供支持