メインコンテンツへスキップ
304文字
2分
編集

S3 Transfer Manager 移行メモ

非推奨になったfeature/s3/manager@v1.22.0からfeature/s3/transfermanager@v0.1.2 への移行メモ。

NOTE

2026-02-16 時点で AWS 公式のマイグレーションガイドは存在しない。 以下のソースを基に移行を実施した。

#背景

feature/s3/manager パッケージは 2026年1月に非推奨(deprecated)となった。 後継の feature/s3/transfermanager は Uploader/Downloader を統合した単一クライアント設計になっている。

#API 比較表

#パッケージ・型

旧 (feature/s3/manager)新 (feature/s3/transfermanager)
manager.Uploadertransfermanager.Client(統合)
manager.Downloadertransfermanager.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.PutObjectInputtransfermanager.UploadObjectInput
  • ACL 列挙型: s3/typestransfermanager/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.ContentLength
  • io.WriterAt が関数引数 → DownloadObjectInput.WriterAt フィールドへ移動
  • ダウンロードサイズ: 戻り値 int64DownloadObjectOutput.ContentLength *int64

#注意点

  • DownloadObjectOutput に旧 API の n (int64) に直接対応するフィールドはない。ContentLength *int64 を使用する(nil チェック必要)。
  • UploadObjectInput の ACL 等の列挙型は transfermanager/types パッケージのものを使う。s3/types のものとは別の型定義。