すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Go 用 OSS SDK V1 から V2 へのアップグレード

最終更新日:Mar 19, 2025

このトピックでは、Go 用 Object Storage Service (OSS) SDK を V1 から V2 にアップグレードする方法について説明します。

Go の最も古いバージョン

Go 用 OSS SDK V2 では、Go のバージョンが 1.18 以降である必要があります。

インポートパスの指定

Go 用 OSS SDK V2 は、新しいコードリポジトリである alibabacloud-oss-go-sdk-v2 を使用します。コード構造は変更され、機能モジュールごとに整理されています。次の表に、機能モジュールのパスと説明を示します。

モジュールパス

説明

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss

Go 用 OSS SDK のコアであり、基本および高度な API 操作を呼び出すために使用されます。

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials

アクセス認証情報。

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/retry

再試行ポリシー。

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/signer

署名。

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/transport

HTTP クライアント。

github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/crypto

クライアント側の暗号化構成。

Go 用 OSS SDK V1 の例

import (
  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

Go 用 OSS SDK V2 の例

import (
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
  // ビジネス要件に基づいて retry、transport、または signer をインポートします。
  //"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/xxxx"
)

パラメータの構成

  1. Go 用 OSS SDK V2 は構成を簡素化し、構成を config にインポートします。 Go 用 OSS SDK V2 は、With で始まる補助関数を備えており、デフォルト構成をプログラムで上書きしやすくしています。

  2. Go 用 OSS SDK V2 は、デフォルトで V4 署名を使用します。この場合、リージョンを指定する必要があります。

  3. Go 用 OSS SDK V2 では、リージョン情報に基づいてエンドポイントを作成できます。パブリッククラウドのリソースにアクセスする場合、エンドポイントを作成する必要はありません。

Go 用 OSS SDK V1 の例

import (
  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)
...

// 環境変数からアクセス認証情報を取得します。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()

// HTTP 接続のタイムアウト期間を 20 に設定し、HTTP 接続の読み取りまたは書き込みタイムアウト期間を 60 に設定します。単位:秒。
time := oss.Timeout(20,60)

// SSL 証明書を確認しません。
verifySsl := oss.InsecureSkipVerify(true)

// ログを指定します。
logLevel := oss.SetLogLevel(oss.LogInfo)

// エンドポイント
endpoint := "oss-cn-hangzhou.aliyuncs.com"

client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), time, verifySsl, logLevel)

Go 用 OSS SDK V2 の例

import (
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
  "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

...

// 環境変数からアクセス認証情報を取得します。
provider := credentials.NewEnvironmentVariableCredentialsProvider()

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(provider).
  // HTTP 接続のタイムアウト期間を 20 に設定します。単位:秒。
  WithConnectTimeout(20 * time.Second).
  // HTTP 接続の読み取りまたは書き込みタイムアウト期間を 60 に設定します。単位:秒。
  ReadWriteTimeout(60 * time.Second).
  // SSL 証明書を確認しません。
  WithInsecureSkipVerify(true).
  // ログを指定します。
  WithLogLevel(oss.LogInfo).
  // リージョンを指定します。
  WithRegion("cn-hangzhou")

client := oss.NewClient(cfg)

クライアントの作成

Go 用 OSS SDK V2 では、クライアント作成関数が New から NewClient に変更されました。また、クライアント作成関数は、エンドポイント、ak、および sk パラメータをサポートしなくなりました。

Go 用 OSS SDK V1 の例

client, err := oss.New(endpoint, "ak", "sk")

Go 用 OSS SDK V2 の例

client := oss.NewClient(cfg)

API 操作の呼び出し

基本 API 操作は、<OperationName> 形式の単一の操作メソッドにマージされ、操作のリクエストパラメータは <OperationName>Request にマージされ、操作のレスポンスパラメータは <OperationName>Result にマージされます。操作メソッドは Client にインポートされ、同時に context.Context を指定する必要があります。構文:

func (c *Client) <OperationName>(ctx context.Context, request *<OperationName>Request, optFns ...func(*Options)) (*<OperationName>Result,, error)

詳細については、「基本 API 操作」をご参照ください。

Go 用 OSS SDK V1 の例

import "github.com/aliyun/aliyun-oss-go-sdk/oss"

...

provider, err := oss.NewEnvironmentVariableCredentialsProvider()

client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))  

