独自の CloudFront ディストリビューションで API Gateway を設定するにはどうすればよいですか?

最終更新日: 2022 年 6 月 27 日

エッジ最適化された API エンドポイントが Amazon API Gateway に必要ですが、Amazon CloudFront ディストリビューションをより詳細に制御する必要があります。独自のディストリビューションを作成して使用するにはどうすればよいですか?

簡単な説明

API クライアントが地理的に分散されている場合は、エッジ最適化された API エンドポイントが API Gateway の使用を検討してください。このタイプのエンドポイントは、AWS マネージドの CloudFront ウェブディストリビューションのリージョンエンドポイントとして機能し、クライアントの接続時間を改善します。

グローバル CloudFront コンテンツ配信ネットワークを使用し、ディストリビューションをより詳細に制御するには、カスタム CloudFront ウェブディストリビューションリージョン API を使用します。

解決方法

API Gateway でリージョン API を作成します。その後、次を実行します:

API の GET メソッドをセットアップする

1.    API Gateway コンソールで、新しいリージョンの API の名前を選択します。

2.    [Resources] (リソース) パネルで [Actions] (アクション) を選択します。その後、[Create Method] (メソッドの作成) を選択します。/ resource ノードの下にリストが表示されます。

3.    リストから [GET] を選択します。チェックマークアイコンを選択します。

4.    / - GET - Setup で、[Integration type] (統合タイプ) で [Mock] (モック) を選択します。その後、[Save] (保存) を選択します。
: モック統合は到達したすべての要求に応答するもので、テストに役立ちます。

API をデプロイし、API の呼び出し URL を特定する

1.    API をステージにデプロイします。

2.    [Stage Editor] (ステージエディタ) ペインの上部で、[Invoke URL] (URL を呼び出す) をクリップボードにコピーします。

API Gateway API 呼び出しの URL の例

https://restApiId.execute-api.region.amazonaws.com/stageName.

「200 OK」レスポンスについて API をテストする

API が「200 OK」レスポンスを返すことを確認するには、API Gateway コンソール、Postman アプリ、または curl を使用して API の呼び出し URL をテストします。

curl を使用して「200 OK」レスポンスについて API をテストするには

オペレーティングシステムに基づいて、次のコマンドを実行します。

注: 次のいずれかのコマンドを実行する前に、https://restApiId.execute-api.region.amazonaws.com/stageName を API の呼び出し URL に置き換えてください。

Linux の場合は、次のコマンドを実行します。

curl -IX GET https://restApiId.execute-api.region.amazonaws.com/stageName

Windows PowerShell の場合は、次のコマンドを実行します。

curl https://restApiId.execute-api.region.amazonaws.com/stageName

注: 200 OK レスポンス以外のステータスコードが表示される場合は、コンソールで次のことを確認します。
API がステージにデプロイされていること。
ステージが呼び出し URL で指定されていること。

CloudFront ウェブディストリビューションを作成する

1.    CloudFront コンソールで、[Create Distribution (ディストリビューションの作成)] を選択します。

2.    [Select a delivery method for your content] (コンテンツの配信方法を選択) のページにある [Web] (ウェブ) で、[Get Started] (今すぐ始める) を選択します。

3.    [Create Distribution] (ディストリビューションを作成) のページの [Origin Domain Name] (オリジンのドメイン名) で、API の invoke URL を貼り付けます。その後、ステージ名を削除します。

オリジンドメイン名の例

https://1a2bc3d456.execute-api.us-east-1.amazonaws.com

4.    [Origin Path] (オリジンパス) で、API のステージ名を先頭にスラッシュを付けて (/stageName) 入力します。または、URL を呼び出すときにステージ名を自分で入力する場合は、[Origin Path] (オリジンパス) を入力しないでください。
注: CloudFront ディストリビューションを呼び出すときに Origin Path に誤ったステージ名を入力すると、エラーが発生することがあります。 例えば、「Missing Authentication Token」(認証トークンがありません) というメッセージを返す承認されていないリクエストエラーや、「403 Forbidden」(403 禁止) レスポンスコードなどです

5.    [Minimum Origin SSL Protocol] (最小オリジン SSL プロトコル) で、[TLSv1.2] を選択することをお勧めします。[SSLv3] は選択しないでください。API Gateway は SSLv3 プロトコルをサポートしていません。

