教程:使用函数 URL 创建响应流式处理 Lambda 函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用函数 URL 创建响应流式处理 Lambda 函数

在本教程中,您将创建一个 Lambda 函数,该函数定义为 .zip 文件存档,其函数 URL 端点会返回响应流。有关配置函数 URL 的更多信息,请参阅 创建和管理函数 URL

先决条件

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

要完成以下步骤,您需要 Amazon Command Line Interface(Amazon CLI)版本 2。在单独的数据块中列出了命令和预期输出:

aws --version

您应看到以下输出:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

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

在 Linux 和 macOS 中,可使用您首选的 shell 和程序包管理器。

注意

在 Windows 中,操作系统的内置终端不支持您经常与 Lambda 一起使用的某些 Bash CLI 命令(例如 zip)。安装 Windows Subsystem for Linux,获取 Ubuntu 和 Bash 与 Windows 集成的版本。本指南中的示例 CLI 命令使用 Linux 格式。如果您使用的是 Windows CLI,则必须重新格式化包含内联 JSON 文档的命令。

创建执行角色

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

创建执行角色
  1. 打开 Amazon Identity and Access Management(IAM)控制台的 Roles(角色)页面。

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

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

    • 可信实体类型Amazon 服务

    • 使用场景Lambda

    • 权限AWSLambdaBasicExecutionRole

    • Role name(角色名称)– response-streaming-role

AWSLambdaBasicExecutionRole 策略具有函数将日志写入 Amazon CloudWatch Logs 所需的权限。创建角色后,记下其 Amazon 资源名称(ARN)。下一步中需要使用该值。

创建响应流式处理函数(Amazon CLI)

使用 Amazon Command Line Interface(Amazon CLI)创建具有函数 URL 端点的响应流式处理 Lambda 函数。

创建能够流式处理响应的函数
  1. 将以下代码示例复制到名为 index.mjs 的文件中。

    import util from 'util'; import stream from 'stream'; const { Readable } = stream; const pipeline = util.promisify(stream.pipeline); /* global awslambda */ export const handler = awslambda.streamifyResponse(async (event, responseStream, _context) => { const requestStream = Readable.from(Buffer.from(JSON.stringify(event))); await pipeline(requestStream, responseStream); });
  2. 创建部署程序包。

    zip function.zip index.mjs
  3. 使用 create-function 命令创建 Lambda 函数。将 --role 的值替换为上一步中的角色 ARN。

    aws lambda create-function \ --function-name my-streaming-function \ --runtime nodejs16.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/response-streaming-role
创建函数 URL
  1. 向函数添加基于资源的策略,以允许对函数 URL 进行访问。将 --principal 的值替换为您的 Amazon Web Services 账户 ID。

    aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunctionUrl \ --statement-id 12345 \ --principal 123456789012 \ --function-url-auth-type AWS_IAM \ --statement-id url
  2. 使用 create-function-url-config 命令为函数创建 URL 端点。

    aws lambda create-function-url-config \ --function-name my-streaming-function \ --auth-type AWS_IAM \ --invoke-mode RESPONSE_STREAM

测试函数 URL 端点

通过调用函数来测试集成。您可以在浏览器中打开函数的 URL,也可以使用 curl。

curl --request GET "<function_url>" --user "<key:token>" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer

我们的函数 URL 使用 IAM_AUTH 身份验证类型。这意味着您必须使用 Amazon 访问密钥和私有密钥才能签署请求。在上一条命令中,将 <key:token> 替换为 Amazon 访问密钥 ID。请在出现提示时输入 Amazon 私有密钥。如果没有 Amazon 私有密钥,可以改为使用临时 Amazon 凭证

清除资源

除非您想要保留为本教程创建的资源,否则可立即将其删除。通过删除不再使用的Amazon资源,可防止您的Amazon账户产生不必要的费用。

删除执行角色
  1. 打开 IAM 控制台的角色页面

  2. 选择您创建的执行角色。

  3. 选择删除

  4. 在文本输入字段中输入角色名称,然后选择 Delete(删除)。

删除 Lambda 函数
  1. 打开 Lamba 控制台的 Functions(函数)页面

  2. 选择您创建的函数。

  3. 依次选择操作删除

  4. 在文本输入字段中键入 delete,然后选择 Delete(删除)。