AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

教程:使用 AWS Lambda 别名

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

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

  1. 首先,您需要创建可上传的部署程序包来创建 Lambda 函数。

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

      Copy
      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. 创建您在创建 Lambda 函数时指定的 IAM 角色(执行角色)。

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

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

      • Select Role Type 中,选择 AWS Service Roles,然后选择 AWS Lambda

      • Attach Policy 中,选择名为 AWSLambdaBasicExecutionRole 的策略。

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

  3. 创建 Lambda 函数 (helloworld)。

    Copy
    aws lambda create-function \ --region us-west-2 \ --function-name helloworld \ --zip-file fileb://file-path/helloworld.zip \ --role arn:aws:iam::account-id:role/lambda_basic_execution \ --handler helloworld.handler \ --runtime nodejs6.10 \ --profile adminuser

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

    Copy
    { "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):

    Copy
    aws lambda create-alias \ --region us-west-2 \ --function-name helloworld \ --description "sample alias" \ --function-version "\$LATEST" \ --name DEV \ --profile adminuser

    响应返回别名信息,包括它指向的函数版本和别名 ARN。ARN 与具有别名后缀的函数 ARN 相同。以下为响应示例:

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

    Copy
    aws lambda publish-version \ --region us-west-2 \ --function-name helloworld \ --profile adminuser

    响应返回函数版本的配置信息,包括版本号和具有版本后缀的函数 ARN。以下为响应示例:

    Copy
    { "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)。

    Copy
    aws lambda create-alias \ --region us-west-2 \ --function-name helloworld \ --description "sample alias" \ --function-version 1 \ --name BETA \ --profile adminuser

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

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

    Copy
    aws lambda create-alias \ --region us-west-2 \ --function-name helloworld \ --description "sample alias" \ --function-version 1 \ --name PROD \ --profile adminuser

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

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

    Copy
    aws lambda update-alias \ --region us-west-2 \ --function-name helloworld \ --function-version 2 \ --name BETA \ --profile adminuser

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

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

在推模型中授予权限

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

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

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

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

    Copy
    aws lambda add-permission \ --region us-west-2 \ --function-name helloworld \ --qualifier PROD \ --statement-id 1 \ --principal s3.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn arn:aws:s3:::examplebucket \ --source-account 111111111111 \ --profile adminuser

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

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

    注意

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

本页内容: