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

创建和管理 Lambda 函数 URL

函数 URL 是 Lambda 函数的专用 HTTP(S) 端点。您可以通过 Lambda 控制台或 Lambda API 创建和配置函数 URL。创建函数 URL 时,Lambda 会自动为您生成唯一的 URL 端点。创建函数 URL 后,其 URL 端点永远不会改变。函数 URL 的端点具有以下格式:

https://<url-id>.lambda-url.<region>.on.aws
注意

以下 Amazon Web Services 区域 不支持函数 URL:亚太地区(海得拉巴)(ap-south-2)、亚太地区(墨尔本)(ap-southeast-4)、亚太地区(马来西亚)(ap-southeast-5)、加拿大西部(卡尔加里)(ca-west-1)、欧洲(西班牙)(eu-south-2)、欧洲(苏黎世)(eu-central-2)、以色列(特拉维夫)(il-central-1) 和中东(阿联酋)(me-central-1)。

函数 URL 启用了双堆栈,支持 IPv4 和 IPv6。为函数配置函数 URL 后,可以通过 Web 浏览器、curl、Postman 或任何 HTTP 客户端通过其 HTTP(S)端点调用函数。

注意

您只能通过公共 Internet 访问自己的函数 URL。虽然 Lambda 函数确实支持 Amazon PrivateLink,但函数 URL 并不支持。

Lambda 函数 URL 使用基于资源的策略进行安全和访问控制。函数 URL 还支持跨源资源共享 (CORS) 配置选项。

可以将函数 URL 应用于任何函数别名或 $LATEST 未发布的函数版本。不能将函数 URL 添加到任何其他函数版本。

以下部分介绍如何使用 Lambda 控制台、Amazon CLI 和 Amazon CloudFormation 模板创建和管理函数 URL

创建函数 URL(控制台)

按照以下步骤,使用控制台创建函数 URL。

  1. 打开 Lamba 控制台的函数页面

  2. 选择您要为其创建函数 URL 的函数的名称。

  3. 选择 Configuration(配置)选项卡,然后选择 Function URL(函数 URL)。

  4. 选择 Create function URL(创建函数 URL)。

  5. 对于 Auth type(身份验证类型),选择 AWS_IAMNONE。有关函数 URL 身份验证的更多信息,请参阅 访问控制

  6. (可选)选择 Configure cross-origin resource sharing (CORS)(配置跨源资源共享),然后为函数 URL 配置 CORS 设置。有关 CORS 的更多信息,请参阅 跨源资源共享 (CORS)

  7. 选择保存

这将为函数的 $LATEST 未发布版本创建函数 URL。函数 URL 将显示在控制台的 Function overview(函数概览)部分。

  1. 打开 Lamba 控制台的函数页面

  2. 选择具有您要为其创建函数 URL 的别名的函数的名称。

  3. 选择 Aliases(别名)选项卡,然后选择要为其创建函数 URL 的别名的名称。

  4. 选择 Configuration(配置)选项卡,然后选择 Function URL(函数 URL)。

  5. 选择 Create function URL(创建函数 URL)。

  6. 对于 Auth type(身份验证类型),选择 AWS_IAMNONE。有关函数 URL 身份验证的更多信息,请参阅 访问控制

  7. (可选)选择 Configure cross-origin resource sharing (CORS)(配置跨源资源共享),然后为函数 URL 配置 CORS 设置。有关 CORS 的更多信息,请参阅 跨源资源共享 (CORS)

  8. 选择保存

这将为函数别名创建函数 URL。函数 URL 将显示在控制台中您的别名的 Function overview(函数概览)部分。

创建具有函数 URL 的新函数(控制台)
  1. 打开 Lamba 控制台的 Functions page(函数页面)。

  2. 选择 Create function(创建函数)。

  3. Basic information(基本信息)中,执行以下操作:

    1. Function name(函数名称)中,输入您的函数的名称,例如 my-function

    2. 对于 Runtime(运行时),请选择您首选的语言运行时,例如 Node.js 18.x

    3. 对于 Architecture(架构),请选择 x86_64arm64

    4. 展开 Permissions(权限),然后选择是创建新的执行角色还是使用现有的执行角色。

  4. 展开 Advanced settings(高级设置),然后选择 Function URL(函数 URL)。

  5. 对于 Auth type(身份验证类型),选择 AWS_IAMNONE(无)。有关函数 URL 身份验证的更多信息,请参阅 访问控制

  6. (可选)选择 Configure cross-origin resource sharing (CORS)(配置跨源资源共享)。如果在函数创建过程中选择此选项,则原定设置下,函数 URL 将允许来自所有来源的请求。创建函数后,可以编辑函数 URL 的 CORS 设置。有关 CORS 的更多信息,请参阅 跨源资源共享 (CORS)

  7. 选择 Create function (创建函数)

这将为函数的 $LATEST 未发布版本创建一个具有函数 URL 的新函数。函数 URL 将显示在控制台的 Function overview(函数概览)部分。

创建函数 URL (Amazon CLI)

要使用 Amazon Command Line Interface (Amazon CLI) 为现有 Lambda 函数创建函数 URL,请运行以下命令:

aws lambda create-function-url-config \ --function-name my-function \ --qualifier prod \ // optional --auth-type AWS_IAM --cors-config {AllowOrigins="https://example.com"} // optional

这会将函数 URL 添加到函数 my-functionprod 限定符中。有关这些配置参数的更多信息,请参阅 API 参考中的CreateFunctionUrlConfig

注意

