AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS Lambda 与 AWS Command Line Interface 结合使用

您可以使用 AWS Command Line Interface 管理函数及其他 AWS Lambda 资源。AWS CLI 使用 AWS SDK for Python (Boto) 与 Lambda API 进行交互。您可以使用它来了解 API,并在构建将 Lambda 与 AWS 开发工具包结合使用的应用程序时运用所学的知识。

在本教程中,您将使用 AWS CLI 管理和调用 Lambda 函数。

先决条件

This tutorial assumes that you have some knowledge of basic Lambda operations and the Lambda console. If you haven't already, follow the instructions in 开始使用 AWS Lambda to create your first Lambda function.

To follow the procedures in this guide, you will need a command line terminal or shell to run commands. Commands are shown in listings preceded by a prompt symbol ($) and the name of the current directory, when appropriate:

~/lambda-project$ this is a command this is output

For long commands, an escape character (\) is used to split a command over multiple lines.

On Linux and macOS, use your preferred shell and package manager. On Windows 10, you can install the Windows Subsystem for Linux to get a Windows-integrated version of Ubuntu and Bash.

创建执行角色

创建执行角色,向您的函数授予访问 AWS 资源的权限。

创建执行角色

  1. 打开 IAM 控制台中的“角色”页面

  2. 选择 Create role (创建角色)

  3. 创建具有以下属性的角色。

    • 可信任的实体AWS Lambda

    • 权限AWSLambdaBasicExecutionRole

    • 角色名称 (角色名称)lambda-cli-role

AWSLambdaBasicExecutionRole 策略具有函数将日志写入 CloudWatch Logs 所需的权限。

创建函数

以下示例代码以输入形式接收事件并将部分传入的事件数据记录到 CloudWatch Logs。

例 index.js

console.log('Loading function'); exports.handler = function(event, context, callback) { console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); callback(null, "Success"); };

创建函数

  1. 将示例代码复制到名为 index.js 的文件中。

  2. 创建部署程序包。

    $ zip function.zip index.js
  3. 使用 create-function 命令创建 Lambda 函数。

    $ aws lambda create-function --function-name helloworld \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs8.10 \ --role arn:aws:iam::123456789012:role/lambda-cli-role { "FunctionName": "helloworld", "CodeSize": 351, "MemorySize": 128, "FunctionArn": "function-arn", "Handler": "index.handler", "Role": "arn:aws:iam::account-id:role/LambdaExecRole", "Timeout": 3, "LastModified": "2015-04-07T22:02:58.854+0000", "Runtime": "nodejs8.10", "Description": "" }

使用调用命令调用您的 Lambda 函数。

$ aws lambda invoke --function-name helloworld --log-type Tail \ --payload '{"key1":"value1", "key2":"value2", "key3":"value3"}' \ outputfile.txt { "LogResult": "base64-encoded-log", "StatusCode": 200 }

通过指定 --log-type 参数,该命令还请求由该函数产生的日志的末尾。响应中的日志数据采用 base64 编码。使用 base64 程序解码日志。

$ echo base64-encoded-log | base64 --decode START RequestId: 16d25499-d89f-11e4-9e64-5d70fce44801 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 value1 = value1 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 value2 = value2 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 value3 = value3 2015-04-01T18:44:12.323Z 16d25499-d89f-11e4-9e64-5d70fce44801 result: "value1" END RequestId: 16d25499-d89f-11e4-9e64-5d70fce44801 REPORT RequestId: 16d25499-d89f-11e4-9e64-5d70fce44801 Duration: 13.35 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 9 MB

由于您已使用默认调用类型 (RequestResponse) 调用函数,因此,连接将保持打开状态,直到完成执行操作。Lambda 将响应写入输出文件。

列出您的账户中的 Lambda 函数

执行以下 AWS CLI list-functions 命令可检索您已创建的函数的列表。

$ aws lambda list-functions --max-items 10 { "Functions": [ { "FunctionName": "helloworld", "MemorySize": 128, "CodeSize": 412, "FunctionArn": "arn:aws:lambda:us-east-1:account-id:function:ProcessKinesisRecords", "Handler": "ProcessKinesisRecords.handler", "Role": "arn:aws:iam::account-id:role/LambdaExecRole", "Timeout": 3, "LastModified": "2015-02-22T21:03:01.172+0000", "Runtime": "nodejs6.10", "Description": "" }, { "FunctionName": "ProcessKinesisRecords", "MemorySize": 128, "CodeSize": 412, "FunctionArn": "arn:aws:lambda:us-east-1:account-id:function:ProcessKinesisRecords", "Handler": "ProcessKinesisRecords.handler", "Role": "arn:aws:iam::account-id:role/lambda-execute-test-kinesis", "Timeout": 3, "LastModified": "2015-02-22T21:03:01.172+0000", "Runtime": "nodejs6.10", "Description": "" }, ... ], "NextMarker": null }

作为响应,Lambda 返回一个最多包含 10 个函数的列表。如果有更多功能可供您检索,NextMarker 将提供一个您可以在下一个 list-functions 请求中使用的标记;否则,该值为空。以下 list-functions AWS CLI 命令是一个演示 --marker 参数的示例。

$ aws lambda list-functions --max-items 10 \ --marker value-of-NextMarker-from-previous-response

检索 Lambda 函数

Lambda CLI get-function 命令将返回 Lambda 函数元数据以及可用来下载函数的部署程序包的预签名 URL。

$ aws lambda get-function --function-name helloworld { "Code": { "RepositoryType": "S3", "Location": "pre-signed-url" }, "Configuration": { "FunctionName": "helloworld", "MemorySize": 128, "CodeSize": 287, "FunctionArn": "arn:aws:lambda:us-west-2:account-id:function:helloworld", "Handler": "index.handler", "Role": "arn:aws:iam::account-id:role/LambdaExecRole", "Timeout": 3, "LastModified": "2015-04-07T22:02:58.854+0000", "Runtime": "nodejs8.10", "Description": "" } }

有关更多信息,请参阅GetFunction

清除

执行以下 delete-function 命令以删除 helloworld 函数。

$ aws lambda delete-function --function-name helloworld

删除您在 IAM 控制台中创建的 IAM 角色。有关删除角色的信息,请参阅 IAM 用户指南 中的删除角色或实例配置文件