スキップしてコンテンツを表示

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

所要時間3分
0

Amazon API ゲートウェイにエッジ最適化された API エンドポイントが必要ですが、そのために独自の Amazon CloudFront ディストリビューションを作成したいと考えています。

簡単な説明

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

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

解決策

前提条件 API Gateway REST API と統合する AWS Lambda 関数を作成し、API Gateway で Regional API を作成します。

AWS Certificate Manager (ACM) で、us-east-1 リージョンおよび、お使いの API Gateway REST API と同じ AWS リージョンに SSL/TLS 証明書を作成します。ACM によって発行された、または ACM にインポートされたドメイン名用の証明書を取得するには、次の手順を実行します。

  1. インターネットドメインを登録します。Amazon Route 53 またはサードパーティの認定ドメインレジストラを使用できます。
  2. ACM でドメイン名の SSL/TLS 証明書を作成するか、ACM にインポートします。

API 用の GET メソッドを設定する

次の手順を実行します。

  1. API Gateway コンソールを開きます。
  2. 新しい Regional API の名前を選択します。
  3. [リソースを作成] を選択します。
  4. [リソース名]greetings と入力します。
  5. [メソッドを作成] を選択します。
  6. [メソッドタイプ][GET] を選択し、[統合タイプ][Lambda 関数] を選択します。次に、[Lambda プロキシ統合] ボタンを切り替えて Lambda 関数を選択します。

API をデプロイし、API コール URL を特定する

次の手順を実行します。

  1. API をステージにデプロイします
  2. ステージエディタペインの先頭で、greetings リソースの GET HTTP メソッド用の Invoke URL をクリップボードにコピーします。

API Gateway API 呼び出し URL の例:

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

API で 200 OK の応答が返されるかどうかをテストする

API が 200 OK 応答を返すことを確認するには、API Gateway コンソール、Postman アプリ、curl のいずれかを使用して API 呼び出し URL をテストします。Postman と curl の詳細については、Postman のウェブサイトcurl のウェブサイトを参照してください。

curl を使用して、API が 200 OK の応答を返すかどうかをテストする

使用するオペレーティングシステムに応じて、次のコマンドのいずれかを実行します。

注: https://restApiId.execute-api.region.amazonaws.com/stageNamee/greetings をお使いの API コール URL に置き換えます。

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

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

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

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

注: 200 OK 以外のステータスコードが表示された場合は、コンソールをチェックして API がステージにデプロイされていることを確認します。さらに、呼び出し URL がステージを正しく指定していることも確認します。

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

次の手順を実行します。

  1. CloudFront コンソールを開きます。

  2. [ディストリビューションの作成] を選択します。

  3. [オリジンドメイン名] に、API 呼び出し URL を入力します。次に、ステージとリソース名を削除します。
    オリジンドメイン名の例:

    https://restApiId.execute-api.region.amazonaws.com
  4. [プロトコル][HTTPS のみ] を選択します。
    注: API Gateway は暗号化されていない (HTTP) エンドポイントをサポートしていません。詳細については、「Amazon API ゲートウェイに関するよくある質問」を参照してください。

  5. 最小オリジンSSLプロトコルには、TLSv1.2 を選択するのがベストプラクティスです。SSLv3 を選択しないようにしてください。API Gateway は SSLv3 プロトコルをサポートしていません。

  6. [オリジンパス] では、API ステージ名の前にスラッシュを付けて入力します (/StageName)。または、URL を呼び出すときに自分でステージ名を入力する場合は、[オリジンパス] には入力しないでください。
    注: [オリジンパス] に誤ったステージ名を入力した後に CloudFront ディストリビューションを呼び出すと、エラーが発生する場合があります。たとえば、「認証トークンが見つかりません」というメッセージと 403 Forbidden 応答コードを返すリクエスト不許可エラーが発生することがあります。

  7. (オプション) カスタムヘッダーをオリジンに転送するには、[オリジンのカスタムヘッダー] に 1 つ以上のカスタムヘッダーを入力します。

  8. 該当する場合は、「API または CloudFront ウェブディストリビューションのカスタムドメイン名に IAM 認証を使用している場合」セクションの指示に従ってください。

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

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

  11. ディストリビューションがデプロイされるまで 15 ~ 20 分待ちます。コンソールでディストリビューションの [ステータス]Deployed と表示されたら、ディストリビューションの準備ができています。

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

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

