教程:使用函数 URL 创建 Lambda 函数
在本教程中,您将创建一个 Lambda 函数,该函数定义为 .zip 文件存档,其公共函数 URL 端点返回两个数字的乘积。有关配置函数 URL 的更多信息,请参阅 函数 URL。
提示
Lambda 提供了两种方法来通过 HTTP 端点调用函数:函数 URL 和 Amazon API Gateway。如果您不确定哪种方法最适合您的应用场景,请参阅选择使用 HTTP 请求调用 Lambda 函数的方法。
先决条件
本教程假设您对 Lambda 基本操作和 Lambda 控制台有一定了解。如果您还没有了解,请按照 使用控制台创建 Lambda 函数 中的说明创建您的第一个 Lambda 函数。
要完成以下步骤,您需要 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
创建执行角色
创建执行角色,向您的 Lambda 函数授予访问Amazon资源的权限。
创建执行角色
-
打开 Amazon Identity and Access Management(IAM)控制台的 Roles
(角色)页面。 -
选择 Create role(创建角色)。
-
对于可信实体类型,选择 Amazon 服务,然后对于应用场景,选择 Lambda。
-
选择下一步。
-
在权限策略窗格中,在搜索框中输入
AWSLambdaBasicExecutionRole
。 -
勾选
AWSLambdaBasicExecutionRole
Amazon 托管策略旁边的复选框,然后选择下一步。 -
对于角色名称,输入
lambda-url-role
,然后选择创建角色。
AWSLambdaBasicExecutionRole
策略具有函数将日志写入 Amazon CloudWatch Logs 所需的权限。在本教程的后面部分,您需要角色的 Amazon 资源名称(ARN)创建您的 Lambda 函数。
查找执行角色的 ARN
-
打开 Amazon Identity and Access Management(IAM)控制台的 Roles
(角色)页面。 -
选择您刚刚创建的角色(
lambda-url-role
)。 -
在摘要窗格中,复制 ARN。
使用函数 URL(.zip 文件归档)创建 Lambda 函数
使用 .zip 文件归档创建一个具有函数 URL 端点的 Lambda 函数
创建函数
-
将以下代码示例复制到名为
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; };
-
创建部署程序包。
zip function.zip index.js
-
使用
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
-
向函数添加基于资源的策略,授予允许对您的函数 URL 进行公有访问的权限。
aws lambda add-permission \ --function-name my-url-function \ --action lambda:InvokeFunctionUrl \ --principal "*" \ --function-url-auth-type "NONE" \ --statement-id url
-
使用
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 Web Services 账户 产生不必要的费用。
删除执行角色
-
打开 IAM 控制台的角色页面
。 -
选择您创建的执行角色。
-
选择删除。
-
在文本输入字段中输入角色名称,然后选择 Delete(删除)。
删除 Lambda 函数
-
打开 Lamba 控制台的 Functions(函数)页面
。 -
选择您创建的函数。
-
依次选择操作和删除。
-
在文本输入字段中键入
delete
,然后选择 Delete(删除)。