Cloudflare R2で「We encountered an internal error. Please try again.」というエラーが出たときの対処法
@aws-sdk/client-s3 を使って、Amazon S3互換のCloudflare R2にファイルをアップロードするプログラムを書いていたところ、「We encountered an internal error. Please try again.」というエラーが発生しました。
この記事では、このエラーの原因と対処法を解説します。
原因
Cloudflare R2はAmazon S3互換を謳っていますが、100%の互換性があるわけではありません。
ドキュメントの S3 API compatibility を確認すると、対応していない機能もあることがわかります。
まれによくあるパターンとして、S3の仕様変更にR2が対応できておらず、その結果として@aws-sdk/client-s3からR2を使おうとするとエラーになるというものがあります。
今回のエラーは、@aws-sdk/client-s3のバージョン3.729.0
以降から導入された仕様変更が原因でした。
AWS SDK for JavaScriptのドキュメントには、次のように書かれています。
Beginning with version 3.729.0 of the AWS SDK for JavaScript, the SDK provides default integrity protections by automatically calculating a CRC32 checksum for uploads.
日本語訳:
AWS SDK for JavaScriptのバージョン3.729.0以降、このSDKはアップロードのCRC32チェックサムを自動的に計算することで、デフォルトの整合性保護を提供します。
——『 Data integrity protection with Amazon S3 checksums - AWS SDK for JavaScript 』
この仕様変更が原因でエラーが出るようになったようです。R2のドキュメントにも次のように書かれています。
Client version3.729.0
introduced a modification to the default checksum behavior from the client that is currently incompatible with R2 APIs.
日本語訳:
クライアントバージョン3.729.0
では、クライアントからのチェックサムのデフォルトの挙動に現在R2 APIと互換性のない変更が加えられました。
——『 aws-sdk-js-v3 · Cloudflare R2 docs 』
同様に、AWS CLIでもバージョン2.23.0
以降と1.37.0
以降では、R2と互換性のない変更が加えられているようです。
Client versions2.23.0
and1.37.0
introduced a modification to the default checksum behavior from the client that is currently incompatible with R2 APIs.
日本語訳:
クライアントバージョン2.23.0
と1.37.0
では、クライアントからのチェックサムのデフォルトの挙動に現在R2 APIと互換性のない変更が加えられました。
——『 aws CLI · Cloudflare R2 docs 』
このように、S3の仕様変更にR2が対応していなかったことでエラーが発生したようです。
対処法
この問題の対処法は、R2の前述のドキュメントに書かれていました。
@aws-sdk/client-s3を使っている場合は、バージョン3.726.1
にダウングレードするか、requestChecksumCalculation
オプションとresponseChecksumValidation
オプションを指定します。
const s3 = new S3Client({ // ...既存のコード requestChecksumCalculation: "WHEN_REQUIRED", responseChecksumValidation: "WHEN_REQUIRED"});
また、AWS CLIを使っている場合は、バージョン2.22.35
または1.36.40
にダウングレードするか、--checksum-algorithm CRC32
フラグを指定します。
おすすめアイテム
※このリンクを経由して商品を購入すると、当サイトの運営者が報酬を得ることがあります。詳細はこちら。
このサイトを支援する
Buy Me a CoffeeまたはGitHub Sponsorsで支援していただけると、サイトの運営やコンテンツ制作の励みになります。定期的な支援と一度限りの支援がありますので、お間違いのないようにお願いします。
-1.png&w=256&q=75)
生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。
Webフロントエンドプログラマーで、テクノロジーに関する話題を追いかけています。動画編集やプログラミングが趣味で、たまにデザインなどもやっています。主にTypeScriptを使用したWebフロントエンド開発を専門とし、便利で実用的なブラウザー拡張機能を作成しています。また、個人ブログを通じて、IT関連のニュースやハウツー、技術的なプログラミング情報を発信しています。