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

:OSS SDK for Goの初期化

最終更新日:Nov 08, 2024

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アドレスとポートを有効にするかどうかを指定します。 有効な値:

  • true

  • false (デフォルト)

oss.AuthProxy

ProxyUser

プロキシサーバーへのログオンに使用されるユーザー名。

oss.AuthProxy

ProxyPassword

プロキシサーバーへのログインに使用されるパスワード。

oss.AuthProxy

RedirectEnabled

HTTPリダイレクトを有効にするかどうかを指定します。 有効な値:

  • true (デフォルト)

  • false

oss.RedirectEnabled

InsecureSkipVerify

SSLベースの認証を有効にするかどうかを指定します。 有効な値:

  • true (デフォルト)

  • false

oss.InsecureSkipVerify

IsEnableCRC

CRC-64を有効にするかどうかを指定します。 有効な値:

  • true (デフォルト)

  • false

    重要

    CRC-64を無効にしないことを推奨します。 CRC-64を無効にすると、オブジェクトのアップロードとダウンロード中にデータの整合性が影響を受ける可能性があります。

oss.EnableCRC

LogLevel

ログモード。 有効な値:

  • oss.LogOff

  • oss. デバッグ

  • oss. エラー

  • oss. 警告

  • oss.Info

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の使用を開始する」をご参照ください。