TLDR:来る応答に対する新しいキャッシュ動作を作成してCloudFront 307リダイレクトキャッシュを騙さなければならない私たちのラムダ関数から。CloudFrontで画像をサイズ変更し、同じURLで即座に取得する:AWS CloudFront - > S3 - > Lambda - > CloudFront
これを達成するためにどれくらい近いとは思わないでしょう。私たちは最後のステップでひどくぎこちなかった。
ビジネスケース:
当社のアプリケーションを格納しS3の画像と世界中の任意の地理的スローダウンを避けるために、CloudFrontのでそれらを提供しています。 今、私たちはデザインに本当に柔軟性があり、CouldFront URLに直接新しい画像の次元を要求できるようにしたいと考えています! 新しい画像サイズはそれぞれオンデマンドで作成されてS3に保存されるので、2度目の要求では がS3に存在し、CloudFrontにもキャッシュされるので、本当に迅速に処理されます。
ユーザーが画像chucknorris.jpgをアップロードしたとします。 のみ、元画像はS3に保存され、このように私たちのページで楽しめウィル:
//xxxxx.cloudfront.net/chucknorris.jpg
我々は今、サムネイルを表示する必要があることを計算しています200x200ピクセルです。 は、したがって、私たちは、テンプレートにあるように、画像srcを置く:
//xxxxx.cloudfront.net/chucknorris-200x200.jpg
この新しいサイズが要求された場合には、Amazon Webサービスは、それを提供する必要があります同じバケツと要求されたキーのフライ このようにして、画像はCloudFrontの同じURLに直接ロードされます。私はアーキテクチャの概要と、我々はAWSでこれをやっている方法についてのワークフローとの醜い描画作ら
:ここ
はPythonのラムダが終了する方法です:
return {
'statusCode': '301',
'headers': {'location': redirect_url},
'body': ''
}
問題:
ラムダ関数をS3にリダイレクトすると、それはチャームのように機能します。 CloudFrontにリダイレクトすると、CloudFrontキャッシュ307(301,302および303と同様)がリダイレクトループに入ります。 はとすぐに私たちのラムダ関数は、CloudFrontのにリダイレクトするよう、CloudFrontのはAPIゲッタウェイURLの代わりに、S3から画像を取り込むを呼び出します。
私はCloudFrontをのBehaviors
設定]タブで新しいキャッシュ動作を作成したいと思います。 この動作では、LambdaやS3からの応答をキャッシュしてはいけません(正確に内部的に何が起こっているのかわかりませんが)。 パスパターン-\d+x\d+\..+$
を設定しようとしていますが、 "Lambda Function Association"を追加してLambda関数のARNを に追加し、イベントタイプをOrigin Response
に設定しています。 次に、 "Default TTL"を0
に設定しています。
しかし、私は何らかのエラーにビヘイビアを保存することはできません。
は、我々は正しい道にある、またはこの「ラムダ関数協会」の考え方は全く違うのですか?
:画像DIMENTIONは、CloudFrontのキャッシュヘッダーを提供しています。また、Cloudfrontの新しいLambda @ Edge機能を見てきましたか? –