6.    [Origin Protocol Policy] (オリジンプロトコルポリシー) で、[HTTPS Only] (HTTPS のみ) を選択します。
注: API Gateway は暗号化されていない (HTTP) エンドポイントをサポートしていません。詳細については、Amazon API Gateway に関するよくある質問を参照してください。

7.    (オプション) オリジンにカスタムヘッダーを転送するには、オリジンカスタムヘッダーに 1 つ以上のカスタムヘッダーを入力します。
注: CloudFront がオリジンに転送できないカスタムヘッダーがあります。

8.    API に IAM 認証を使用している場合、またはディストリビューションにカスタムドメイン名を使用している場合のセクションの手順に従います (該当する場合)。

9.    (オプション) [Distribution Settings] (ディストリビューション設定) で、カスタマイズする追加設定を構成します。

10.    [Create Distribution] (ディストリビューションを作成) を選択します。

11.    ディストリビューションがデプロイされるまで待ちます。これには 15~20 分かかります。コンソールで [Status] (ステータス) が [Deployed] (デプロイ済み) と表示されると、ディストリビューションは準備完了です。

詳細については、ディストリビューションの作成を参照してください。

CloudFront ウェブディストリビューションをテストする

1.    CloudFront コンソールで、自分のディストリビューションのドメイン名をクリップボードにコピーします。

カスタムドメイン名の例

a222222bcdefg5.cloudfront.net.

2.    前出の「API をテストする」セクションで述べたコマンドのいずれかを使用して、「200 OK」レスポンスのドメイン名をテストします。「500 server error」(500 サーバーエラー) コードが表示された場合は、ディストリビューションがデプロイされない場合があります。レスポンスがない場合は、CloudFront DNS レコードが伝達されていません。いずれの場合も、ディストリビューションを作成してから 15~20 分経過していることを確認してください。その後、手順を再試行します。

重要: 特定の API リソースのメソッドで AWS Identity and Access Management (IAM) 認証を有効にした場合、API を呼び出すときにディストリビューションドメイン名の末尾にリソース名を追加する必要があります。完全な呼び出し URL (リソース名を含む) は、次の例のいずれかのようになります。出力は、ディストリビューションを作成したときに [Origin Path] (オリジンパス) を入力したかどうかによって異なります。

API Gateway API がオリジンパスを含む URL を呼び出す例

https://distributionDomainName/stageName/resourceName

API Gateway API がオリジンパスを含まない URL を呼び出す例

https://distributionDomainName/resourceName

テストの詳細については、「API Gateway API の IAM 認証を有効にするにはどうすればよいですか?」を参照してください。

これで、作成したウェブディストリビューションが API で使用されます。リソースは API CloudFront URL からアクセスできます。

API に IAM 認証を使用している場合、または CloudFront ウェブディストリビューション用にカスタムドメイン名を使用している場合

デフォルトでは、CloudFront は受信 Authorization ヘッダーをオリジン (このユースケースでは API Gateway) に転送しません。API に IAM 認証を使用している場合、またはディストリビューションにカスタムドメイン名を使用している場合は、次のいずれかの操作を行う必要があります。

(IAM 認証の場合) CloudFront 許可リストに認証ヘッダーを追加する

1.    この記事の「CloudFront ウェブディストリビューションを作成する」のセクションのステップ 1~7 を実行します (まだ完了していない場合)。

2.    [Create Distribution] (ディストリビューションを作成) ページの [Cache and origin request settings] (キャッシュとオリジンリクエストの設定) で、[Use a cache policy and origin request policy] (キャッシュポリシーとオリジンリクエストポリシーを使用) を選択します。その後、[Cache Policy] (キャッシュポリシー) で、既存のキャッシュポリシーを選択するか、CloudFront 許可リストに Authorization ヘッダーを追加する新しいキャッシュポリシーを作成します。

3.    既存のキャッシュポリシーを使用する場合は、[Cache Based on Selected Request Headers] (選択したリクエストヘッダーに基づくキャッシュ) で、[Whitelist] (ホワイトリスト) を選択します。その後、[Whitelist Headers] (ホワイトリストのヘッダー) で、許可されるヘッダーのリストに Authorization を追加します。

