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.0introduced 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.0and1.37.0introduced 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フラグを指定します。
記事をシェア
フォローして最新情報を入手
Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。
-1.png&w=1080&q=75)
生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。
Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。






![Discordの[プロフィールのプライバシー]設定のスクリーンショット](/_next/image/?url=%2Fapi%2Fmedia%2Ffile%2Fdiscord-profile-privacy-settings.png&w=3840&q=75)
![スマートフォンのホーム画面の[Social]フォルダーを表示した写真。フォルダー内にはFacebook、Instagram、Threads、X、LinkedIn、TikTok、YouTubeのアイコンが配置されている](/_next/image/?url=%2Fapi%2Fmedia%2Ffile%2Ffacebook-instagram-threads-x-twitter-linkedin-tiktok-youtube-mobile-app-unsplash.jpg&w=3840&q=75)



