

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立及管理 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
```

**注意**  
下列 不支援函數 URLs AWS 區域：亞太區域 （海德拉巴） (`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) 端點呼叫函數。

**注意**  
您只能透過公有網際網路存取您的函數 URL。雖然 Lambda 函數確實支援 AWS PrivateLink，但函數 URL 不支援。

Lambda 函數 URL 使用[以資源為基礎的政策](access-control-resource-based.md)，妥善控管安全性和存取權。函數 URL 也支援跨來源資源共用 (CORS) 組態選項。

您可以將函數 URL 套用至任何函數別名或未發佈的`$LATEST`函數版本。函數 URL 無法新增至其他任何函數版本。

下一節說明如何使用 Lambda 主控台和 CloudFormation 範本建立 AWS CLI和管理函數 URL

**Topics**
+ [建立函數 URL (主控台)](#create-url-console)
+ [建立函數 URL (AWS CLI)](#create-url-cli)
+ [將函數 URL 新增至 CloudFormation 範本](#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 建立 Webhook 端點](urls-webhook-tutorial.md)

## 建立函數 URL (主控台)
<a name="create-url-console"></a>

請遵循下列步驟，使用主控台建立函數 URL。

### 為現有函數建立函數 URL
<a name="create-url-existing-function"></a>

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇您要為其建立函數 URL 的函數名稱。

1. 選擇 **Configuration** (組態) 標籤，然後選擇 **Function URL** (函數 URL)。

1. 選擇 **Create function URL** (建立函數 URL)。

1. 為 **Auth type** (驗證類型) 選擇 **AWS\_IAM** 或 **NONE** (無)。如需函數 URL 身分驗證的詳細資訊，請參閱[存取控制](urls-auth.md)。

1. (選用) 選取 **Configure cross-origin resource sharing (CORS)** (設定跨來源資源共享 (CORS))，然後完成函數 URL 的 CORS 設定。如需 CORS 的詳細資訊，請參閱「[跨來源資源共享 (CORS)](#urls-cors)」。

1. 選擇**儲存**。

這樣即可為 `$LATEST` 未發佈版本的函數建立函數 URL。函數 URL 會顯示於主控台的 **Function overview** (函數概觀) 區段。

### 為現有別名建立函數 URL
<a name="create-url-existing-alias"></a>

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 找到您要為其建立函數 URL 的函數別名，選擇其函數名稱。

1. 選擇 **Aliases** (別名) 標籤，接著找到您要為其建立函數 URL 的函數別名，選擇該別名的名稱。

1. 選擇 **Configuration** (組態) 標籤，然後選擇 **Function URL** (函數 URL)。

1. 選擇 **Create function URL** (建立函數 URL)。

1. 為 **Auth type** (驗證類型) 選擇 **AWS\_IAM** 或 **NONE** (無)。如需函數 URL 身分驗證的詳細資訊，請參閱[存取控制](urls-auth.md)。

1. (選用) 選取 **Configure cross-origin resource sharing (CORS)** (設定跨來源資源共享 (CORS))，然後完成函數 URL 的 CORS 設定。如需 CORS 的詳細資訊，請參閱「[跨來源資源共享 (CORS)](#urls-cors)」。

1. 選擇**儲存**。

這樣即可為函數別名建立函數 URL。函數 URL 會顯示於主控台中別名的 **Function overview** (函數概觀) 區段。

### 使用函數 URL 建立新函數
<a name="create-url-new-function"></a>

**建立具有函數 URL 的新函數 (主控台)**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇**建立函數**。

1. 在**基本資訊**下，請執行下列動作：

   1. 為 **Function name** (函數名稱) 輸入您函數的名稱，例如 **my-function**。

   1. 針對**執行時間**，選擇您偏好的語言執行時間，例如 **Node.js 24**。

   1. 為 **Architecture** (架構) 選擇 **x86\_64** 或 **arm64**。

   1. 展開 **Permissions** (許可)，接著選擇建立新的執行角色或使用現有角色。

1. 展開 **Advanced settings** (進階設定)，然後選取 **Function URL** (函數 URL)。

1. 為 **Auth type** (驗證類型) 選擇 **AWS\_IAM** 或 **NONE** (無)。如需函數 URL 身分驗證的詳細資訊，請參閱[存取控制](urls-auth.md)。

1. (選用) 選取 **Configure cross-origin resource sharing (CORS)** (設定跨來源資源共享 (CORS))。只要您在建立函數的過程中選取此選項，在預設情形下，您的函數 URL 就能允許所有來源的請求。建立函數後，您可以編輯函數 URL 的 CORS 設定。如需 CORS 的詳細資訊，請參閱「[跨來源資源共享 (CORS)](#urls-cors)」。

1. 選擇**建立函數**。

這樣即可為 `$LATEST` 未發佈版本的函數建立具有函數 URL 的新函數。函數 URL 會顯示於主控台的 **Function overview** (函數概觀) 區段。

## 建立函數 URL (AWS CLI)
<a name="create-url-cli"></a>

若要使用 AWS Command Line Interface (AWS 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.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html)。

**注意**  
若要透過 建立函數 URL AWS CLI，函數必須已存在。

## 將函數 URL 新增至 CloudFormation 範本
<a name="urls-cfn"></a>

若要將 `AWS::Lambda::Url` 資源新增至 CloudFormation 範本，請使用下列語法：

### 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
```

### Parameters
<a name="urls-cfn-params"></a>
+ (必要) `AuthType` – 定義函數 URL 的身分驗證類型。可能的值為 `AWS_IAM` 或 `NONE`。如果您希望只讓完成身分驗證的使用者存取，請設為 `AWS_IAM`。如要繞過 IAM 身分驗證，並允許任何使用者向您的函數提出請求，請設為 `NONE`。
+ (選用) `Cors` – 定義函數 URL 的 [CORS 設定](#urls-cors)。如要將 `Cors` 新增至 CloudFormation 中的 `AWS::Lambda::Url` 資源，請使用下列語法。

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

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

  ```
    AllowCredentials: Boolean
    AllowHeaders: 
      - String
    AllowMethods: 
      - String
    AllowOrigins: 
      - String
    ExposeHeaders: 
      - String
    MaxAge: Integer
  ```
+ (選用) `Qualifier` – 別名名稱。
+ (必要) `TargetFunctionArn` - Lambda 函數的名稱或 Amazon Resource Name (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` | `*` (允許所有來源)<br />`https://www.example.com`<br />`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 主控台或 設定函數 URL 的 CORS 時 AWS CLI，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 收到的所有請求，進而使 URL 傳回 HTTP `429` 狀態回應。如要重新啟動函數 URL，請刪除預留並行的組態，或將組態設為大於零的數量。

## 刪除函數 URL
<a name="w2aac39c81c53"></a>

當您刪除函數 URL，您就無法復原。建立新函數 URL 會產生不同的 URL 地址。

**注意**  
如果您刪除具有驗證類型 `NONE` 的函數 URL，Lambda 不會自動刪除關聯的資源型政策。如果您想要刪除此政策，則必須手動執行。

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇函數的名稱。

1. 選擇 **Configuration** (組態) 標籤，然後選擇 **Function URL** (函數 URL)。

1. 選擇 **刪除**。

1. 將 *delete* 一詞輸入欄位以確認刪除。

1. 選擇 **刪除**。

**注意**  
當您刪除具有函數 URL 的函數時，Lambda 會非同步刪除相應的函數 URL。如果您立即在相同帳戶中建立具有相同名稱的新函數，則原來的函數 URL 可能會映射到新的函數，而不會被刪除。