重要: [Cache Based on Selected Request Headers] (選択したリクエストヘッダーに基づくキャッシュ) 設定を [All] (すべて) に変更した場合、または Host ヘッダーを許可した場合、セットアップは機能しません。詳細については、リクエストヘッダーに基づくコンテンツのキャッシュを参照してください。

4.    (オプション) セットアップをテストするには、次の手順を実行します。
プログラムで API Gateway エンドポイントに必要な Signature Version 4 署名を作成します。ホストの値には、API Gateway 呼び出し URL を入力します。エンドポイントの値には、CloudFront ウェブディストリビューション URL を入力します。

API Gateway 呼び出し URL の例

<api-id>.execute.<region>.amazon.com

CloudFront ウェブディストリビューション URL の例

dxxxxx.cloudfront.net

注: Postman アプリを使用している場合は、[Authorization] (認証) タブの [Type] (種類) で、[AWS Signature] (AWS 署名) を選択します。その後、[Access Key] (アクセスキー) と [Secret Key] (シークレットキー) を入力します。必要なヘッダーは、入力した認証情報を使用して Postman によって生成されます。

その後、Signature Version 4 プロセスから生成された Authorization ヘッダー (およびすべての SignedHeaders) を使用して、API リクエストを CloudFront ディストリビューションに送信します。

(カスタムドメイン名または IAM 認証の場合) API Gateway で Regional Custom ドメイン名を設定して API にアクセスする

1.    API Gateway で新しい Regional API を作成するか、エッジ最適化された API Gateway API を Regional API に変更します。

2.    API の Regional カスタムドメイン名を設定し、API の API マッピングを作成します。
注: CloudFront を介して API にアクセスする場合は、このカスタムドメイン名を使用します。

3.    この記事の CloudFront ウェブディストリビューションを作成するのセクションの手順に従って、CloudFront ウェブディストリビューションを作成します。ただし、1 つだけ異なる点があります。ステップ 3 で、[Origin Domain Name] (オリジンドメイン名) に、API の呼び出し URL ではなく API Gateway のターゲットドメイン名を入力します。
注: API Gateway ターゲットドメイン名は、カスタムドメインの詳細の [Endpoint] (エンドポイント) 設定で確認します。

API Gateway ターゲットドメイン名の例

d-xxxx..execute-api.<region>.amazonaws.com

4.    [Create Distribution] (ディストリビューションを作成) ページの [Cache and origin request settings] (キャッシュとオリジンリクエストの設定) で、[Use a cache policy and origin request policy] (キャッシュポリシーとオリジンリクエストポリシーを使用) を選択します。その後、[Cache Policy] (キャッシュポリシー) で、既存のキャッシュポリシーを選択するか、CloudFront 許可リストに Authorization および Host ヘッダーを追加する新しいキャッシュポリシーを作成します。

5.    既存のキャッシュポリシーを使用する場合は、[Cache Based on Selected Request Headers] (選択したリクエストヘッダーに基づくキャッシュ) で、[Whitelist] (ホワイトリスト) を選択します。その後、[Whitelist Headers] (ホワイトリストのヘッダー) で、許可されるヘッダーのリストに Authorization および Host を追加します。

6.    [Distribution Settings] (ディストリビューション設定) の [Alternate Domain Name] (代替ドメイン名) で、作成したカスタムドメイン名を入力します。

7.    [SSL Certificate] (SSL 証明書) で [Custom SSL Certificate] (独自 SSL 証明書) を選択します。その後、そのドメインの AWS Certificate Manager (ACM) 証明書を追加します。

8.CloudFront ウェブディストリビューションをデプロイした後、カスタムドメインを CloudFront ウェブディストリビューションにマッピングするように DNS レコードを設定します。これを実行するには、エイリアスまたは CNAME レコードを作成します。詳細については、「Using custom URLs for files by adding alternate domain names (CNAMEs)」(代替ドメイン名 (CNAME) を追加してカスタム URL を使用する) を参照してください。

9.    (オプション) 設定をテストするには、プログラムでカスタムドメイン名の Signature Version 4 署名リクエストを作成します。
注: Postman アプリを使用してセットアップをテストできます。