私たちのサイトの画像処理には、v3バージョンの AWSサーバーレス画像ハンドラー を使用していました。ただし、 AWSがこのアップデートをリリースした の場合、全体が壊れていました。残念ながら、次の理由により、新バージョン(v4)はThumborスタイルのリクエストでは機能しません。
s3バケットのルートにある画像 でのみ機能します
セキュリティハッシュ機能は実装されていません 安全にする
Thumborリクエストとjsonリクエスト間のマッピング の一部が正しくない
'auto_webp'機能は実装されていません なので、それらをサポートするブラウザーにwebp画像を提供できません。
アプリケーションに大きな変更を加えることなく、新しいバージョンのAWS serverless-image-handlerを起動して実行するにはどうすればよいですか(つまり、引き続きThumborスタイルのリクエストを使用したいのですが、v4のserverless-imageを使用します) -ハンドラ)?
他にもかなりの数の人が同じ問題を抱えていることに気付いたので、これらのメモが問題の解決に役立つことを願っています。
このスタックの新しいv4のラムダイメージハンドラー関数にある程度の作業があったため、Thumborスタイルのリクエストで問題なく機能し、アプリケーションがイメージをリクエストする方法を変更する必要はありませんでした。
ここでの修正の一部は、Thumbor機能のサブセットのみを使用するという制限があるため、必要な修正のみを行っていることに注意してください。私たちが使用していないオプションを使用している可能性がありますが、機能するために追加または異なるコーディングが必要になる場合もあります。
AWS serverless-image-handlerスタックのv4をデプロイしたら、変更する必要があるのは、クラウドの形成によって作成されたスタックのLambda 'ImageHandlerFunction'だけです。これを更新するための簡単なポインタを次に示します。
LambdaでImageHandlerFunctionを見つけてそこに移動し、[アクション]-> [関数のエクスポート]-> [デプロイメントパッケージのダウンロード]をクリックします。
これにより、イメージハンドラーのすべてのコードを含むZipファイルがダウンロードされます。このZipからすべてのファイルを抽出します。
これで、コードに変更を加えることができます。必要に応じて、mochaを使用して単体テストを実行できます。
コードに変更を加えたら、すべてのファイルを含む新しいZipを作成する必要があります
ImageHandlerFunctionを更新する前に、新しいデプロイメントパッケージをS3にアップロードする必要があります(サイズが大きすぎて直接アップロードできません)。
S3のどこかにアップロードしたら、ラムダのImageHandlerFunctionに移動し、コードエントリタイプからs3オプションを選択します。 S3のZipファイルへのリンクを入力し、ページの上部にある[保存]をクリックします。
これで、更新した関数をテストできます。応答はcloudfrontにキャッシュされるため、Cloudfrontで作成および無効化してテストするか、まだキャッシュされていない新しいイメージを使用する必要がある場合があります。
上記の問題の修正に関して:
S3バケットのルートだけでなく、サブフォルダー内の画像を操作するには: ここでの私の修正 を参照してください-基本的にはあなたこれを変更する必要があります:
const key = (event["path"]).split("/");
return key[key.length - 1];
単体テストを含めて私が使用したソリューションは、上記のgithubコメントにあります。少し異なるソリューションが必要になる場合があります。
セキュリティハッシュを機能させるには、 ここで私の修正を参照
自動webpサポートを機能させるには、 ここに私の修正を参照
Thumborとjson画像リクエスト間のマッピングの修正に関しては、これにはいくつかの小さな変更が必要でしたが、実際には大したことではありませんでした。自分の要件に基づいてこれを行うのがおそらく最善です。関連するgithubチケットにメモを追加してみます。