

# 创建和管理 Lambda 函数 URL
<a name="urls-configuration"></a>

函数 URL 是 Lambda 函数的专用 HTTP(S) 端点。您可以通过 Lambda 控制台或 Lambda API 创建和配置函数 URL。

**提示**  
Lambda 提供了两种方法来通过 HTTP 端点调用函数：函数 URL 和 Amazon API Gateway。如果您不确定哪种方法最适合您的应用场景，请参阅[选择使用 HTTP 请求调用 Lambda 函数的方法](furls-http-invoke-decision.md)。

创建函数 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`)、亚太地区（新西兰）(`ap-southeast-6`)、亚太地区（泰国）(`ap-southeast-7`)、亚太地区（台北）(`ap-east-2`)、加拿大西部（卡尔加里）(`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 使用[基于资源的策略](access-control-resource-based.md)进行安全和访问控制。函数 URL 还支持跨源资源共享 (CORS) 配置选项。

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

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

**Topics**
+ [创建函数 URL（控制台）](#create-url-console)
+ [创建函数 URL (Amazon CLI)](#create-url-cli)
+ [向 CloudFormation 模板添加函数 URL](#urls-cfn)
+ [跨源资源共享 (CORS)](#urls-cors)
+ [节流函数 URL](#urls-throttling)
+ [停用函数 URL](#urls-deactivating)
+ [删除函数 URL](#w2aac39c81c53)
+ [控制对 Lambda 函数 URL 的访问](urls-auth.md)
+ [调用 Lambda 函数 URL](urls-invocation.md)
+ [监控 Lambda 函数 URL](urls-monitoring.md)
+ [选择使用 HTTP 请求调用 Lambda 函数的方法](furls-http-invoke-decision.md)
+ [教程：使用 Lambda 函数 URL 创建 Webhooook 端点](urls-webhook-tutorial.md)

## 创建函数 URL（控制台）
<a name="create-url-console"></a>

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

### 为现有函数创建函数 URL
<a name="create-url-existing-function"></a>

1. 打开 Lamba 控制台的[函数](https://console.amazonaws.cn/lambda/home#/functions)页面。

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

1. 选择 **Configuration**（配置）选项卡，然后选择 **Function URL**（函数 URL）。

1. 选择 **Create function URL**（创建函数 URL）。

1. 对于 **Auth type**（身份验证类型），选择 **AWS\$1IAM** 或 **NONE**。有关函数 URL 身份验证的更多信息，请参阅 [访问控制](urls-auth.md)。

1. （可选）选择 **Configure cross-origin resource sharing (CORS)**（配置跨源资源共享），然后为函数 URL 配置 CORS 设置。有关 CORS 的更多信息，请参阅 [跨源资源共享 (CORS)](#urls-cors)。

1. 选择**保存**。

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

### 为现有别名创建函数 URL
<a name="create-url-existing-alias"></a>

1. 打开 Lamba 控制台的[函数](https://console.amazonaws.cn/lambda/home#/functions)页面。

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

1. 选择 **Aliases**（别名）选项卡，然后选择要为其创建函数 URL 的别名的名称。

1. 选择 **Configuration**（配置）选项卡，然后选择 **Function URL**（函数 URL）。

1. 选择 **Create function URL**（创建函数 URL）。

1. 对于 **Auth type**（身份验证类型），选择 **AWS\$1IAM** 或 **NONE**。有关函数 URL 身份验证的更多信息，请参阅 [访问控制](urls-auth.md)。

1. （可选）选择 **Configure cross-origin resource sharing (CORS)**（配置跨源资源共享），然后为函数 URL 配置 CORS 设置。有关 CORS 的更多信息，请参阅 [跨源资源共享 (CORS)](#urls-cors)。

1. 选择**保存**。

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

### 创建具有函数 URL 的新函数
<a name="create-url-new-function"></a>

**创建具有函数 URL 的新函数（控制台）**

1. 打开 Lamba 控制台的 [Functions page](https://console.amazonaws.cn/lambda/home#/functions)（函数页面）。

1. 选择 **Create function**（创建函数）。

1. 在**基本信息**中，执行以下操作：

   1. 在 **Function name**（函数名称）中，输入您的函数的名称，例如 **my-function**。

   1. 对于**运行时**，请选择您首选的语言运行时，例如 **Node.js 24**。

   1. 对于 **Architecture**（架构），请选择 **x86\$164** 或 **arm64**。

   1. 展开 **Permissions**（权限），然后选择是创建新的执行角色还是使用现有的执行角色。

1. 展开 **Advanced settings**（高级设置），然后选择 **Function URL**（函数 URL）。

1. 对于 **Auth type**（身份验证类型），选择 **AWS\$1IAM** 或 **NONE**（无）。有关函数 URL 身份验证的更多信息，请参阅 [访问控制](urls-auth.md)。

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

1. 选择**创建函数**。

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

## 创建函数 URL (Amazon CLI)
<a name="create-url-cli"></a>

要使用 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-function** 的 **prod** 限定符中。有关这些配置参数的更多信息，请参阅 API 参考中的[CreateFunctionUrlConfig](https://docs.amazonaws.cn/lambda/latest/api/API_CreateFunctionUrlConfig.html)。

**注意**  
要通过 Amazon CLI 创建函数 URL，该函数必须已经存在。

## 向 CloudFormation 模板添加函数 URL
<a name="urls-cfn"></a>

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

### JSON
<a name="urls-cfn-json"></a>

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

### YAML
<a name="urls-cfn-yaml"></a>

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

### 参数
<a name="urls-cfn-params"></a>
+ （必需）`AuthType` – 定义函数 URL 的身份验证类型。可能的值为 `AWS_IAM` 或 `NONE`。若要将访问权限限制为仅经过身份验证的用户，请设置为 `AWS_IAM`。要绕过 IAM 身份验证并允许任何用户对您的函数发出请求，请设置为 `NONE`。
+ （可选）`Cors` – 定义函数 URL 的 [CORS settings](#urls-cors)（CORS 设置）。要在 CloudFormation 中向 `Amazon::Lambda::Url` 资源添加 `Cors`，请使用以下语法。

    
**Example Amazon::Lambda::Url.Cors (JSON)**  

  ```
  {
    "AllowCredentials" : Boolean,
    "AllowHeaders" : [ String, ... ],
    "AllowMethods" : [ String, ... ],
    "AllowOrigins" : [ String, ... ],
    "ExposeHeaders" : [ String, ... ],
    "MaxAge" : Integer
  }
  ```  
**Example Amazon::Lambda::Url.Cors (YAML)**  

  ```
    AllowCredentials: Boolean
    AllowHeaders: 
      - String
    AllowMethods: 
      - String
    AllowOrigins: 
      - String
    ExposeHeaders: 
      - String
    MaxAge: Integer
  ```
+ （可选）`Qualifier` – 别名。
+ （必需）`TargetFunctionArn` – Lambda 函数的名称或 Amazon 资源名称（ARN）。有效的名称格式包括：
  + **函数名称** – `my-function`
  + **函数 ARN** – `arn:aws:lambda:us-west-2:123456789012:function:my-function`
  + **部分 ARN** – `123456789012:function:my-function`

## 跨源资源共享 (CORS)
<a name="urls-cors"></a>

要定义不同来源如何访问函数 URL，请使用 [跨源资源共享 (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)。如果要从其他域调用函数 URL，建议配置 CORS。Lambda 支持函数 URL 的以下 CORS 标头。


| CORS 标头 | CORS 配置属性 | 示例值 | 
| --- | --- | --- | 
|  [ Access-Control-Allow-Origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)  |  `AllowOrigins`  |  `*`（允许所有源） `https://www.example.com` `http://localhost:60905`  | 
|  [ Access-Control-Allow-Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods)  |  `AllowMethods`  |  `GET`, `POST`, `DELETE`, `*`  | 
|  [ Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)  |  `AllowHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Expose-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers)  |  `ExposeHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Allow-Credentials](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)  |  `AllowCredentials`  |  `TRUE`  | 
|  [ Access-Control-Max-Age](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/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
<a name="urls-throttling"></a>

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

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

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

## 停用函数 URL
<a name="urls-deactivating"></a>

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

## 删除函数 URL
<a name="w2aac39c81c53"></a>

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

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

1. 打开 Lamba 控制台的[函数](https://console.amazonaws.cn/lambda/home#/functions)页面。

1. 选择此函数的名称。

1. 选择 **Configuration**（配置）选项卡，然后选择 **Function URL**（函数 URL）。

1. 选择**删除**。

1. 在此字段中输入 *delete*（删除）短语以确认删除。

1. 选择**删除**。

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