独自の CloudFront ディストリビューションで API Gateway を設定する方法を教えてください。

最終更新日: 2019 年 1 月 11 日

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

簡単な説明

API クライアントが地理的に分散している場合は、API Gateway でエッジ最適化された API エンドポイントが必要になる場合があります。このタイプのエンドポイントは、リージョンのエンドポイントのように動作しますが、クライアントの接続時間を短縮するために AWS マネージド型の CloudFront ウェブディストリビューションが前面にあります。

ただし、配信をより詳細に制御しながら、グローバルな CloudFront コンテンツ配信ネットワークの利点を得ることができます。この設定では、リージョン API を使用して、カスタム CloudFront ディストリビューションをその前に手動で割り当てます。

解決方法

API Gateway でリージョン API を作成し、以下の手順に従います。

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

  1. API Gateway コンソールで、新しいリージョンの API の名前を選択します。
  2. [Resources] ペインで [Actions] を選択し、[Create Method] をクリックします。
  3. / resource ノードの下に表示されるリストから GET を選択し、チェックマークアイコンを選択します。
  4. [/ - GET - Setup] で、[Integration type] で [Mock]を選択してから [Save] をクリックします。モック統合はそれに到達したすべての要求に応答しますが、これは後でテストのときに役立ちます。

API をデプロイする

  1. API Gateway コンソールで、API を選択します。
  2. [アクション] を選択してから、[API をデプロイ] を選択します。
  3. [Deploy API] の [Deployment stage] で、[New Stage] を選択します。
  4. [Stage name] には名前を入力します。たとえば、 testと入力します。
  5. [Deploy] をクリックします。
  6. [Stage Editor] パネルで、[Invoke URL] をクリップボードにコピーします。URL は https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/testのようになります。

API をテストする

API Gateway コンソールPostman アプリ、またはコマンドラインインターフェイスから curl を使用して、API の URL で「200」HTTP ステータスコードをテストします。curl を使用する場合は、次のようになります。

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

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

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

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

注: これらのコマンドでは、 restapi-idregion、および stageName を API の URL の値に置き換えます。

curl の詳細については、「cURL プロジェクトのウェブサイト」をご参照ください。

注: 「200」以外のステータスコードが表示された場合は、コンソールで API をステージにデプロイしたことを確認してください。また、URL にステージを指定したことを確認します。たとえば、/test と入力します。

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

  1. CloudFront コンソール で、[Create Distribution] を選択します。
  2. [Create Distribution Wizard] の最初のページの Web セクションで、[Get Started] を選択します。
  3. [Origin Domain Name] に、前にコピーした API URL を入力します。
  4. [Origin Path] に、 /[stage-name]と入力します。これは、前にデプロイした API ステージの名前で、その前にスラッシュが付いています。たとえば、/test と入力します。
    注: URL にステージ名を含める場合は、 Origin Pathに何も入力しないでください。
  5. [Origin Protocol Policy] で、[HTTPS Only] を選択します。
    注: API Gateway は暗号化されていない (HTTP) エンドポイントをサポートしていません。詳細については、Amazon API Gateway のよくある質問 を参照してください。
  6. (オプション) カスタムヘッダーをオリジンに転送するには、[Origin Custom Headers] に 1 つ以上のカスタムヘッダーを入力します。
    注: CloudFront がオリジンに転送できないカスタムヘッダーがいくつかあります。
  7. (オプション) CloudFront が割り当てる代わりに独自のカスタムドメイン名をディストリビューションに使用するには、Alternate Domain Names (CNAME) に 1 つ以上のドメイン名を入力します。詳細については、「代替ドメイン名 (CNAME) を追加してカスタム URL を使用する」を参照してください。
  8. (オプション) Origin SSL Protocols など、カスタマイズする追加設定を構成します。
    注: API Gateway ではプロトコルがサポートされていないため、[Origin SSL Protocols] で [SSLv3] を選択しないでください。TLSv1.2 のみを選択するのがベストプラクティスです。
    重要: Default Cache Behavior SettingsCache Based on Selected Request Headers の設定を変更する際は注意が必要です。この設定を All に変更した場合、またはこの設定を Whitelist に変更し、Host ヘッダーをホワイトリストに追加した場合、セットアップは機能しません。詳細については、「リクエストヘッダーに基づくコンテンツのキャッシュ」を参照してください。
  9. [ディストリビューションの作成] を選択します。
  10. ディストリビューションがデプロイされるまで待ちます。これには約 30 分かかる場合があります。コンソールで [Status] が Deployed と表示されると、ディストリビューションは準備完了です。

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

  1. CloudFront コンソール で、ディストリビューションの Domain Name を書き留めます。カスタムドメイン名を使用しなかった場合、ドメインは a2222bcdefg5.cloudfront.net のようになります。
  2. API をデプロイしてテストするのステップ 6 で説明した方法のいずれかを使用して、ドメイン名の「200」HTTP ステータスコードをテストします。
    注 : 「500」サーバーエラーコードが表示された場合は、ディストリビューションが完全にデプロイされていない可能性があります。応答がない場合、CloudFront DNS レコードがまだ完全に伝達されていない可能性があります。いずれの場合も、20 分待ってから、手順を再試行してください。

これで、作成したディストリビューションが API で使用され、CloudFront URL を使用して API の任意のリソースにアクセスできます。