S3 Transfer Manager 移行メモ
非推奨になったfeature/s3/manager@v1.22.0からfeature/s3/transfermanager@v0.1.2 への移行メモ。
NOTE2026-02-16 時点で AWS 公式のマイグレーションガイドは存在しない。 以下のソースを基に移行を実施した。
- GitHub Discussions #3306 — 非推奨化の告知
- pkg.go.dev transfermanager — 新 API リファレンス
背景
feature/s3/manager パッケージは 2026年1月に非推奨(deprecated)となった。
後継の feature/s3/transfermanager は Uploader/Downloader を統合した単一クライアント設計になっている。
API 比較表
パッケージ・型
旧 (feature/s3/manager) | 新 (feature/s3/transfermanager) |
|---|---|
manager.Uploader | transfermanager.Client(統合) |
manager.Downloader | transfermanager.Client(統合) |
manager.NewUploader(s3Client) | transfermanager.New(s3Client)(統合) |
manager.NewDownloader(s3Client) | transfermanager.New(s3Client)(統合) |
s3/types.ObjectCannedACL... | transfermanager/types.ObjectCannedACL... |
メソッド
| 操作 | 旧 | 新 |
|---|---|---|
| アップロード | uploader.Upload(ctx, *s3.PutObjectInput) | client.UploadObject(ctx, *transfermanager.UploadObjectInput) |
| ダウンロード | downloader.Download(ctx, io.WriterAt, *s3.GetObjectInput) | client.DownloadObject(ctx, *transfermanager.DownloadObjectInput) |
移行例
クライアント初期化
diff
- uploader := manager.NewUploader(s3Client)
- downloader := manager.NewDownloader(s3Client)
+ tm := transfermanager.New(s3Client)アップロード
diff
- _, err := uploader.Upload(ctx, &s3.PutObjectInput{
- ACL: types.ObjectCannedACLPublicRead,
+ _, err := tm.UploadObject(ctx, &transfermanager.UploadObjectInput{
+ ACL: tmtypes.ObjectCannedACLPublicRead,
Body: body,
Bucket: aws.String(bucket),
Key: aws.String(key),
ContentType: aws.String(contentType),
})- 入力型:
s3.PutObjectInput→transfermanager.UploadObjectInput - ACL 列挙型:
s3/types→transfermanager/types
ダウンロード
diff
- n, err := downloader.Download(ctx, writerAt, &s3.GetObjectInput{
- Bucket: aws.String(bucket),
- Key: aws.String(key),
- })
+ out, err := tm.DownloadObject(ctx, &transfermanager.DownloadObjectInput{
+ Bucket: aws.String(bucket),
+ Key: aws.String(key),
+ WriterAt: writerAt,
+ })
+ n := *out.ContentLengthio.WriterAtが関数引数 →DownloadObjectInput.WriterAtフィールドへ移動- ダウンロードサイズ: 戻り値
int64→DownloadObjectOutput.ContentLength *int64
注意点
DownloadObjectOutputに旧 API のn (int64)に直接対応するフィールドはない。ContentLength *int64を使用する(nil チェック必要)。UploadObjectInputの ACL 等の列挙型はtransfermanager/typesパッケージのものを使う。s3/typesのものとは別の型定義。