

# Lambda 関数 URL の作成と管理
<a name="urls-configuration"></a>

関数 URL は、Lambda 関数のための専用 HTTP エンドポイントです。関数 URL の作成と設定には、Lambda コンソールまたは Lambda API を使用します。

**ヒント**  
Lambda には、HTTP エンドポイントを介して関数を呼び出す 2 つの方法として、関数 URL および Amazon API Gateway が用意されています。ユースケースに最適な方法がわからない場合、「[HTTP リクエストを使用して Lambda 関数を呼び出す方法を選択する](furls-http-invoke-decision.md)」を参照してください。

関数 URL を作成すると、一意の URL エンドポイントが Lambda により自動的に生成されます。関数 URL を作成した後に、その URL エンドポイントが変更されることはありません。関数 URL のエンドポイントでは、次の形式を使用します。

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

**注記**  
関数 URL がサポートされていない 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`)、および中東 (UAE) (`me-central-1`) です。

関数 URL はデュアルスタックに対応しており、IPv4 と IPv6 をサポートしています。関数のために URL を設定した後は、ウェブブラウザ、curl、Postman、または任意の HTTP クライアントから HTTP エンドポイントを介して、その関数を呼び出せるようになります。

**注記**  
関数 URL には、パブリックインターネット経由でしかアクセスできません。Lambda 関数は AWS PrivateLink をサポートしていますが、関数 URL ではサポートされません。

Lambda 関数 URL では、セキュリティとアクセスコントロールのために、[リソースベースのポリシー](access-control-resource-based.md)を使用します。また、Cross-Origin Resource Sharing (CORS) 設定オプションを、関数 URL に設定することも可能です。

関数 URL は、任意の関数エイリアス、もしくは `$LATEST` の未公開な関数バージョンに対して適用できます。関数 URL は、他の関数バージョンに追加することはできません。

次のセクションでは、Lambda コンソール、AWS CLI、および CloudFormation テンプレートを使用して関数 URL を作成し、管理する方法を説明します。

**Topics**
+ [関数 URL の作成 (コンソール)](#create-url-console)
+ [関数 URL の作成 (AWS 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 を使用したウェブフックエンドポイントの作成](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. (オプション) **[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. 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. (オプション) **[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. 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)]** (Cross-Origin Resource Sharing (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
```

これにより、**my-function** 関数の **prod** 修飾子に関数 URL が追加されます。これらの構成パラメータの詳細については、API リファレンスの「[CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html)」を参照してください。

**注記**  
AWS CLI を介して関数 URL を作成するには、対象の関数が既に存在している必要があります。

## CloudFormation テンプレートへの関数 URL の追加
<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
```

### パラメータ
<a name="urls-cfn-params"></a>
+ (必須) `AuthType` – 関数 URL で使用する認証のタイプを定義します。これに使用できる値は、`AWS_IAM` または `NONE` です。アクセスを認証されたユーザーのみに制限するには、`AWS_IAM` に設定します。IAM 認証をバイパスし、任意のユーザーが関数にリクエストを送信できるようにするには、`NONE` をセットします。
+ (オプション) `Cors` – 関数 URL のための [CORS 設定](#urls-cors)を定義します。CloudFormation 内の `AWS::Lambda::Url` リソースに `Cors` を追加するには、次の構文を使用します。

    
**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 リソースネーム (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 へのアクセス方法を定義するには、[Cross-Origin Resource Sharing (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 コンソールまたは AWS 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`」のようなエラーが表示されることがあります。

一般に、関数のレスポンスで CORS ヘッダーを手動で送信するのではなく、関数 URL ですべての CORS 設定を構成することをお勧めします。

## 関数 URL のスロットリング
<a name="urls-throttling"></a>

スロットリングは、関数がリクエストを処理するレートを制限します。これは、関数からダウンストリームリソースに過剰な負荷がかからないようにしたり、リクエストの急増に対応するなど、多くの状況で役立ちます。

予約済み同時実行数を設定することで、関数 URL を介して Lambda 関数が処理するリクエストのレートをスロットリングできます。予約済み同時実行数は、関数を同時に呼び出せる最大数を制限します。関数に対する 1 秒あたりの最大リクエストレート (RPS) は、設定された予約済み同時実行数の 10 倍に相当します。例えば、関数の予約済み同時実行数を 100 に設定すると、最大 RPS は 1,000 になります。

関数の同時実行数が、予約済み同時実行数を超えるたびに、関数 URL は HTTP ステータスコードの `429` を返します。設定された予約済み同時実行数を基に、それを 10 倍した最大の RPS 値を超えるリクエストを関数が受信した場合は、ユーザーに対しても HTTP の `429` エラーが表示されます。予約済み同時実行数の詳細については、「[関数に対する予約済み同時実行数の設定](configuration-concurrency.md)」を参照してください。

## 関数 URL の非アクティブ化
<a name="urls-deactivating"></a>

緊急時には、関数 URL へのすべてのトラフィックを拒否する必要が生じることがあります。関数 URL を非アクティブ化するには、予約済み同時実行数を 0 に設定します。これにより、関数 URL へのすべてのリクエストがスロットリングされ、HTTP ステータスレスポンスには `429` が返されます。関数 URL を再アクティブ化するには、予約済み同時実行数を 1 以上の値に設定するか、この設定全体を削除します。

## 関数 URL の削除
<a name="w2aac39c81c53"></a>

関数の URL を削除すると、元に戻すことはできません。新しい関数 URL を作成すると、異なる URL アドレスになります。

**注記**  
認証タイプ `NONE` で関数 URL を削除した場合、Lambda では、関連するリソースベースのポリシーが自動的に削除されません。このポリシーを削除する場合は、手動で削除する必要があります。

1. Lambda コンソールの [[関数]](https://console.aws.amazon.com/lambda/home#/functions) ページを開きます。

1. 関数の名前を選択します。

1. **[設定]** タブを開き、次に **[関数 URL]** をクリックします。

1. **[削除]** を選択します。

1. フィールドに「delete」と入力して、削除を確認します。**

1. **[削除]** を選択します。

**注記**  
関数 URL を持つ関数を削除すると、Lambda により関数 URL が非同期的に削除されます。同じアカウントで同じ名前の新しい関数をすぐに作成した場合、元の関数 URL は削除されず、新しい関数にマッピングされる可能性があります。