

# API Gateway での REST API の API エンドポイントタイプ
<a name="api-gateway-api-endpoint-types"></a>

*[API エンドポイント](api-gateway-basic-concept.md#apigateway-definition-api-endpoints)*タイプは、API のホスト名を参照します。API エンドポイントタイプは、API トラフィックの大部分の発信元となっている場所に応じて、*エッジ最適化*、*リージョン別*、または*プライベート*とすることができます。

## エッジ最適化 API エンドポイント
<a name="api-gateway-api-endpoint-types-edge-optimized"></a>

*[エッジ最適化 API エンドポイント](api-gateway-basic-concept.md#apigateway-definition-edge-optimized-api-endpoint)*は通常、リクエストを最寄りの CloudFront POP (Point of Presence) にルーティングします。これは、クライアントが地理的に分散されている場合に役立ちます。これは、API Gateway REST API のデフォルトのエンドポイントタイプです。

エッジ最適化された API では、[HTTP ヘッダー](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)の名前の最初の文字は大文字になります (例: `Cookie`)。

CloudFront は、リクエストをオリジンに転送する前に、Cookie 名の自然な順序で HTTP Cookie を並べ替えます。CloudFront が Cookie を処理する方法の詳細については、「[Cookie に基づいたコンテンツのキャッシュ](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html)」を参照してください。

エッジ最適化された API に使用するカスタムドメイン名はすべてのリージョンに適用されます。

## リージョン API エンドポイント
<a name="api-gateway-api-endpoint-types-regional"></a>

*[リージョン API エンドポイント](api-gateway-basic-concept.md#apigateway-definition-regional-api-endpoint)*は、同じリージョン内のクライアントを対象としています。EC2 インスタンスで実行されているクライアントが同じリージョン内の API を呼び出すか、API が要求の高い少数のクライアントへのサービスを目的としている場合、リージョン API は接続のオーバーヘッドを減らします。

リージョン API の場合、ユーザーが使用するカスタムドメイン名は API がデプロイされているリージョンに固有です。複数のリージョンでリージョン別 API をデプロイする場合、すべてのリージョンで同じカスタムドメイン名を使用できます。カスタムドメインを Amazon Route 53 と組み合わせて使用すると、[レイテンシーベースのルーティング](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html#routing-policy-latency)などのタスクを実行できます。詳細については、「[API Gateway でリージョン別カスタムドメイン名を設定する](apigateway-regional-api-custom-domain-create.md)」および「[API Gateway でエッジ最適化カスタムドメイン名を設定する](how-to-edge-optimized-custom-domain-name.md)」を参照してください。

リージョン別 API エンドポイントは、すべてのヘッダー名をそのまま渡します。

**注記**  
API クライアントが地理的に分散している場合にも、リージョン API エンドポイントを独自の Amazon CloudFront ディストリビューションと一緒に使用するのが合理的です。この場合、API Gateway は、サービスが制御する CloudFront ディストリビューションに API を関連付けないようにします。このユースケースの詳細については、「[独自の CloudFront ディストリビューションで API Gateway をセットアップする方法を教えてください](https://repost.aws/knowledge-center/api-gateway-cloudfront-distribution)」を参照してください。

## プライベート API エンドポイント
<a name="api-gateway-api-endpoint-types-private"></a>

*[プライベート API エンドポイント](api-gateway-basic-concept.md#apigateway-definition-private-api-endpoint)*は、Amazon Virtual Private Cloud (VPC) からしかアクセスできない API エンドポイントです。インターフェイス VPC エンドポイントは、VPC 内に作成するエンドポイントネットワークインターフェイス (ENI) です。詳細については、「[API Gateway のプライベート REST API](apigateway-private-apis.md)」を参照してください。

Private API エンドポイントは、すべてのヘッダー名をそのまま渡します。

# API Gateway で API エンドポイントタイプを変更する (パブリックまたはプライベート)
<a name="apigateway-api-migration"></a>

API エンドポイントタイプを変更するには、API の設定を更新する必要があります。API Gateway コンソール、AWS CLI、または API Gateway 用の AWS SDK を使用して、既存の API タイプを変更できます。現在の変更が完了するまでそのエンドポイントタイプを再度変更することはできませんが、API は使用可能になります。

次のエンドポイントタイプの変更がサポートされています。
+ エッジ最適化からリージョンまたはプライベートへ
+ リージョンからエッジ最適化またはプライベートへ
+ プライベートからリージョンへ

プライベート API をエッジ最適化 API に変更することはできません。

パブリック API をエッジ最適化からリージョン、またはその逆に変更する場合、エッジ最適化 API とリージョン API とでは動作が異なることがあります。たとえば、エッジ最適化 API は `Content-MD5` ヘッダーを削除します。バックエンドに渡される MD5 ハッシュ値はすべて、リクエスト文字列パラメータまたは body プロパティで表現できます。ただし、リージョン API は (ヘッダー名を別の名前に再マップする場合がありますが) このヘッダーを渡します。この違いを理解することは、エッジ最適化 API をリージョン API に更新する方法、またはリージョン API をエッジ最適化 API に更新する方法を決めるのに役立ちます。

**Topics**
+ [API Gateway コンソールを使用して API エンドポイントの種類を変更する](#migrate-api-using-console)
+ [AWS CLI を使用して API エンドポイントタイプを変更する](#migrate-api-using-aws-cli)

## API Gateway コンソールを使用して API エンドポイントの種類を変更する
<a name="migrate-api-using-console"></a>

API の API エンドポイントタイプを変更するには、次の一連の手順のいずれかを実行します。

**エンドポイントをリージョン別またはエッジ最適化 (またはその逆) からパブリックに変換するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. REST API を選択します。

1. **[API 設定]** を選択します。

1. **[API の詳細]** セクションで **[編集]** を選択します。

1. **API エンドポイントタイプ**には、**[エッジ最適化]** または **[リージョン別]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

1. API を再デプロイします。これにより変更が有効になります。

**プライベートエンドポイントをリージョンエンドポイントに変換するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. REST API を選択します。

1. VPC の外部からの API コールも VPC 内部と同様に成功するように、API のリソースポリシーを編集して、VPC または VPC エンドポイントの指定を削除します。

1. **[API 設定]** を選択します。

1. **[API の詳細]** セクションで **[編集]** を選択します。

1. **[API エンドポイントタイプ]** で、**[リージョン別]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

1. リソースポリシーを API から削除します。

1. API を再デプロイします。これにより変更が有効になります。

   エンドポイントタイプをプライベートからリージョンに移行するため、API Gateway によって IP アドレスタイプが IPv4 に変更されます。詳細については、「[API Gateway の REST API の IP アドレスタイプ](api-gateway-ip-address-type.md)」を参照してください。

**リージョンエンドポイントをプライベートエンドポイントに変換するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. REST API を選択します。

1. VPC または VPC エンドポイントへのアクセスを許可するリソースポリシーを作成します。詳細については、「[ステップ 3: プライベート API のリソースポリシーをセットアップする](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy)」を参照してください。

1. **[API 設定]** を選択します。

1. **[API の詳細]** セクションで **[編集]** を選択します。

1. **[API エンドポイントタイプ]** で、**[プライベート]** を選択します。

1. (オプション) **[VPC エンドポイント ID]** で、プライベート API と関連付ける VPC エンドポイント の ID を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

1. API を再デプロイします。これにより変更が有効になります。

   エンドポイントタイプをリージョンからプライベートに移行するため、API Gateway によって IP アドレスタイプがデュアルスタックに変更されます。詳細については、「[API Gateway の REST API の IP アドレスタイプ](api-gateway-ip-address-type.md)」を参照してください。

## AWS CLI を使用して API エンドポイントタイプを変更する
<a name="migrate-api-using-aws-cli"></a>

次の [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) コマンドは、エッジ最適化 API をリージョン別 API に更新します。

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/EDGE,value=REGIONAL
```

成功のレスポンスには、`200 OK` ステータスコードと以下のようなペイロードが含まれます。

```
{
    "createdDate": "2017-10-16T04:09:31Z",
    "description": "Your first API with Amazon API Gateway. This is a sample API that integrates via HTTP with our demo Pet Store endpoints",
    "endpointConfiguration": {
        "types": "REGIONAL"
    },
    "id": "a1b2c3",
    "name": "PetStore imported as edge-optimized"
}
```

次の [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) コマンドは、リージョン別 API をエッジ最適化 API に更新します。

```
aws apigateway update-rest-api \
    --rest-api-id a1b2c3 \
    --patch-operations op=replace,path=/endpointConfiguration/types/REGIONAL,value=EDGE
```

[put-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/put-rest-api.html) は API 定義の更新用なので、API エンドポイントタイプの更新には適用されません。