クライアントは Object Storage Service (OSS) の Go クライアントであり、バケットやファイルなどの OSS リソースを管理するために使用できます。Go SDK を使用して OSS リクエストを送信するには、クライアントインスタンスを初期化する必要があります。必要に応じて、デフォルト設定を変更することもできます。
前提条件
OSS SDK を初期化する前に、アクセス認証情報を設定する必要があります。詳細については、「アクセス認証情報の設定 (Go SDK V1)」をご参照ください。
新しいクライアントの作成
V4 署名 (推奨)
より安全な V4 署名アルゴリズムを使用することを推奨します。V4 署名でクライアントを初期化する場合、エンドポイントと汎用の Alibaba Cloud リージョン ID を指定する必要があります。リージョン ID は、リクエストが開始されるリージョンを指定します (例:cn-hangzhou)。また、oss.AuthV4 を宣言する必要もあります。V4 署名は、OSS Go SDK 3.0.2 以降でサポートされています。
次の例は、OSS ドメイン名を使用して V4 署名でクライアントを初期化する方法を示しています。この例は、カスタムドメイン名でクライアントを初期化するなど、他のシナリオに合わせて変更できます。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// handleError は回復不可能なエラーを処理し、エラーメッセージをログに記録した後、プログラムを終了します。
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// setupClient はOSSクライアントインスタンスを設定および作成します。
// パラメータ:
// endpoint - Bucketに対応するエンドポイント。
// region - エンドポイントに対応するリージョン情報。
//
// 作成されたOSSクライアントインスタンスを返します。
func setupClient(endpoint, region string) (*oss.Client, error) {
// 環境変数からアクセス認証情報を取得します。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// OSSClientインスタンスを作成し、V4署名を使用します。
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region(region))
if err != nil {
return nil, err
}
return client, nil
}
func main() {
// yourEndpointにBucketに対応するエンドポイントを入力します。例えば、華東1(杭州)の場合、https://oss-cn-hangzhou.aliyuncs.comと入力します。他のリージョンについては実際の状況に応じて入力してください。
endpoint := "yourEndpoint"
// yourRegionにエンドポイントに対応するリージョン情報を入力します。例:cn-hangzhou。
region := "yourRegion"
// 環境変数が設定されているかどうかを確認し、空文字列とプレースホルダー値の両方をチェックします。
if endpoint == "" || region == "" || endpoint == "yourEndpoint" || region == "yourRegion" {
log.Fatal("Please set yourEndpoint and yourRegion with valid values.")
}
// OSSクライアントインスタンスを設定および作成します。
client, err := setupClient(endpoint, region)
if err != nil {
handleError(err)
}
// クライアント情報を出力します。
log.Printf("Client: %#v\n", client)
}V1 署名 (非推奨)
2025 年 3 月 1 日以降、OSS の V1 署名アルゴリズムは、新しい UID を持つ新規のお客様にはご利用いただけなくなります。2025 年 9 月 1 日以降、OSS は V1 署名アルゴリズムの更新とメンテナンスを終了し、V1 署名アルゴリズムは新しいバケットでは利用できなくなります。ビジネスへの影響を防ぐため、できるだけ早く V1 署名を V4 署名にアップグレードしてください。
OSS ドメイン名を使用した新しいクライアントの作成
次のコードは、OSS ドメイン名を使用してクライアントを初期化する方法を示しています。さまざまなリージョンの OSS ドメイン名の詳細については、「リージョンとエンドポイント」をご参照ください。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// handleError は回復不可能なエラーを処理し、エラーメッセージをログに記録した後、プログラムを終了します。
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// setupClient はOSSクライアントインスタンスを設定および作成します。
// パラメータ:
//
// endpoint - Bucketに対応するエンドポイント。
//
// 作成されたOSSクライアントインスタンスを返します。
func setupClient(endpoint string) (*oss.Client, error) {
// 環境変数からアクセス認証情報を取得します。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// OSSClientインスタンスを作成します。
// yourRegionにBucketが所在するリージョンを入力します。例えば、華東1(杭州)の場合、cn-hangzhouと入力します。他のリージョンについては実際の状況に応じて入力してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New(endpoint, "", "", clientOptions...)
if err != nil {
return nil, err
}
return client, nil
}
func main() {
// yourEndpointにBucketに対応するエンドポイントを入力します。例えば、華東1(杭州)の場合、https://oss-cn-hangzhou.aliyuncs.comと入力します。他のリージョンについては実際の状況に応じて入力してください。
endpoint := "yourEndpoint"
// 環境変数が設定されているかどうかを確認します。
if endpoint == "" {
log.Fatal("Please set yourEndpoint.")
}
// OSSクライアントインスタンスを設定および作成します。
client, err := setupClient(endpoint)
if err != nil {
handleError(err)
}
// クライアント情報を出力します。
log.Printf("Client: %#v\n", client)
}カスタムドメイン名を使用した新しいクライアントの作成
次のコードは、カスタムドメイン名を使用して新しいクライアントを作成する方法を示しています。カスタムドメイン名を使用して OSS にアクセスする方法の詳細については、「カスタムドメイン名を使用した OSS へのアクセス」をご参照ください。
カスタムドメイン名で `ossClient.listBuckets` メソッドを使用することはできません。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// handleError は、回復不能なエラーを処理し、エラーメッセージをログに記録してプログラムを終了させます。
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// setupClient は、CNAME をサポートする OSS クライアントインスタンスをセットアップして作成します。
// パラメーター:
//
// endpoint - バケットにアタッチされているカスタムドメイン名。
//
// 作成された OSS クライアントインスタンスを返します。
func setupClient(endpoint string) (*oss.Client, error) {
// 環境変数からアクセス認証情報を取得します。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// OSSClient インスタンスを作成し、CNAME サポートを有効にします。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) の場合は cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
clientOptions = append(clientOptions, oss.UseCname(true))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New(endpoint, "", "", clientOptions...)
if err != nil {
return nil, err
}
return client, nil
}
func main() {
// yourEndpoint をバケットのカスタムドメイン名に設定します。
// 例:「custom-domain-for-your-bucket.com」。
endpoint := "yourEndpoint"
// 環境変数が設定されているか確認します。
if endpoint == "" {
log.Fatal("Please set yourEndpoint.")
}
// CNAME をサポートする OSS クライアントインスタンスをセットアップして作成します。
client, err := setupClient(endpoint)
if err != nil {
handleError(err)
}
// クライアント情報を出力します。
log.Printf("Client: %#v\n", client)
}
クライアントの設定
プロキシ、接続タイムアウト、最大接続数など、クライアントのパラメーターを設定できます。
パラメーター | 説明 | メソッド |
MaxIdleConns | 最大アイドル接続数。デフォルト値:100。 | oss.MaxConns |
MaxIdleConnsPerHost | ホストごとの最大アイドル接続数。デフォルト値:100。 | oss.MaxConns |
MaxConnsPerHost | ホストごとの最大接続数。デフォルト値は空です。 | oss.MaxConns |
ConnectTimeout | HTTP タイムアウト期間 (秒)。デフォルト値:10 秒。値 0 はタイムアウトなしを意味します。 | oss.Timeout |
ReadWriteTimeout | HTTP 読み取り/書き込みタイムアウト期間 (秒)。デフォルト値:20 秒。値 0 はタイムアウトなしを意味します。 | oss.Timeout |
IsCname | カスタムドメイン名をエンドポイントとして使用するかどうかを指定します。この機能はデフォルトで無効になっています。 | oss.UseCname |
UserAgent | HTTP リクエストの User-Agent ヘッダーを設定します。デフォルト値:aliyun-sdk-go。 | oss.UserAgent |
ProxyHost | プロキシサーバーのホストアドレスとポートを有効にするかどうかを指定します。有効な値:
| oss.AuthProxy |
ProxyUser | プロキシサーバー認証用のユーザー名。 | oss.AuthProxy |
ProxyPassword | プロキシサーバー認証用のパスワード。 | oss.AuthProxy |
RedirectEnabled | HTTP リダイレクトを有効にするかどうかを指定します。有効な値:
| oss.RedirectEnabled |
InsecureSkipVerify | SSL 証明書検証を有効にするかどうかを指定します。有効な値:
| oss.InsecureSkipVerify |
IsEnableCRC | CRC データ検証を有効にするかどうかを指定します。有効な値:
| oss.EnableCRC |
LogLevel | ログモードを設定します。有効な値:
| oss.SetLogLevel |
次のコードは設定例です:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// handleError は、回復不能なエラーを処理し、エラーメッセージをログに記録してプログラムを終了させます。
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// setupClient は、OSS クライアントインスタンスをセットアップして作成します。
// パラメーター:
//
// endpoint - バケットのエンドポイント。
//
// 作成された OSS クライアントインスタンスを返します。
func setupClient(endpoint string) (*oss.Client, error) {
// 環境変数からアクセス認証情報を取得します。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// 最大接続数を 10、ホストごとの最大アイドル接続数を 20、ホストごとの最大接続数を 20 に設定します。
conn := oss.MaxConns(10, 20, 20)
// HTTP 接続タイムアウトを 20 秒、HTTP 読み取り/書き込みタイムアウトを 60 秒に設定します。
time := oss.Timeout(20, 60)
// カスタムドメイン名をエンドポイントとして使用するかどうかを指定します。デフォルト値は false です。
cname := oss.UseCname(true)
// HTTP リクエストの User-Agent ヘッダーを設定します。デフォルト値は aliyun-sdk-go です。
userAgent := oss.UserAgent("aliyun-sdk-go")
// HTTP リダイレクトを有効にするかどうかを指定します。デフォルト値は true です。
redirect := oss.RedirectEnabled(true)
// SSL 証明書検証を有効にするかどうかを指定します。デフォルト値は検証をスキップすることです。
verifySsl := oss.InsecureSkipVerify(false)
// プロキシサーバーのアドレスとポートを設定します。
// proxy := oss.Proxy("yourProxyHost")
// プロキシサーバーのホストアドレスとポート、およびプロキシサーバー認証用のユーザー名とパスワードを設定します。
authProxy := oss.AuthProxy("yourProxyHost", "yourProxyUserName", "yourProxyPassword")
// CRC データ検証を有効にします。
crc := oss.EnableCRC(true)
// ログモードを設定します。
logLevel := oss.SetLogLevel(oss.LogOff)
// OSSClient インスタンスを作成します。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) の場合は cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4),
conn, time, cname, userAgent, authProxy, verifySsl, redirect, crc, logLevel)
if err != nil {
return nil, err
}
return client, nil
}
func main() {
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) の場合は https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
endpoint := "yourEndpoint"
// 環境変数が設定されているか確認します。
if endpoint == "" {
log.Fatal("Please set yourEndpoint.")
}
// OSS クライアントインスタンスをセットアップして作成します。
client, err := setupClient(endpoint)
if err != nil {
handleError(err)
}
// クライアント情報を出力します。
log.Printf("Client: %#v\n", client)
}
リクエストコンテキストの設定
リクエストコンテキストを使用して、リクエストのライフサイクルを制御および管理し、コンテキスト関連の情報を渡すことができます。
次のコードは、リクエストコンテキストを設定する方法を示しています。リクエストコンテキストの設定は、OSS Go SDK 2.2.9 以降でのみサポートされています。
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// handleError は、回復不能なエラーを処理し、エラーメッセージをログに記録してプログラムを終了させます。
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// uploadFile は、ローカルファイルを OSS バケットにアップロードします。
// パラメーター:
//
// bucketName - バケットの名前。
// objectName - オブジェクトの完全なパス。完全なパスにはバケット名は含まれません。
// localFileName - ローカルファイルの完全なパス。
// endpoint - バケットのエンドポイント。
//
// アップロードが成功した場合、成功ログが記録されます。それ以外の場合は、エラーが返されます。
func uploadFile(bucketName, objectName, localFileName, endpoint string) error {
// 環境変数からアクセス認証情報を取得します。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return err
}
// OSSClient インスタンスを作成します。
// yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) の場合は cn-hangzhou に設定します。他のリージョンについては、実際のリージョンを使用してください。
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
return err
}
// バケットを取得します。
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
// リクエストコンテキストを設定します。
ctx := context.Background()
// リクエストコンテキストのタイムアウトを指定します。
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
// ローカルファイルを OSS にアップロードします。
err = bucket.PutObjectFromFile(objectName, localFileName, oss.WithContext(ctx))
if err != nil {
select {
case <-ctx.Done():
return fmt.Errorf("Request cancelled or timed out")
default:
return err
}
}
// ファイルがアップロードされた後、ログを記録します。
log.Printf("File uploaded successfully: %s/%s", bucketName, objectName)
return nil
}
func main() {
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) の場合は https://oss-cn-hangzhou.aliyuncs.com に設定します。他のリージョンについては、実際のエンドポイントを使用してください。
endpoint := "yourEndpoint"
// バケット名を指定します (例:examplebucket)。
bucketName := "examplebucket"
// yourObjectName をオブジェクトの完全なパスに設定します。完全なパスにはバケット名は含まれません。
objectName := "yourObjectName"
// yourLocalFile をローカルファイルの完全なパスに設定します。
localFileName := "yourLocalFile"
// 環境変数が設定されているか確認します。
if endpoint == "" || bucketName == "" || objectName == "" || localFileName == "" {
log.Fatal("Please set yourEndpoint, bucketName, objectName, and localFileName.")
}
// ファイルのアップロードを試みます。アップロードに失敗した場合は、エラーを処理します。
if err := uploadFile(bucketName, objectName, localFileName, endpoint); err != nil {
handleError(err)
}
// アップロードが成功したことを示すメッセージを出力します。
log.Println("Upload Success!")
}