bucket, err := client.Bucket("examplebucket")

err = bucket.PutObject("exampleobject.txt", bytes.NewReader([]byte("example data")))

Go 用 OSS SDK V2 の例

import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"

...

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
  WithRegion("your region")

client := oss.NewClient(cfg)

result, err := client.PutObject(context.TODO(), &oss.PutObjectRequest{
  Bucket: oss.Ptr("examplebucket"),
  Key:    oss.Ptr("exampleobject.txt"),
  Body:   bytes.NewReader([]byte("example data")),
})

プレ署名付き URL の生成

Go 用 OSS SDK V2 では、プレ署名付き URL を生成するために使用される操作の名前が SignURL から Pressign に変更され、操作は Client にインポートされます。構文:

func (c *Client) Presign(ctx context.Context, request any, optFns ...func(*PresignOptions)) (*PresignResult, error)

request パラメータのタイプは、API 操作の '<OperationName>Request' と同じです。

レスポンスには、プレ署名付き URL、HTTP メソッド、URL の有効期限、および署名付きリクエストヘッダーが含まれています。例:

type PresignResult struct {
  Method        string
  URL           string
  Expiration    time.Time
  SignedHeaders map[string]string
}

詳細については、「プレ署名付き URL」をご参照ください。

次のサンプルコードは、オブジェクトをダウンロードするために使用されるプレ署名付き URL を生成することにより、Go 用 OSS SDK V1 から Go 用 OSS SDK V2 にオブジェクトを移行する方法の例を示しています。

Go 用 OSS SDK V1 の例

import "github.com/aliyun/aliyun-oss-go-sdk/oss"

...

provider, err := oss.NewEnvironmentVariableCredentialsProvider()

client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))  

bucket, err := client.Bucket("examplebucket")

signedURL, err := bucket.SignURL("exampleobject.txt", oss.HTTPGet, 60)

fmt.Printf("Sign Url:%s\n", signedURL)

Go 用 OSS SDK V2 の例

import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"

...

cfg := oss.LoadDefaultConfig().
	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	WithRegion("your region")

client := oss.NewClient(cfg)

result, err := client.Presign(
	context.TODO(),
	&oss.GetObjectRequest{
		Bucket: oss.Ptr("examplebucket"),
		Key:    oss.Ptr("exampleobject.txt"),
	},
	oss.PresignExpires(60*time.Second),
)

fmt.Printf("Sign Method:%v\n", result.Method)
fmt.Printf("Sign Url:%v\n", result.URL)
fmt.Printf("Sign Expiration:%v\n", result.Expiration)
for k, v := range result.SignedHeaders {
	fmt.Printf("SignedHeader %v:%v\n", k, v)
}

レジューム可能な転送操作の呼び出し

Go 用 OSS SDK V2 は、UploaderDownloaderCopier などのデータ転送マネージャーを使用して、それぞれオブジェクトのアップロード、ダウンロード、コピーを管理します。元のレジューム可能な転送操作(Bucket.UploadFileBucket.DownloadFileBucket.CopyFile)は削除されました。

次の表に、Go 用 OSS SDK V1 と Go 用 OSS SDK V2 のレジューム可能な転送操作を示します。

シナリオ

v2

v1

オブジェクトのアップロード

Uploader.UploadFile

Bucket.UploadFile

ストリームのアップロード (io.Reader)

Uploader.UploadFrom

サポートされていません

ローカルコンピュータへのオブジェクトのダウンロード

Downloader.DownloadFile

Bucket.DownloadFile

オブジェクトのコピー

Copier.Copy

Bucket.CopyFile

デフォルト値の変更

シナリオ

v2

v1

オブジェクトのアップロード - パートサイズ

6 MiB

パラメータを指定してパートサイズを構成する

オブジェクトのアップロード - コンカレンシーのデフォルト値

3

1

オブジェクトのアップロード - サイズのしきい値

パートのサイズ

なし

