OSSClientは、Object Storage Service (OSS) のGoクライアントです。 バケットやオブジェクトなどのOSSリソースの管理に使用されます。 OSS SDK for Goを使用してリクエストを開始する場合、OSSClientインスタンスを初期化し、ビジネス要件に基づいてデフォルトの設定項目を変更する必要があります。
前提条件
アクセス資格情報が設定されます。 詳細については、「アクセス資格情報の設定」をご参照ください。
OSSClientインスタンスの作成
(推奨) V4署名アルゴリズムの使用
より良いセキュリティを提供するV4署名アルゴリズムを使用することを推奨します。 V4署名アルゴリズムを使用する場合は、regionパラメーターを指定します。 リージョンはAlibaba CloudリージョンIDである必要があります。 例: cn-杭州
また、oss.AuthV4を宣言する必要があります。 OSS SDK for Go 3.0.2以降はV4署名をサポートしています。
次のサンプルコードは、V4署名アルゴリズムを使用してOSSエンドポイントを使用してOSSClientインスタンスを作成する方法の例を示しています。 V4署名アルゴリズムを使用して他の方法でOSSClientインスタンスを作成する場合は、次のサンプルコードを参照して変数を変更します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Call handleError to handle unrecoverable errors and terminate the program after recording the error messages.
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// Use setupClient to create and configure an OSSClient instance.
// Parameters:
//
// endpoint: endpoint of the region in which the bucket is located.
// region: the region in which the bucket is located.
//
// Return the created OSSClient instance.
func setupClient(endpoint, region string) (*oss.Client, error) {
// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// Create an OSSClient instance and use the signature algorithm 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() {
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
endpoint := "yourEndpoint"
// Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou.
region := "yourRegion"
// Check whether the environment variables are configured.
if endpoint == "" || region == "" {
log.Fatal("Please set yourEndpoint and yourRegion.")
}
// Create and configure an OSSClient instance.
client, err := setupClient(endpoint, region)
if err != nil {
handleError(err)
}
// Display the client information.
log.Printf("Client: %#v\n", client)
}
(非推奨) V1署名アルゴリズムの使用
2024年12月1日以降、新しいUIDを持つ新規顧客は、OSSのV1署名アルゴリズムを利用できなくなります。 2025年6月1日以降、OSSはV1署名アルゴリズムを更新および維持しなくなり、V1署名アルゴリズムは新しいバケットで使用できなくなります。 ビジネスへの影響を防ぐため、できるだけ早い機会にV1シグネチャをV4シグネチャにアップグレードします。
OSSエンドポイントを使用したOSSClientインスタンスの作成
次のサンプルコードは、OSSエンドポイントを使用してOSSClientインスタンスを作成する方法の例を示しています。 さまざまなリージョンのOSSエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Call handleError to handle unrecoverable errors and terminate the program after recording the error messages.
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// Use setupClient to create and configure an OSSClient instance.
// Parameters:
//
// endpoint: endpoint of the region in which the bucket is located.
//
// Return the created OSSClient instance.
func setupClient(endpoint string) (*oss.Client, error) {
// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// Create an OSSClient instance.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New(endpoint, "", "", clientOptions...)
if err != nil {
return nil, err
}
return client, nil
}
func main() {
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
endpoint := "yourEndpoint"
// Check whether the environment variables are configured.
if endpoint == "" {
log.Fatal("Please set yourEndpoint.")
}
// Create and configure an OSSClient instance.
client, err := setupClient(endpoint)
if err != nil {
handleError(err)
}
// Display the client information.
log.Printf("Client: %#v\n", client)
}
カスタムドメイン名を使用したOSSClientインスタンスの作成
次のサンプルコードは、カスタムドメイン名を使用してOSSClientインスタンスを作成する方法の例を示しています。 詳細については、「カスタムドメイン名をバケットのデフォルトドメイン名にマップする」をご参照ください。
カスタムドメイン名を使用する場合、ossClient.listBucketsメソッドは使用できません。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Call handleError to handle unrecoverable errors and terminate the program after recording the error messages.
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// Use setupClient to create and configure an OSSClient instance and use CNAME as an endpoint.
// Parameters:
//
// endpoint: the custom domain name that you want to map to the bucket.
//
// Return the created OSSClient instance.
func setupClient(endpoint string) (*oss.Client, error) {
// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// Create an OSSClient instance and use CNAME as an endpoint.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
clientOptions = append(clientOptions, oss.UseCname(true))
// Specify the version of the signature algorithm.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New(endpoint, "", "", clientOptions...)
if err != nil {
return nil, err
}
return client, nil
}
func main() {
// Specify the endpoint of the region in which the bucket is located.
// Example: custom-domain-for-your-bucket.com.
endpoint := "yourEndpoint"
// Check whether the environment variables are configured.
if endpoint == "" {
log.Fatal("Please set yourEndpoint.")
}
// Create and configure an OSSClient instance and use CNAME as an endpoint.
client, err := setupClient(endpoint)
if err != nil {
handleError(err)
}
// Display the client information.
log.Printf("Client: %#v\n", client)
}
OSSClient インスタンスの設定
OSSClientインスタンスを使用して、プロキシサーバー、接続タイムアウト期間、最大接続数などのパラメーターを設定できます。 下表に、各パラメーターを説明します。
パラメーター | 説明 | 移動方法 |
MaxIdleConns | アイドル接続の最大数。 デフォルト値:100 | oss.MaxConns |
MaxIdleConnsPerHost | サーバーのアイドル接続の最大数。 デフォルト値:100 | oss.MaxConns |
MaxConnsPerHost | サーバーの最大接続数。 デフォルトでは、このパラメータは空のままです。 | oss.MaxConns |
ConnectTimeout | HTTP接続のタイムアウト期間。 単位は秒です。 デフォルト値は 10 です。 値0は、HTTP接続がタイムアウトしないことを示します。 | oss. タイムアウト |
ReadWriteTimeout | HTTP接続の読み取りまたは書き込みタイムアウト時間。 単位は秒です。 デフォルト値は 20 です。 値0は、HTTP接続がタイムアウトしないことを示します。 | oss. タイムアウト |
IsCname | カスタムドメイン名をエンドポイントとして使用できるかどうかを指定します。 デフォルトでは、カスタムドメイン名をエンドポイントとして使用することはできません。 | oss.UseCname |
UserAgent | User-Agentヘッダー。 デフォルト値: aliyun-sdk-go。 | oss.UserAgent |
ProxyHost | プロキシサーバーのIPアドレスとポートを有効にするかどうかを指定します。 有効な値:
| oss.AuthProxy |
ProxyUser | プロキシサーバーへのログオンに使用されるユーザー名。 | oss.AuthProxy |
ProxyPassword | プロキシサーバーへのログインに使用されるパスワード。 | oss.AuthProxy |
RedirectEnabled | HTTPリダイレクトを有効にするかどうかを指定します。 有効な値:
| oss.RedirectEnabled |
InsecureSkipVerify | SSLベースの認証を有効にするかどうかを指定します。 有効な値:
| oss.InsecureSkipVerify |
IsEnableCRC | CRC-64を有効にするかどうかを指定します。 有効な値:
| oss.EnableCRC |
LogLevel | ログモード。 有効な値:
| oss.SetLogLevel |
例:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Call handleError to handle unrecoverable errors and terminate the program after recording the error messages.
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// Use setupClient to create and configure an OSSClient instance.
// Parameters:
//
// endpoint: endpoint of the region in which the bucket is located.
//
// Return the created OSSClient instance.
func setupClient(endpoint string) (*oss.Client, error) {
// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return nil, err
}
// Set the number of connections to 10, the maximum number of idle connections of a server to 20, and the maximum number of connections of a server to 20.
conn := oss.MaxConns(10, 20, 20)
// Set the timeout period of an HTTP connection to 20 and the read or write timeout period of an HTTP connection to 60. Unit: seconds.
time := oss.Timeout(20, 60)
// Specify whether a custom domain name can be used as an endpoint. By default, a custom domain name cannot be used as an endpoint.
cname := oss.UseCname(true)
// Specify the User-Agent header. Default value: aliyun-sdk-go.
userAgent := oss.UserAgent("aliyun-sdk-go")
// Specify whether to enable HTTP redirection. Default value: true.
redirect := oss.RedirectEnabled(true)
// Specify whether to enable SSL-based authentication. Default value: false.
verifySsl := oss.InsecureSkipVerify(false)
// Specify whether to enable the IP address and port of the proxy server.
// proxy := oss.Proxy("yourProxyHost")
// Specify the IP address and the port of the proxy server, and the username and the password that are used to log on to the proxy server.
authProxy := oss.AuthProxy("yourProxyHost", "yourProxyUserName", "yourProxyPassword")
// Enable CRC-64.
crc := oss.EnableCRC(true)
// Specify the log mode.
logLevel := oss.SetLogLevel(oss.LogOff)
// Create an OSSClient instance.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. Specify the actual region.
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() {
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
endpoint := "yourEndpoint"
// Check whether the environment variables are configured.
if endpoint == "" {
log.Fatal("Please set yourEndpoint.")
}
// Create and configure an OSSClient instance.
client, err := setupClient(endpoint)
if err != nil {
handleError(err)
}
// Display the client information.
log.Printf("Client: %#v\n", client)
}
リクエストコンテキストの指定
リクエストコンテキストを使用して、リクエストのライフサイクルを管理し、リクエストに関連するコンテキスト情報を渡すことができます。
次のサンプルコードは、リクエストコンテキストの指定方法の例を示しています。 OSS SDK for Go 2.2.9以降を使用して、リクエストコンテキストを指定できます。
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// Call handleError to handle unrecoverable errors and terminate the program after recording the error messages.
func handleError(err error) {
log.Fatalf("Error: %v", err)
}
// Call uploadFile to upload a local file to an OSS bucket.
// Parameters:
//
// bucketName: name of the bucket.
// objectName: the full path of the object. Do not include the bucket name in the full path.
// localFileName: the full path of the local file.
// endpoint: endpoint of the region in which the bucket is located.
//
// If the local file is uploaded, a log is generated. Otherwise, an error message is returned.
func uploadFile(bucketName, objectName, localFileName, endpoint string) error {
// Obtain access credentials from environment variables.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
return err
}
// Create an OSSClient instance.
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
client, err := oss.New(endpoint, "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
return err
}
// Create a bucket.
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
// Specify the request context.
ctx := context.Background()
// Specify the expiration time of the request context.
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
// Upload the local file to 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
}
}
// After the local file is uploaded, a log is generated.
log.Printf("File uploaded successfully: %s/%s", bucketName, objectName)
return nil
}
func main() {
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
endpoint := "yourEndpoint"
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
// Specify the full path of the object. Do not include the bucket name in the full path.
objectName := "yourObjectName"
// Specify the full path of the local file.
localFileName := "yourLocalFile"
// Check whether the environment variables are configured.
if endpoint == "" || bucketName == "" || objectName == "" || localFileName == "" {
log.Fatal("Please set yourEndpoint, bucketName, objectName, and localFileName.")
}
// Upload the local file. If the local file fails to be uploaded, an error is reported. Resolve the error.
if err := uploadFile(bucketName, objectName, localFileName, endpoint); err != nil {
handleError(err)
}
// A message indicating that the object is uploaded is returned.
log.Println("Upload Success!")
}
次に何をすべきか
OSS SDK for Goを初期化した後、OSSClientインスタンスを使用してリクエストを開始できます。 詳細については、「OSS SDK For Goの使用を開始する」をご参照ください。