教程:使用函数 URL 创建响应流式处理 Lambda 函数
在本教程中,您将创建一个 Lambda 函数,该函数定义为 .zip 文件存档,其函数 URL 端点会返回响应流。有关配置函数 URL 的更多信息,请参阅 函数 URL。
先决条件
本教程假设您对 Lambda 基本操作和 Lambda 控制台有一定了解。如果您还没有了解,请按照 使用控制台创建 Lambda 函数 中的说明创建您的第一个 Lambda 函数。
要完成以下步骤,您需要 AWS 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
创建执行角色
创建执行角色,向您的 Lambda 函数授予访问AWS资源的权限。
创建执行角色
-
打开 AWS Identity and Access Management(IAM)控制台的 Roles
(角色)页面。 -
选择 Create role(创建角色)。
-
创建具有以下属性的角色:
-
可信实体类型 – AWS 服务
-
使用场景 – Lambda
-
权限 – AWSLambdaBasicExecutionRole
-
Role name(角色名称)–
response-streaming-role
-
AWSLambdaBasicExecutionRole 策略具有函数将日志写入 Amazon CloudWatch Logs 所需的权限。创建角色后,记下其 Amazon 资源名称(ARN)。下一步中需要使用该值。
创建响应流式处理函数(AWS CLI)
使用 AWS Command Line Interface(AWS CLI)创建具有函数 URL 端点的响应流式处理 Lambda 函数。
创建能够流式处理响应的函数
-
将以下代码示例复制到名为
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); });
-
创建部署程序包。
zip function.zip index.mjs
-
使用
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 \ --rolearn:aws:iam::123456789012:role/response-streaming-role
创建函数 URL
-
向函数添加基于资源的策略,以允许对函数 URL 进行访问。将
--principal
的值替换为您的 AWS 账户 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 -
使用
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
身份验证类型。这意味着您必须使用 AWS 访问密钥和私有密钥才能签署请求。在上一条命令中,将 <key:token>
替换为 AWS 访问密钥 ID。请在出现提示时输入 AWS 私有密钥。如果没有 AWS 私有密钥,可以改为使用临时 AWS 凭证。
清除资源
除非您想要保留为本教程创建的资源,否则可立即将其删除。通过删除您不再使用的 AWS 资源,可防止您的 AWS 账户 产生不必要的费用。
删除执行角色
-
打开 IAM 控制台的角色页面
。 -
选择您创建的执行角色。
-
选择删除。
-
在文本输入字段中输入角色名称,然后选择 Delete(删除)。
删除 Lambda 函数
-
打开 Lamba 控制台的 Functions(函数)页面
。 -
选择您创建的函数。
-
依次选择操作和删除。
-
在文本输入字段中键入
delete
,然后选择 Delete(删除)。