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 函数。

先决条件

本教程假设您对基本 Lambda 操作和 Lambda 控制台有一定了解。如果尚不了解,请按照开始使用 AWS Lambda中的说明创建您的第一个 Lambda 函数。

为了遵循本指南中的步骤,您需要命令行终端或外壳,以便运行命令。命令显示在列表中,以提示符 ($) 和当前目录名称(如果有)开头:

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

对于长命令,使用转义字符 (\) 将命令拆分到多行中。

在 Linux 和 macOS 中,可使用您首选的外壳程序和程序包管理器。在 Windows 10 中,您可以 安装 Windows Subsystem for Linux,获取 Ubuntu 和 Bash 与 Windows 集成的版本。

创建执行角色

创建执行角色,向您的函数授予访问 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 用户指南 中的删除角色或实例配置文件