web-dev-qa-db-ja.com

API GatewayキャッシングとCloudFront

API GatewayとCloudFrontがどのように連携するかについて少し混乱しています。最終的に、カスタムヘッダーと値をキャッシュキーの一部と見なせるようにしたいと考えています。これはホワイトリストで実行できることを知っています(CloudFrontを使用している場合)。

だから私が次のリクエストをすると:

GET /pagesRead/4
Some-Header: fizz

これは、たとえば、 '29ページ'を返します

次に、id 4を'45ページ 'に更新する投稿があります

このリクエストをした場合

GET /pagesRead/4
Some-Header: buzz

'45 pages'を返すようになりました

しかし、私はAPIゲートウェイを使用しています。APIゲートウェイには、明らかに背後に独自のCloudFrontがあります。 API Gatewayを設定して、その「舞台裏」のCloudFrontを使用してカスタムヘッダーをホワイトリストに登録する方法はありますか?これも行う必要がありますか?

このドキュメントによると、 AWS-API-Gatway 、API Gateway(-===-)でAPIキャッシングを有効にできるようです、およびヘッダーをキャッシュキーの一部と見なします。

私はこれを正しく理解していますか?ヘッダーをキャッシュキーの一部にしたいだけの場合、 'Enabling API Caching'inAPI GatewayとCloudFrontインスタンスをAPI Gatewayの上に追加し、CloudFrontでホワイトリストに登録しますか?

UPDATE:

API Gatewayで次のようなヘッダーを追加しました: enter image description here

しかし、GETでは、キャッシュから古いデータを取得しています。

GET /pagesRead/4 test-header: buzz
9
JAck28

違いは、API Gatewayが実際にCloudFrontキャッシュを使用しないことです。 CloudFrontは、いくつかのフロントエンドサービスを提供します すべてのAPIゲートウェイAPI エッジ最適化されたAPIエンドポイント¹。ただし、以下に基づいて、キャッシングはそれらの1つではないようです。

API Gatewayは、専用のキャッシュインスタンスを作成することでキャッシュを有効にします。

...そして...

CloudFrontレスポンスのX-Cacheヘッダーを使用して、API GatewayキャッシュインスタンスからAPIが提供されているかどうかを判断しないでください。

https://docs.aws.Amazon.com/apigateway/latest/developerguide/api-gateway-caching.html

作成したCloudFrontディストリビューションの背後にEdge Optimized API Gatewayエンドポイントをカスケードすることは可能ですが、特定の不便がないわけではありません。より多くのシステムを通過するため、レイテンシは多少増加します。その構成では、CloudFront-Is-*-ViewerヘッダーとCloudFront-Viewer-Countryヘッダー、およびおそらくクライアントIPの概念は無効になります。APIGatewayデプロイメントには、その前にある追加のCloudFrontディストリビューションの属性が表示されるためです。実際のクライアントではなく。 X-Forwarded-Forは引き続き正しくありますが、正しく処理する必要がある追加のホップが1つ含まれるため、注意して処理する必要があります。

API Gatewayを独自のCloudFrontディストリビューションの背後に配置するアプリケーションの場合、新しいリージョナルエンドポイントの1つを使用してAPIステージをデプロイします。

ヘッダーをキャッシュキーの一部と見なします。

引用したドキュメントに基づいてキャッシュキーを明示的に設定する必要がありますが、API Gatewayキャッシュはそのヘッダーの値とキャッシュキー内の他の属性に基づいて応答をキャッシュします。


¹エッジ最適化エンドポイント。 API Gatewayに 2種類のエンドポイント が追加されました。元のデザインはEdge-optimizedと呼ばれ、新しいオプションはregionalと呼ばれます。リージョナルエンドポイントはCloudFrontのフロントエンドサービスを使用しないため、同じAWSリージョン内のEC2からアクセスした場合のレイテンシが低くなる可能性があります。新しいリージョン機能が導入されたとき、すべての既存のエンドポイントはエッジ最適化として分類されました。リージョンエンドポイントでは、独自のCloudFrontディストリビューションを使用してオリジンに転送するためにそれらのヘッダーをホワイトリストに登録しない限り、CloudFront-*ヘッダーはリクエストに存在しません。

10

API Gatewayでキャッシュを有効にすると、

オプションで追加することもできます

RequestPath
QueryStringParameters
Http Headers

例えば。、

http://example.com/api/ {feature} /?queryparam = queryanswer [ヘッダーcustomheader = value1付き]

上記のURLは、以下に基づいてキャッシュするオプションを提供します。

PathParametersなしのURLのみ:http://example.com/api/

オプションでPathParameterを含めます: http://example.com/api/{feature}/

オプションでQueryStringsを含めます: http://example.com/api/ {feature} /?queryparam = queryanswer

オプションでHttpヘッダーを含める:User-Agentヘッダーやカスタムヘッダーなどの通常のヘッダーを含めることができます

API-Gatewayで使用しているキャッシングモードが何であれ、CloudFrontでも使用できます。

また、キャッシュをクリアするには、http応答でCache-Control:max-age = 0

それが役に立てば幸い。

CloudFront cache image

1
Kannaiyan