OSSClientは、バケットやオブジェクトなどのOSSリソースを管理するGo用のObject Storage Service (OSS) SDKのクライアントとして機能します。 OSS SDK for Goを使用してリクエストを開始する場合、OSSClientインスタンスを初期化し、ビジネス要件に基づいてデフォルトの設定項目を変更する必要があります。
前提条件
アクセス資格情報が設定されます。 詳細については、「アクセス資格情報の設定」をご参照ください。
OSSClientインスタンスの作成
V1署名アルゴリズムの使用
OSSエンドポイントを使用したOSSClientインスタンスの作成
次のサンプルコードは、OSSエンドポイントを使用してOSSClientインスタンスを作成する方法の例を示しています。 さまざまなリージョンのOSSエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main(){
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("client :%# v\n", client)
}
カスタムドメイン名を使用したOSSClientインスタンスの作成
次のサンプルコードは、カスタムドメイン名を使用してOSSClientインスタンスを作成する方法の例を示しています。 詳細については、「カスタムドメイン名をバケットのデフォルトドメイン名にマップする」をご参照ください。
カスタムドメイン名を使用する場合、ossClient.listBucketsメソッドは使用できません。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main(){
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// yourEndpointをバケットのカスタムドメイン名に設定します。
// oss.UseCnameをtrueに設定して、CNAMEを有効にします。 CNAMEは、カスタムドメイン名をバケットにマップするために使用されます。
client, err := oss.New("yourEndpoint", "", ", ", oss.SetCredentialsProvider(&provider),oss.UseCname(true))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("client :%# v\n", client)
}
V4署名アルゴリズムの使用 (推奨)
より安全なV4署名アルゴリズムを使用する場合は、エンドポイントのリージョン情報を指定し、初期化中にoss.AuthV4を宣言する必要があります。 OSS SDK for Go 3.0.2以降はV4署名をサポートしています。
次のサンプルコードは、V4署名アルゴリズムを使用してOSSエンドポイントを使用してOSSClientインスタンスを作成する方法の例を示しています。 V4署名アルゴリズムを使用して他の方法でOSSClientインスタンスを作成する場合は、次のサンプルコードを参照して変数を変更します。
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main(){
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
// バケットが配置されているリージョンのエンドポイントを指定します。
client, err := oss.New("yourEndpoint", "", "", ", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region(" yourRegion "))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.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 |
例:
パッケージメイン
import (import (import)
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 接続数を10、サーバーのアイドル接続の最大数を20、サーバーの最大接続数を20に設定します。
conn := oss.MaxConns(10,20、20)
// HTTP接続のタイムアウト時間を20に設定し、HTTP接続の読み取りまたは書き込みタイムアウト時間を60に設定します。 単位は秒です。
time := oss.Timeout(20,60)
// カスタムドメイン名をエンドポイントとして使用できるかどうかを指定します。 デフォルトでは、カスタムドメイン名をエンドポイントとして使用することはできません。
cname := oss.UseCname(true)
// User-Agentヘッダーを指定します。 デフォルト値: aliyun-sdk-go。
userAgent := oss.UserAgent("aliyun-sdk-go")
// HTTPリダイレクトを有効にするかどうかを指定します。 デフォルト値:true
リダイレクト:= oss.RedirectEnabled(true)
// SSLベースの認証を有効にするかどうかを指定します。 デフォルト値:false
verifySsl := oss.InsecureSkipVerify(false)
// プロキシサーバのIPアドレスとポートを有効にするかどうかを指定します。
// proxy := oss.Proxy("yourProxyHost")
// プロキシサーバーのIPアドレスとポート、およびプロキシサーバーへのログインに使用されるユーザー名とパスワードを指定します。
authProxy := oss.AuthProxy("yourProxyHost","yourProxyUserName","yourProxyPassword")
// CRC-64を有効にします。
crc := oss.EnableCRC(true)
// ログモードを指定します。
logLevel := oss.SetLogLevel(oss.LogOff)
client, err := oss.New("yourEndpoint", "" ", ", oss.SetCredentialsProvider(&provider),conn,time,cname,userAgent,authProxy,verifySsl,redirect,crc,logLevel)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("%#v\n", client)
}
要求コンテキストの設定
リクエストコンテキストを使用して、リクエストのライフサイクルを管理し、リクエストに関連するコンテキスト情報を渡すことができます。
次のコードは、リクエストコンテキストの設定方法の例を示しています。 OSS SDK for Go 2.2.9以降を使用して、リクエストコンテキストを設定できます。
パッケージメイン
import (import (import)
「コンテキスト」
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
「時間」
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
// Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 これらの資格情報を使用してOSSで操作を実行することは、リスクの高い操作です。 RAMユーザーを使用してAPI操作を呼び出したり、ルーチンのO&Mを実行することを推奨します。RAMユーザーを作成するには、RAMコンソールにログインします。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。 例: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// リクエストコンテキストを設定します。
ctx := context.Background()
// リクエストコンテキストの有効期限を指定します。
ctx, cancel := context.WithTimeout(ctx, 5 * time.Second)
defer cancel()
// ローカルファイルをOSSにアップロードします。
err = bucket.PutObjectFromFile("yourObjectName", "yourLocalFile", oss.WithContext(ctx))
if err! =nil {
select {
case <-ctx.Done():
fmt.Println (「リクエストキャンセルまたはタイムアウト」)
default:
fmt.Println("アップロード失敗、エラー:" 、err)
}
os.Exit(-1)
}
fmt.Println (「アップロード成功! 」)
}
次に何をすべきか
OSS SDK for Goを初期化した後、OSSClientインスタンスを使用してリクエストを開始できます。 詳細については、「OSS SDK For Goの使用開始方法」をご参照ください。