教程:使用函数 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. 选择创建角色

  3. 对于可信实体类型,选择 Amazon 服务,然后对于应用场景,选择 Lambda

  4. 选择下一步

  5. 权限策略窗格中,在搜索框中输入 AWSLambdaBasicExecutionRole

  6. 勾选 AWSLambdaBasicExecutionRole Amazon 托管策略旁边的复选框,然后选择下一步

  7. 对于角色名称,输入 lambda-url-role,然后选择创建角色

AWSLambdaBasicExecutionRole 策略具有函数将日志写入 Amazon CloudWatch Logs 所需的权限。在本教程的后面部分,您需要角色的 Amazon 资源名称(ARN)创建您的 Lambda 函数。

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

  2. 选择您刚刚创建的角色(lambda-url-role)。

  3. 摘要窗格中,复制 ARN

使用函数 URL(.zip 文件归档)创建 Lambda 函数

使用 .zip 文件归档创建一个具有函数 URL 端点的 Lambda 函数

创建函数
  1. 将以下代码示例复制到名为 index.js 的文件中。

    例 index.js
    exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; };
  2. 创建部署程序包。

    zip function.zip index.js
  3. 使用 create-function 命令创建 Lambda 函数。请务必将角色 ARN 替换为您在本教程前面部分中复制的您自己的执行角色的 ARN。

    aws lambda create-function \ --function-name my-url-function \ --runtime nodejs18.x \ --zip-file fileb://function.zip \ --handler index.handler \ --role arn:aws:iam::123456789012:role/lambda-url-role
  4. 向函数添加基于资源的策略,授予允许对您的函数 URL 进行公有访问的权限。

    aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
  5. 使用 create-function-url-config 命令为函数创建 URL 端点。

    aws lambda create-function-url-config \ --function-name my-url-function \ --auth-type NONE

测试函数 URL 端点

通过使用诸如 curl 或 Postman 之类的 HTTP 客户端调用函数 URL 端点来调用 Lambda 函数。

curl 'https://abcdefg.lambda-url.us-east-1.on.aws/' \ -H 'Content-Type: application/json' \ -d '{"num1": "10", "num2": "10"}'

您应看到以下输出:

The product of 10 and 10 is 100

使用函数 URL 创建 Lambda 函数 (CloudFormation)

还可以使用 Amazon CloudFormation 类型 AWS::Lambda::Url 创建带有函数 URL 端点的 Lambda 函数。

Resources: MyUrlFunction: Type: AWS::Lambda::Function Properties: Handler: index.handler Runtime: nodejs18.x Role: arn:aws:iam::123456789012:role/lambda-url-role Code: ZipFile: | exports.handler = async (event) => { let body = JSON.parse(event.body); const product = body.num1 * body.num2; const response = { statusCode: 200, body: "The product of " + body.num1 + " and " + body.num2 + " is " + product, }; return response; }; Description: Create a function with a URL. MyUrlFunctionPermissions: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyUrlFunction Action: lambda:InvokeFunctionUrl Principal: "*" FunctionUrlAuthType: NONE MyFunctionUrl: Type: AWS::Lambda::Url Properties: TargetFunctionArn: !Ref MyUrlFunction AuthType: NONE

使用函数 URL 创建 Lambda 函数 (Amazon SAM)

还可以使用 Amazon Serverless Application Model (Amazon SAM) 创建配置有函数 URL 的 Lambda 函数。

ProductFunction: Type: AWS::Serverless::Function Properties: CodeUri: function/. Handler: index.handler Runtime: nodejs18.x AutoPublishAlias: live FunctionUrlConfig: AuthType: NONE

清除资源

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

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

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

  3. 选择删除

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

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

  2. 选择您创建的函数。

  3. 依次选择操作删除

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