OSS SDK for Go をインストールし、アクセス認証情報を設定して、バケットの作成、オブジェクトのアップロード・ダウンロード・一覧表示・削除といった基本操作を実行します。
前提条件
開始する前に、以下の準備が整っていることを確認してください。
Object Storage Service (OSS) が有効化された Alibaba Cloud アカウント
AccessKey ペアを持つ Resource Access Management (RAM) ユーザー。詳細については、「CreateAccessKey」をご参照ください。
Go がインストール済みであること
Go のインストール状況を確認します。
go version手順 1:SDK のインストール
Go モジュールを初期化し、OSS SDK for Go をインストールします。
go mod init oss-quickstart
go get github.com/aliyun/aliyun-oss-go-sdk/oss手順 2:アクセス認証情報の設定
RAM ユーザーの AccessKey ペアを環境変数として設定します。
重要
ソースコードに AccessKey 認証情報をハードコードしてはいけません。誤って公開されるのを防ぐために、環境変数または他の安全な方法を使用してください。認証情報のオプションの詳細については、「アクセス認証情報の設定」をご参照ください。
macOS/Linux
export OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
export OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>Windows
set OSS_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID>
set OSS_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>手順 3:コード例の実行
このプログラムは、バケットを作成し、オブジェクトをアップロードしてダウンロードし、バケット内のオブジェクトを一覧表示し、最後にオブジェクトを削除します。
プロジェクトディレクトリに
main.goという名前のファイルを作成します。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// ヘルパー関数間で共有されるグローバルクライアント。
var client *oss.Client
func main() {
// 実際の値に置き換えてください。
bucketName := "yourBucketName"
endpoint := "yourEndpoint" // 例: https://oss-cn-hangzhou.aliyuncs.com
region := "yourRegion" // 例: cn-hangzhou
// 環境変数から認証情報を読み込みます。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error: %v", err)
}
// AuthV4 署名を使用してクライアントを作成します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region(region))
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err = oss.New(endpoint, "", "", clientOptions...)
if err != nil {
log.Fatalf("Error: %v", err)
}
log.Printf("Client: %#v\n", client)
// バケットを作成します。
if err := createBucket(bucketName); err != nil {
log.Fatalf("Error: %v", err)
}
// オブジェクトをアップロードします。
objectName := "file.txt"
localFileName := "/path/to/local/file.txt"
if err := uploadFile(bucketName, objectName, localFileName); err != nil {
log.Fatalf("Error: %v", err)
}
// オブジェクトをダウンロードします。
downloadedFileName := "/path/to/downloaded/file.txt"
if err := downloadFile(bucketName, objectName, downloadedFileName); err != nil {
log.Fatalf("Error: %v", err)
}
// バケット内のオブジェクトを一覧表示します。
if err := listObjects(bucketName); err != nil {
log.Fatalf("Error: %v", err)
}
// オブジェクトを削除します。
if err := deleteObject(bucketName, objectName); err != nil {
log.Fatalf("Error: %v", err)
}
}
func createBucket(bucketName string) error {
err := client.CreateBucket(bucketName)
if err != nil {
return err
}
log.Printf("Bucket created successfully: %s", bucketName)
return nil
}
func uploadFile(bucketName, objectName, localFileName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
err = bucket.PutObjectFromFile(objectName, localFileName)
if err != nil {
return err
}
log.Printf("File uploaded successfully to %s/%s", bucketName, objectName)
return nil
}
func downloadFile(bucketName, objectName, downloadedFileName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
err = bucket.GetObjectToFile(objectName, downloadedFileName)
if err != nil {
return err
}
log.Printf("File downloaded successfully to %s", downloadedFileName)
return nil
}
func listObjects(bucketName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
// ListObjects はデフォルトで 1 回のリクエストにつき最大 100 個のオブジェクトを返します。
marker := ""
for {
lsRes, err := bucket.ListObjects(oss.Marker(marker))
if err != nil {
return err
}
for _, object := range lsRes.Objects {
log.Printf("Object: %s", object.Key)
}
if !lsRes.IsTruncated {
break
}
marker = lsRes.NextMarker
}
return nil
}
func deleteObject(bucketName, objectName string) error {
bucket, err := client.Bucket(bucketName)
if err != nil {
return err
}
err = bucket.DeleteObject(objectName)
if err != nil {
return err
}
log.Printf("Object deleted successfully: %s/%s", bucketName, objectName)
return nil
}main.go内のプレースホルダー値を実際の値に置き換えます。プレースホルダー 説明 例 yourBucketNameご利用の OSS バケット名 my-go-demo-bucketyourEndpointバケットが配置されているリージョンのエンドポイント https://oss-cn-hangzhou.aliyuncs.comyourRegionバケットが配置されているリージョン ID cn-hangzhou/path/to/local/file.txtアップロードするローカルファイルのパス /tmp/file.txt/path/to/downloaded/file.txtダウンロードしたオブジェクトを保存するパス /tmp/downloaded-file.txtプログラムを実行します。
go run main.go期待される出力結果は以下のとおりです。
Client: &oss.Client{...} Bucket created successfully: my-go-demo-bucket File uploaded successfully to my-go-demo-bucket/file.txt File downloaded successfully to /tmp/downloaded-file.txt Object: file.txt Object deleted successfully: my-go-demo-bucket/file.txt
クリーンアップ
テスト後、不要な料金を避けるために、OSS コンソールから、または次のコードを追加してバケットを削除してください。
err := client.DeleteBucket(bucketName)
if err != nil {
log.Fatalf("Error: %v", err)
}
log.Printf("Bucket deleted: %s", bucketName)説明 バケットは空である必要があります。すべてのオブジェクトおよび未完了のマルチパートアップロードを事前に削除してください。