要通过 Amazon CLI 创建函数 URL,该函数必须已经存在。

向 CloudFormation 模板添加函数 URL

要向 Amazon CloudFormation 模板中添加 Amazon::Lambda::Url 资源,请使用以下语法:

JSON

{ "Type" : "AWS::Lambda::Url", "Properties" : { "AuthType" : String, "Cors" : Cors, "Qualifier" : String, "TargetFunctionArn" : String } }

YAML

Type: AWS::Lambda::Url Properties: AuthType: String Cors: Cors Qualifier: String TargetFunctionArn: String

参数

  • (必需)AuthType – 定义函数 URL 的身份验证类型。可能的值为 AWS_IAMNONE。若要将访问权限限制为仅经过身份验证的用户,请设置为 AWS_IAM。要绕过 IAM 身份验证并允许任何用户对您的函数发出请求,请设置为 NONE

  • (可选)Cors – 定义函数 URL 的 CORS settings(CORS 设置)。要在 CloudFormation 中向 Amazon::Lambda::Url 资源添加 Cors,请使用以下语法。

    例 Amazon::Lambda::Url.Cors (JSON)
    { "AllowCredentials" : Boolean, "AllowHeaders" : [ String, ... ], "AllowMethods" : [ String, ... ], "AllowOrigins" : [ String, ... ], "ExposeHeaders" : [ String, ... ], "MaxAge" : Integer }
    例 Amazon::Lambda::Url.Cors (YAML)
    AllowCredentials: Boolean AllowHeaders: - String AllowMethods: - String AllowOrigins: - String ExposeHeaders: - String MaxAge: Integer
  • (可选)Qualifier – 别名。

  • (必需)TargetFunctionArn – Lambda 函数的名称或 Amazon 资源名称(ARN)。有效的名称格式包括:

    • 函数名称my-function

    • 函数 ARNarn:aws:lambda:us-west-2:123456789012:function:my-function

    • 部分 ARN123456789012:function:my-function

跨源资源共享 (CORS)

要定义不同来源如何访问函数 URL,请使用 跨源资源共享 (CORS)。如果要从其他域调用函数 URL,建议配置 CORS。Lambda 支持函数 URL 的以下 CORS 标头。

CORS 标头 CORS 配置属性 示例值

Access-Control-Allow-Origin

AllowOrigins

*(允许所有源)

https://www.example.com

http://localhost:60905

Access-Control-Allow-Methods

AllowMethods

GET, POST, DELETE, *

Access-Control-Allow-Headers

AllowHeaders

Date, Keep-Alive, X-Custom-Header

Access-Control-Expose-Headers

ExposeHeaders

Date, Keep-Alive, X-Custom-Header

Access-Control-Allow-Credentials

AllowCredentials

TRUE

Access-Control-Max-Age

MaxAge

5 (默认值)300

使用 Lambda 控制台或 Amazon CLI 为函数 URL 配置 CORS 时,Lambda 会通过函数 URL 自动将 CORS 标头添加到所有响应中。或者,您也可以手动将 CORS 标头添加到函数响应中。如果存在冲突的标头,则预期行为取决于请求的类型:

  • 对于 OPTIONS 请求之类的预检请求,以函数 URL 上配置的 CORS 标头为准。Lambda 在响应中仅返回这些 CORS 标头。

  • 对于 GET 或 POST 请求之类的非预检请求,Lambda 会同时返回函数 URL 上配置的 CORS 标头以及函数返回的 CORS 标头。这可能会导致响应中出现重复的 CORS 标头。您将看到类似以下的错误:The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed

通常,我们建议在函数 URL 上配置所有 CORS 设置,而不是在函数响应中手动发送 CORS 标头。

节流函数 URL

节流限制了函数处理请求的速率。这在很多情况下都很有用,比如防止函数过载下游资源,或者处理请求突然激增的情况。

通过配置预留并发,可以节流 Lambda 函数通过函数 URL 处理请求的速率。预留并发限制了函数的最大并发调用次数。函数的最大每秒请求速率 (RPS) 相当于配置的预留并发的 10 倍。例如,如果将函数配置为预留并发 100,则最大 RPS 为 1,000。

当函数并发超过预留并发时,函数 URL 将返回 HTTP 429 状态码。如果您的函数收到的请求超过了基于您配置的预留并发的最大 10 倍 RPS,那么您也会收到一个 HTTP 429 错误。有关预留并发的更多信息,请参阅 为函数配置预留并发

停用函数 URL

在紧急情况下,您可能希望拒绝函数 URL 的所有流量。要停用函数 URL,请将预留并发设置为零。这会节流对函数 URL 的所有请求,从而产生 HTTP 429 状态响应。要重新激活函数 URL,请删除预留的并发配置,或将配置设置为大于零的数量。

删除函数 URL

删除函数 URL 后,将无法恢复。创建一个新函数 URL 将导致不同的 URL 地址。

注意

如果您删除身份验证类型为 NONE 的函数 URL,Lambda 不会自动删除关联的基于资源的策略。如果要删除此策略,您必须手动执行该操作。

  1. 打开 Lamba 控制台的函数页面

  2. 选择此函数的名称。

  3. 选择 Configuration(配置)选项卡,然后选择 Function URL(函数 URL)。

  4. 选择删除

  5. 在此字段中输入 delete(删除)短语以确认删除。

  6. 选择删除

注意

删除具有函数 URL 的函数后,Lambda 会异步删除函数 URL。如果您立即在同一个账户中创建具有相同名称的新函数,则原始函数 URL 可能会被映射到新函数,而不是被删除。