在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
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=
当您准备好将代码部署到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 查看哈希)