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

教程:使用 AWS Lambda 别名

这个基于 AWS CLI 的教程将创建 Lambda 函数版本以及指向该版本的别名(如示例:使用别名管理 Lambda 函数版本中所述)。

该示例使用 us-west-2 (美国西部俄勒冈) 区域创建 Lambda 函数和别名。

  1. 创建一个部署程序包,您可以上传该程序包以创建 Lambda 函数:

    1. 打开文本编辑器,然后复制以下代码。

      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, "message"); };
    2. 将该文件保存为 helloworld.js

    3. helloworld.js 文件压缩为 helloworld.zip

  2. 创建您在创建 AWS Identity and Access Management (IAM) 函数时指定的 Lambda 角色(执行角色)。

    1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

    2. 按照 IAM 用户指南IAM 角色的步骤操作,创建 IAM 角色(执行角色)。遵循步骤创建角色时,请注意以下事项:

      • Select Role Type (选择角色类型) 中,选择 AWS Service Roles (AWS 服务角色),然后选择 AWS Lambda

      • 对于附加策略,请选择名为 AWSLambdaBasicExecutionRole 的策略。

    3. 写下 IAM 角色的 Amazon 资源名称 (ARN)。在下一步中创建 Lambda 函数时,您将需要此值。

  3. 创建 Lambda 函数 (helloworld)。

    aws lambda create-function --function-name helloworld --runtime nodejs6.10 \ --zip-file fileb://helloworld.zip --handler helloworld.handler \ --role arn:aws:iam::account-id:role/lambda_basic_execution \

    响应返回将 $LATEST 显示为函数版本的配置信息,如以下示例响应所示。

    { "CodeSha256": "OjRFuuHKizEE8tHFIMsI+iHR6BPAfJ5S0rW31Mh6jKg=", "FunctionName": "helloworld", "CodeSize": 287, "MemorySize": 128, "FunctionArn": "arn:aws:lambda:us-west-2:account-id:function:helloworld", "Version": "$LATEST", "Role": "arn:aws:iam::account-id:role/lambda_basic_execution", "Timeout": 3, "LastModified": "2015-09-30T18:39:53.873+0000", "Handler": "helloworld.handler", "Runtime": "nodejs6.10", "Description": "" }
  4. 创建指向 helloworld Lambda 函数的 $LATEST 版本的别名 (DEV)。

    aws lambda create-alias --function-name helloworld --name DEV \ --description "sample alias" --function-version "\$LATEST"

    响应返回别名信息,包括它指向的函数版本以及别名 ARN。ARN 与具有别名后缀的函数 ARN 相同。以下是一项示范响应。

    { "AliasArn": "arn:aws:lambda:us-west-2:account-id:function:helloworld:DEV", "FunctionVersion": "$LATEST", "Name": "DEV", "Description": "sample alias" }
  5. 发布 helloworld Lambda 函数的版本。

    aws lambda publish-version --function-name helloworld

    响应返回函数版本的配置信息,包括版本号和具有版本后缀的函数 ARN。以下是一项示范响应。

    { "CodeSha256": "OjRFuuHKizEE8tHFIMsI+iHR6BPAfJ5S0rW31Mh6jKg=", "FunctionName": "helloworld", "CodeSize": 287, "MemorySize": 128, "FunctionArn": "arn:aws:lambda:us-west-2:account-id:function:helloworld:1", "Version": "1", "Role": "arn:aws:iam::account-id:role/lambda_basic_execution", "Timeout": 3, "LastModified": "2015-10-03T00:48:00.435+0000", "Handler": "helloworld.handler", "Runtime": "nodejs6.10", "Description": "" }
  6. helloworld Lambda 函数版本 1 创建名为 BETA 的别名:

    aws lambda create-alias --function-name helloworld \ --description "sample alias" --function-version 1 --name BETA

    现在您为 helloworld 函数创建了两个别名。DEV 别名指向 $LATEST 函数版本,BETA 别名指向 Lambda 函数的版本 1。

  7. 假设您要将 helloworld 函数的版本 1 放在生产环境中。创建另一个指向版本 1 的别名 (PROD)。

    aws lambda create-alias --function-name helloworld \ --description "sample alias" --function-version 1 --name PROD

    此时,您有指向 Lambda 函数的版本 1 的 BETAPROD 别名。

  8. 您现在可以发布更新的版本(例如,版本 2),但首先您需要更新代码并上传修改后的部署程序包。如果 $LATEST 版本未更改,则无法发布其多个版本。假设您已更新部署程序包、将其上传并发布了版本 2,您现在可以更改 BETA 别名以指向 Lambda 函数的版本 2。

    aws lambda update-alias --function-name helloworld \ --function-version 2 --name BETA

    现在您具有指向 Lambda 函数的不同版本的三个别名(DEV 别名指向 $LATEST 版本、BETA 别名指向版本 2、PROD 别名指向 Lambda 函数的版本 1)。

有关使用 AWS Lambda 控制台管理版本控制的信息,请参阅使用 AWS 管理控制台、AWS CLI 或 Lambda API 操作管理版本控制

在推送模型中授予权限

在推送模型中(请参阅AWS Lambda 事件源映射),事件源(例如 Amazon S3)会调用您的 Lambda 函数。这些事件源保留一个映射,以指定在发生事件时它们调用的函数版本或别名。请注意以下几点:

  • 建议您在映射配置中指定现有 Lambda 函数别名(请参阅AWS Lambda 别名简介)。例如,如果事件源是 Amazon S3,则在存储桶通知配置中指定别名 ARN,以便 Amazon S3 在检测到特定事件时能够调用别名。

  • 在推送模型中,使用附加到 Lambda 函数的资源策略向事件源授予权限。在版本控制中,您添加的权限特定于您在 AddPermission 请求中指定的限定词(请参阅版本控制、别名和资源策略)。

    例如,以下 AWS CLI 命令向 Amazon S3 授予调用 helloworld Lambda 函数的 PROD 别名的权限(请注意,--qualifier 参数指定别名名称)。

    aws lambda add-permission --function-name helloworld \ --qualifier PROD --statement-id 1 --principal s3.amazonaws.com --action lambda:InvokeFunction \ --source-arn arn:aws:s3:::examplebucket --source-account 111111111111

    在此情况下,Amazon S3 现在可以调用 PROD 别名,然后 AWS Lambda 可执行 PROD 别名指向的 helloworld Lambda 函数版本。您必须在 S3 存储桶的通知配置中使用 PROD 别名 ARN 才能使其生效。

    有关如何处理 Amazon S3 事件的信息,请参阅教程:将 AWS Lambda 与 Amazon S3 结合使用

    注意

    如果您使用 AWS Lambda 控制台为您的 Lambda 函数添加事件源,则控制台会为您添加必要权限。