オブジェクトのアップロード - チェックポイントファイルへのアップロード進捗の記録

サポートされています

サポートされています

オブジェクトのダウンロード - パートサイズ

6 MiB

パラメータを指定してパートサイズを構成する

オブジェクトのダウンロード - コンカレンシーのデフォルト値

3

1

オブジェクトのダウンロード - サイズのしきい値

パートのサイズ

なし

オブジェクトのダウンロード - チェックポイントファイルへのダウンロード進捗の記録

サポートされています

サポートされています

オブジェクトのコピー - パートサイズ

64 MiB

Bucket.UploadFile

オブジェクトのコピー - コンカレンシーのデフォルト値

3

1

オブジェクトのコピー - サイズのしきい値

200 MiB

なし

オブジェクトのコピー - チェックポイントファイルへのコピー進捗の記録

サポートされていません

サポートされています

説明

上記のオブジェクトのアップロード - サイズのしきい値、オブジェクトのダウンロード - サイズのしきい値、またはオブジェクトのコピー - サイズのしきい値パラメータは、オブジェクトサイズがパラメータの値より大きい場合に、それぞれマルチパートアップロード、マルチパートダウンロード、またはマルチパートコピーが実行されることを指定します。

データ転送マネージャーの使用方法の詳細については、「転送マネージャー」をご参照ください。

クライアント側の暗号化の実行

Go 用 OSS SDK V2 は、EncryptionClient を使用してクライアント暗号化を提供します。 Go 用 OSS SDK V2 は、クライアント側の暗号化を実行するために使用される API 操作も簡素化し、Client と同じ操作命名規則と呼び出しメソッドを採用しています。また、Go 用 OSS SDK V2 は、RSA ベースの自己管理 CMK を使用してクライアント側の暗号化を実行する方法のリファレンスのみを提供します。

Key Management Service (KMS) を使用してクライアント側の暗号化を実行する方法の詳細については、sample/crypto/kms.go をご覧ください。

クライアント側の暗号化の詳細については、「クライアント側の暗号化」をご参照ください。

次のサンプルコードは、Go 用 OSS SDK V1 と Go 用 OSS SDK V2 を使用してオブジェクトをアップロードするときに、RSA ベースの CMK を使用してクライアント側の暗号化を実行する方法の例を示しています。

V1

import "github.com/aliyun/aliyun-oss-go-sdk/oss"
import "github.com/aliyun/aliyun-oss-go-sdk/oss/crypto"

...

provider, err := oss.NewEnvironmentVariableCredentialsProvider()

client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))  

materialDesc := make(map[string]string)
materialDesc["desc"] = "your master encrypt key material describe information"

masterRsaCipher, err := osscrypto.CreateMasterRsa(materialDesc, "yourRsaPublicKey", "yourRsaPrivateKey")

contentProvider := osscrypto.CreateAesCtrCipher(masterRsaCipher)

cryptoBucket, err := osscrypto.GetCryptoBucket(client, "examplebucket", contentProvider)

err = cryptoBucket.PutObject("exampleobject.txt", bytes.NewReader([]byte("example data")))

V2

import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
import "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/crypto"

cfg := oss.LoadDefaultConfig().
  WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
  WithRegion("your region")

client := oss.NewClient(cfg)

materialDesc := make(map[string]string)
materialDesc["desc"] = "your master encrypt key material describe information"

mc, err := crypto.CreateMasterRsa(materialDesc, "yourRsaPublicKey", "yourRsaPrivateKey")
eclient, err := NewEncryptionClient(client, mc)

result, err := eclient.PutObject(context.TODO(), &PutObjectRequest{
  Bucket: Ptr("examplebucket"),
  Key:    Ptr("exampleobject.txt"),
  Body:   bytes.NewReader([]byte("example data")),
})

再試行ポリシーの構成

デフォルトでは、Go 用 OSS SDK V2 は HTTP リクエストの再試行をサポートしています。 Go 用 OSS SDK V1 を Go 用 OSS SDK V2 にアップグレードする場合は、再試行回数の増加を防ぐために、元の再試行コードを削除する必要があります。

リファレンス

詳細については、「開発者ガイド」をご参照ください。