バケットに時間ベースの保持ポリシーを設定できます。保持期間は 1 日から 70 年の範囲で設定できます。このトピックでは、保持ポリシーを作成、クエリ、ロックする方法について説明します。
使用上の注意
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを使用します。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。同じリージョンから他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。Object Storage Service (OSS) がサポートするリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。このトピックでは、アクセス資格情報は環境変数から取得されます。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
サンプルコード
保持ポリシーを作成する
バケットにバージョン管理と保持ポリシーを同時に設定することはできません。したがって、バケットの保持ポリシーを作成する前に、バケットでバージョン管理が有効になっていないことを確認してください。
次のコードは、保持ポリシーを作成する方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
bucketName string // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの構成をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットの保持ポリシーを初期化するリクエストを作成します。
request := &oss.InitiateBucketWormRequest{
Bucket: oss.Ptr(bucketName), // 保持ポリシーを設定するバケットの名前を指定します。
InitiateWormConfiguration: &oss.InitiateWormConfiguration{
RetentionPeriodInDays: oss.Ptr(int32(30)), // オブジェクトの保持期間を 30 日に指定します。
},
}
// バケットの保持ポリシーを初期化し、結果を処理します。
result, err := client.InitiateBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to initiate bucket worm %v", err)
}
// バケットの保持ポリシーを初期化した結果を出力します。
log.Printf("initiate bucket worm result:%#v\n", result)
}
ロックされていない保持ポリシーのキャンセル
次のコードは、ロックされていない保持ポリシーをキャンセルする方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
bucketName string // バケット名。
)
// コマンドラインパラメーターを初期化します。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// OSS クライアントを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// 保持ポリシーをキャンセルするリクエストを作成します。
request := &oss.AbortBucketWormRequest{
Bucket: oss.Ptr(bucketName),
}
// 保持ポリシーをキャンセルし、結果を処理します。
result, err := client.AbortBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to abort bucket worm %v", err)
}
log.Printf("abort bucket worm result:%#v\n", result)
}
保持ポリシーをロックする
次のコードは、保持ポリシーをロックする方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string
bucketName string
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
var (
wormId = "worm id" // wormId は WORM タスクの ID を指定します。
)
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの構成をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 構成を使用して OSS クライアントを作成します。
client := oss.NewClient(cfg)
// 保持ポリシーを完了するリクエストを作成します。
request := &oss.CompleteBucketWormRequest{
Bucket: oss.Ptr(bucketName),
WormId: oss.Ptr(wormId),
}
// クライアントの CompleteBucketWorm メソッドを呼び出して、保持ポリシーを完了します。
result, err := client.CompleteBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to complete bucket worm %v", err)
}
log.Printf("complete bucket worm result:%#v\n", result)
}
保持ポリシーをクエリする
次のコードは、保持ポリシーをクエリする方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
bucketName string // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
// main 関数。
func main() {
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの構成をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// バケットに設定されている保持ポリシーをクエリするリクエストを作成します。
request := &oss.GetBucketWormRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
}
// バケットに設定されている保持ポリシーをクエリし、結果を処理します。
result, err := client.GetBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to get bucket worm %v", err)
}
// バケットに設定されている保持ポリシーをクエリした結果を出力します。
log.Printf("get bucket worm result:%#v\n", result)
}
オブジェクトの保持期間の延長
次のコードは、ロックされた保持ポリシー内のオブジェクトの保持期間を延長する方法の例を示しています。
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // リージョン。
bucketName string // バケット名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
var (
wormId = "worm id" // wormId は WORM タスクの ID を指定します。
)
// コマンドラインパラメーターを解析します。
flag.Parse()
// バケット名が空かどうかを確認します。
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// リージョンが空かどうかを確認します。
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// デフォルトの構成をロードし、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// 保持ポリシーで指定された保持期間を延長するリクエストを作成します。
request := &oss.ExtendBucketWormRequest{
Bucket: oss.Ptr(bucketName),
WormId: oss.Ptr(wormId),
ExtendWormConfiguration: &oss.ExtendWormConfiguration{
RetentionPeriodInDays: oss.Ptr(int32(30)), // ロックされた保持ポリシーのオブジェクトの保持期間を 30 日に延長します。
},
}
// 保持ポリシーで指定された保持期間を延長し、結果を処理します。
result, err := client.ExtendBucketWorm(context.TODO(), request)
if err != nil {
log.Fatalf("failed to extend bucket worm %v", err)
}
// 保持ポリシーで指定された保持期間を延長した結果を出力します。
log.Printf("extend bucket worm result:%#v\n", result)
}
参考資料
保持ポリシーの作成方法の詳細については、「InitiateBucketWorm」をご参照ください。
ロックされていない保持ポリシーをキャンセルする方法の詳細については、「AbortBucketWorm」をご参照ください。
保持ポリシーのロック方法の詳細については、「CompleteBucketWorm」をご参照ください。
保持ポリシーのクエリ方法の詳細については、「GetBucketWorm」をご参照ください。
オブジェクトの保持期間を延長する方法の詳細については、「ExtendBucketWorm」をご参照ください。