次の手順を実行します。

  1. CloudFront コンソールを開きます。

  2. お使いのディストリビューションの [ディストリビューションのドメイン名] をクリップボードにコピーします。
    非カスタムドメイン名の例:

    a222222bcdefg5.cloudfront.net
  3. ドメイン名で 200 OK 応答をテストします。500 server error コードが表示される場合は、ディストリビューションがデプロイされていない可能性があります。応答がない場合、CloudFront DNS レコードはまだ伝達されていません。いずれの場合も、ディストリビューションの作成後 15 ~ 20 分待ってから、手順を再試行してください。

重要: 上記のステップは、どのリソースメソッドでも AWS Identity and Access Management (IAM) 認証が有効になっていない API リソースを対象としています。IAM 認証を使用するメソッドがある場合は、API を呼び出すときに、ディストリビューションドメイン名の末尾にリソース名を追加します。呼び出し URL 全体 (リソース名を含む) は、次の例のいずれかのような形式をとります。

オリジンパスがある API Gateway API 起動 URL 例:

https://distributionDomainName/stageName/resourceName

オリジンパスがない API Gateway API 起動 URL 例:

https://distributionDomainName/resourceName

ディストリビューションをテストする方法の詳細については、「API Gateway API の IAM 認証を有効にする方法を教えてください」を参照してください。

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

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

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

次の手順を実行します。

  1. CloudFront ディストリビューションを作成します。
  2. [ディストリビューションの作成] ページの [デフォルトのキャッシュ動作およびキャッシュキーとオリジンリクエスト] で、[レガシーキャッシュ] 設定を選択します。
  3. [ヘッダー ドロップダウンリストで [次のヘッダーを含める を選択します。次に、表示されたヘッダーのリストから [認証] を選択します。API に転送するヘッダーを設定します。
    または、
    [キャッシュキューとオリジンリクエスト][キャッシュポリシー] で、既存のキャッシュポリシーを選択するか、新しいキャッシュポリシーを作成します。ポリシーでは、CloudFront 許可リストに Authorization ヘッダーを追加する必要があります。
  4. (オプション) 設定をテストするために、次の操作を行います。
    プログラムにより、API Gateway エンドポイントに必要な Signature Version 4 署名を作成します。host 値に、API Gateway の呼び出し URL を入力します。endpoint 値に、CloudFront ウェブディストリビューションの URL を入力します。
    API Gateway 呼び出し URL の例:
    example_api_id.execute.example_region.amazon.com
    CloudFront ウェブディストリビューション URL の例:
    d######.cloudfront.net

注: Postman アプリを使用している場合は、[認証] タブの [タイプ][AWS 署名] を選択します。次に、[アクセスキー][シークレットキー] を入力します。Postman は、入力した認証情報を使用して必要なヘッダーを生成します。次に、Signature Version 4 プロセスから生成された Authorization ヘッダー (およびすべての SignedHeaders) を使用して、API リクエストを CloudFront ディストリビューションに送信します。

(カスタムドメイン名または IAM 認証用) API にアクセスするために、API Gateway でリージョンのカスタムドメイン名を設定する

次の手順を実行します。

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

  2. API のリージョナルカスタムドメイン名を設定し、API の API マッピングを作成します。
    注: CloudFront 経由で API にアクセスするときに、このカスタムドメイン名を使用します。

  3. CloudFront ウェブディストリビューションを作成します。ただし、[オリジンドメイン名] には、API 呼び出し URL ではなく、API Gateway ターゲットのドメイン名を入力します。
    注: カスタムドメイン詳細の [エンドポイント****設定] セクションで API Gateway ターゲットのドメイン名を特定します。
    API Gateway のターゲットドメイン名の例:

    d-######.execute-api.example-region.amazonaws.com
  4. [ディストリビューションの作成] ページの [デフォルトのキャッシュ動作およびキャッシュキーとオリジンリクエスト][レガシーキャッシュ] 設定を選択します。

  5. [ヘッダー ドロップダウンリストで [次のヘッダーを含める を選択します。次に、表示されたヘッダーのリストから HostAuthorization を選択します。API に転送するヘッダーを設定します。
    または、
    [キャッシュキューとオリジンリクエスト][キャッシュポリシー] で、既存のキャッシュポリシーを選択するか、新しいキャッシュポリシーを作成します。ポリシーでは、CloudFront 許可リストに Authorization ヘッダーを追加する必要があります。

  6. [ディストリビューション設定][代替ドメイン名] に、作成したカスタムドメイン名を入力します。

  7. [SSL 証明書][カスタム SSL 証明書] を選択します。次に、そのドメイン用の AWS Certificate Manager (ACM) 証明書を追加します。

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

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

コメントはありません

関連するコンテンツ