オブジェクトレベルの保持ポリシー (Object WORM) は、個々のオブジェクトに WORM コンプライアンスを適用し、それぞれに個別の保持モードと有効期限を設定できます。このトピックでは、Go SDK V2 を使用して Object WORM を有効化し、その構成をクエリし、オブジェクトレベルの保持ポリシーを管理する方法について説明します。
注意事項
この機能は現在、招待プレビュー段階です。この機能を使用するには、technical support に連絡してアクティベーションを申請してください。この機能は現在、中国 (杭州)、中国 (成都)、中国 (深セン)、中国 (広州)、中国 (青島)、中国 (北京)、中国 (ウランチャブ)、中国 (河源)、中国 (香港)、ドイツ (フランクフルト)、日本 (東京)、韓国 (ソウル)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、フィリピン (マニラ)、タイ (バンコク)、サウジアラビア (リヤド)、UAE (ドバイ) リージョンでのみサポートされています。
このトピックのコード例では、中国 (杭州) リージョン ID (
cn-hangzhou) を使用しています。これらの例では、デフォルトでパブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS がサポートするリージョンとエンドポイントについて詳しくは、「リージョンとエンドポイント」をご参照ください。
コード例
Object WORM の有効化とデフォルトポリシーの設定
次のコードを使用して、Object WORM を有効化し、デフォルトの保持ポリシーを設定します。
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")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
request := &oss.PutBucketObjectWormConfigurationRequest{
Bucket: oss.Ptr(bucketName),
ObjectWormConfiguration: &oss.ObjectWormConfiguration{
ObjectWormEnabled: oss.Ptr("Enabled"),
Rule: &oss.ObjectWormRule{
DefaultRetention: &oss.ObjectWormDefaultRetention{
Mode: oss.Ptr("COMPLIANCE"),
Days: oss.Ptr(int32(1)),
},
},
},
}
result, err := client.PutBucketObjectWormConfiguration(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to put bucket Object WORM configuration: %v", err)
}
log.Printf("Put bucket Object WORM configuration result: %#v\n", result)
}Object WORM 構成のクエリ
次のコードを使用して、バケットの Object WORM 構成をクエリします。
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")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
request := &oss.GetBucketObjectWormConfigurationRequest{
Bucket: oss.Ptr(bucketName),
}
result, err := client.GetBucketObjectWormConfiguration(context.TODO(), request)
if err != nil {
log.Fatalf("Failed to get bucket Object WORM configuration: %v", err)
}
log.Printf("Get bucket Object WORM configuration result: %#v\n", result)
}オブジェクト保持ポリシーの設定
次のコードを使用して、オブジェクトに個別の保持ポリシーを設定します。
package main
import (
"context"
"flag"
"log"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
var (
region string
bucketName string
objectName string
)
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
flag.Parse()
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
date := time.Now().UTC().Add(5 * time.Hour).Format("2006-01-02T15:04:05.000Z")
putRequest := &oss.PutObjectRetentionRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
Retention: &oss.ObjectWormRetention{
Mode: oss.Ptr("COMPLIANCE"),
RetainUntilDate: oss.Ptr(date),
},
}
putResult, err := client.PutObjectRetention(context.TODO(), putRequest)
if err != nil {
log.Fatalf("Failed to put object retention policy: %v", err)
}
log.Printf("Put object retention policy result: %#v\n", putResult)
}オブジェクト保持ポリシーのクエリ
次のコードを使用して、オブジェクトの保持ポリシーをクエリします。
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
objectName string
)
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
flag.Parse()
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
getRequest := &oss.GetObjectRetentionRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
}
getResult, err := client.GetObjectRetention(context.TODO(), getRequest)
if err != nil {
log.Fatalf("Failed to get object retention policy: %v", err)
}
log.Printf("Get object retention policy result: %#v\n", getResult)
}