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

:Goベースのライフサイクルルール

最終更新日:Feb 23, 2024

Object Storage Service (OSS) バケットにアップロードされるすべてのデータが頻繁にアクセスされるわけではありません。 めったにアクセスされないデータは、コンプライアンスとアーカイブの目的でコールドストレージに保存されます。 複数のOSSバケットに保存されているデータを同時に削除する場合は、データの最終変更時刻に基づいてライフサイクルルールを設定できます。 ストレージコストを削減するために、コールドデータとホットデータを別々に保存することを推奨します。 ホットデータとコールドデータを別々に保存するには、データアクセスモードを自動的に監視し、コールドデータを識別して、コールドデータのストレージクラスを変更するようにOSSを設定します。 このシナリオでは、データの最終アクセス時刻に基づいてライフサイクルルールを設定することもできます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。

  • ライフサイクルルールを設定するには、oss:PutBucketLifecycle権限が必要です。 ライフサイクルルールをクエリするには、oss:GetBucketLifecycle権限が必要です。 ライフサイクルルールをクリアするには、oss:DeleteBucketLifecycle権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

ライフサイクルルールを設定

次のコードは、2つのライフサイクルルールの例を示します。 1つのライフサイクルルールは、データの最後の変更時刻に基づいて設定されます。 その他のライフサイクルルールは、データの最終アクセス時刻に基づいて設定されます。 ライフサイクルルールを設定した後、ビジネス要件に基づいてライフサイクルルールを変更できます。 既存のライフサイクルルールを変更する方法については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスを変更したり、オブジェクトを削除したりする

次のコードでは、examplebucketという名前のバケットの最終変更時刻に基づいてライフサイクルルールを設定し、バケット内のオブジェクトのストレージクラスを変更したり、オブジェクトを削除したりする方法の例を示します。

パッケージメイン

import (import (import)
"fmt"
"os"

「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
// バケットの名前を指定します。 
	bucketName := "yourBucketName"

// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// ライフサイクルルールを作成し、IDをrule1に設定します。 バケット内のfooプレフィックスを含む名前のオブジェクトは、オブジェクトが最後に変更されてから3日後に期限切れになるように指定します。 
	rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)

// バケット内のバージョン管理が有効なオブジェクトが削除マーカーであり、他のバージョンがない場合、削除マーカーは削除されます。 
	deleteMark := true
expiration := oss.LifecycleExpiration {
ExpiredObjectDeleteMarker: &deleteMark、}

// オブジェクトが最後に変更されてから30日後に、以前のバージョンのオブジェクトが削除されるように指定します。 
	versionExpiration := oss.LifecycleVersionExpiration {
NoncurrentDays: 30、}

// オブジェクトが最後に変更されてから10日後に、以前のバージョンのオブジェクトのストレージクラスをIAに変更することを指定します。 
	versionTransition := oss.LifecycleVersionTransition {
NoncurrentDays: 10、StorageClass: "IA" 、}

// ライフサイクルルールを作成し、IDをrule2に設定します。 
	rule2 := oss.LifecycleRule {
ID: "rule2" 、プレフィックス: "yourObjectPrefix" 、ステータス: "Enabled" 、有効期限:&有効期限、NonVersionExpiration: &versionExpiration、NonVersionTransition: &versionTransition、}

// ライフサイクルルールを作成し、IDをrule3に設定します。 このルールは、キーがtag1で値がvalue1のタグを含むオブジェクトに対して有効になります。 これらのオブジェクトは、オブジェクトが最後に変更されてから3日後に期限切れになります。 
	rule3 := oss.LifecycleRule {
ID: "rule3" 、プレフィックス: "",
ステータス: "Enabled" 、タグ: []oss.Tag {
oss. タグ {
キー: "tag1" 、値: "value1" 、},
},
有効期限: &oss。LifecycleExpiration{Days: 3} 、}

// ライフサイクルルールを作成します。 
	rules := []oss.LifecycleRule{rule1, rule2, rule3}
// バケット名を指定します。 例: examplebucket. 
	bucketName := "examplebucket"
err = client.SetBucketLifecycle(bucketName, rules)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}

最終変更時刻に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスを変更します。ただし、名前に特定のプレフィックスが含まれているオブジェクトや特定のタグがあるオブジェクトは除きます。

次のコードは、オブジェクトが最後に変更されてから30日後に、examplebucketバケット内の次のオブジェクトのストレージクラスをIAに変更するようにライフサイクルルールを設定する方法の例を示しています。名前にログプレフィックスが含まれていないオブジェクト、キーがkey1で値がvalue1であるタグペアを持たないオブジェクト、および指定されたサイズ要件を満たさないオブジェクト。 フィルタリング条件は、フィルタノードのNot要素で指定されます。

パッケージメイン

import (import (import)
"fmt"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
"os"
)

func main() {
// バケットの名前を指定します。 
	bucketName := "yourBucketName"

// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

tag := oss.Tag {
キー: "key1" 、値: "value1" 、}
// ライフサイクルルールが有効になるオブジェクトの最小サイズを指定します。 
	サイズ:= int64(500)
// ライフサイクルルールが有効になるオブジェクトの最大サイズを指定します。 
	smallSize := int64(64500)
filter := oss.LifecycleFilter {
ObjectSizeGreaterThan: &サイズ、ObjectSizeLessThan: &smallSize、Not: []oss.LifecycleFilterNot {
{
プレフィックス: "logs/log" 、タグ:&タグ,
},
},
}
rule1 := oss.LifecycleRule {
ID: "mtime transition1" 、プレフィックス: "logs" 、ステータス: "Enabled" 、トランジション: []oss.LifecycleTransition {
{
日: 30,
StorageClass: oss.StorageIA、},
},
フィルター:&Filter、}
var rules = []oss.LifecycleRule{rule1}
err = client.SetBucketLifecycle(bucketName, rules)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("% s\n", "set lifecycle successed")
}

最終アクセス時間に基づいてライフサイクルルールを設定し、オブジェクトのストレージクラスを変更します。

次のコードは、examplebucketバケット内のオブジェクトのストレージクラスを変更するために、最終アクセス時間に基づいてライフサイクルルールを設定する方法の例を示しています。

パッケージメイン

import (import (import)
"fmt"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
"os"
)

func main() {
// バケットの名前を指定します。 
	bucketName := "yourBucketName"

// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

isTrue := true
isFalse := false
// ライフサイクルルールを作成し、IDをrule1に設定します。 名前にログプレフィックスが含まれ、サイズが64 KB以下のオブジェクトのストレージクラスを、オブジェクトが最後にアクセスされてから30日後にIAに変更するように指定します。 さらに、ログプレフィックスを含む名前のオブジェクトが、オブジェクトに再度アクセスしたときにIAオブジェクトとして保存されるように指定します。 
	rule1 := oss.LifecycleRule {
ID: "rule1" 、プレフィックス: "logs" 、ステータス: "Enabled" 、トランジション: []oss.LifecycleTransition {
{
日: 30,
StorageClass: oss.StorageIA、IsAccessTime: &isTrue、ReturnToStdWhenVisit: &isFalse、AllowSmallFile: &isTrue、},
},
}
// ライフサイクルルールを作成し、IDをrule2に設定します。 名前にdirプレフィックスが含まれ、サイズが64 KBを超える以前のバージョンのオブジェクトを、最後にアクセスしてから10日後にIAに変更するように指定します。 さらに、名前にdirプレフィックスが含まれるオブジェクトのストレージクラスを、オブジェクトに再度アクセスしたときにStandardに変更するように指定します。 
	rule2 := oss.LifecycleRule {
ID: "rule2" 、プレフィックス: "dir" 、ステータス: "Enabled" 、NonVersionTransitions: []oss.LifecycleVersionTransition {
{
NoncurrentDays: 10、StorageClass: oss.StorageIA、IsAccessTime: &isTrue、ReturnToStdWhenVisit: &isTrue、AllowSmallFile: &isFalse、},
},
}
// ライフサイクルルールを作成します。 
	var rules = []oss.LifecycleRule{rule1, rule2}
err = client.SetBucketLifecycle(bucketName, rules)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("% s\n", "set bucket life cycle success")
}

ライフサイクルルールの照会

次のコードは、examplebucketという名前のバケットに設定されたライフサイクルルールを照会する方法の例を示しています。

パッケージメイン

import (import (import)
"fmt"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
"os"
)

func main() {
// バケットの名前を指定します。 
	bucketName := "yourBucketName"

// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
   
	lcRes, err := client.GetBucketLifecycle(bucketName)
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
for _, rule := range lcRes.Rules {
fmt.Println("Lifecycle Rule Id:", rule.ID)
fmt.Println("Lifecycle Rule Prefix:", rule.Prefix)
fmt.Println("Lifecycle Rule Status:", rule.Status)
ルールがあれば有効期限! =nil {
fmt.Println("Lifecycle Rule Expiration Days:", rule.Expiration.Days)
fmt.Println("Lifecycle Rule Expiration Date:", rule.Expiration.Date)
fmt.Println("Lifecycle Rule Expiration Created Before Date:", rule.Expiration.CreatedBeforeDate)
if rule.Expiration.ExpiredObjectDeleteMarker! =nil {
fmt.Println("Lifecycle Rule Expiration Expired Object DeleteMarker:", * rule.Expiration.ExpiredObjectDeleteMarker)
}
}

_, tag := range rule. タグ {
fmt.Println("Lifecycle Rule Tag Key:", tag.Key)
fmt.Println("Lifecycle Rule Tag Value:", tag.Value)
}

for _, transition := range rule. トランジション {
fmt.Println("Lifecycle Rule Transition Days:", transition.Days)
fmt.Println("Lifecycle Rule Transition Created Before Date:", transition.CreatedBeforeDate)
fmt.Println("Lifecycle Rule Transition Storage Class:", transition.StorageClass)
if transition.IsAccessTime! =nil {
fmt.Println("Lifecycle Rule Transition Is Access Time:", * transition.IsAccessTime)
}
if transition.ReturnToStdWhenVisit! =nil {
fmt.Println("Lifecycle Rule Transition Return To Std When Visit:", * transition.ReturnToStdWhenVisit)
}

if transition.AllowSmallFile! =nil {
fmt.Println("Lifecycle Rule Transition Allow Small File:", * transition.AllowSmallFile)
}

}
if rule.AbortMultipartUpload! =nil {
fmt.Println("Lifecycle Rule Abort Multipart Upload Days:", rule.AbortMultipartUpload.Days)
fmt.Println("Lifecycle Rule Abort Multipart Upload Created Before Date:", rule.AbortMultipartUpload.CreatedBeforeDate)
}

if rule.NonVersionExpiration! =nil {
fmt.Println("Lifecycle Non Version Expiration Non Current Days:", rule.NonVersionExpiration.NoncurrentDays)
}

for _, nonVersionTransition := range rule.NonVersionTransitions {
fmt.Println("Lifecycle Rule Non Version Transitions Non current Days:", nonVersionTransition.NoncurrentDays)
fmt.Println("Lifecycle Rule Non Version Transition Storage Class:", nonVersionTransition.StorageClass)
if nonVersionTransition.IsAccessTime! =nil {
fmt.Println("ライフサイクルルール非バージョン移行はアクセスタイムです:", * nonVersionTransition.IsAccessTime)
}

if nonVersionTransition.ReturnToStdWhenVisit! =nil {
fmt.Println("Lifecycle Rule Non Version Transition Return To Std When Visit:", * nonVersionTransition.ReturnToStdWhenVisit)
}

if nonVersionTransition.AllowSmallFile! =nil {
fmt.Println("Lifecycle Rule Non Version Allow Small File:", * nonVersionTransition.AllowSmallFile)
}

if rule. フィルター! =nil {
if rule.Filter.ObjectSizeGreaterThan! =nil {
fmt.Println("Lifecycle Rule Filter Object Size Greater Than:", * rule.Filter.ObjectSizeGreaterThan)
}
if rule.Filter.ObjectSizeLessThan! =nil {
fmt.Println("Lifecycle Rule Filter Object Size Less Than:", * rule.Filter.ObjectSizeLessThan)
}
_, filterNot := range rule.Filter.Not {
fmt.Println("Lifecycle Rule Filter Not Prefix:", filterNot.Prefix)
if filterNot.Tag! =nil {
fmt.Println("Lifecycle Rule Filter Not Tag Key:", filterNot.Tag.Key)
fmt.Println("Lifecycle Rule Filter Not Tag Value:", filterNot.Tag.Value)
}
}
}
}
}
}

ライフサイクルルールの削除

次のコードは、examplebucketという名前のバケットのライフサイクルルールをクリアする方法の例を示しています。 1つ以上のライフサイクルルールを削除する場合は、「バケットに設定されている1つ以上のライフサイクルルールを削除する方法」を参照してください。.

パッケージメイン

import (import (import)
    "fmt"
    "os"
    「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
    // バケットの名前を指定します。 
    bucketName := "yourBucketName"
 
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、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に設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // ライフサイクルルールを削除します。 
    err = client.DeleteBucketLifecycle(bucketName)
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
 } 
} 

参考資料

  • ライフサイクルルールを管理するための完全なサンプルコードについては、『GitHub』をご参照ください。

  • ライフサイクルルールを設定するために呼び出すことができるAPI操作の詳細については、「PutBucketLifecycle」をご参照ください。

  • ライフサイクルルールを照会するために呼び出すAPI操作の詳細については、「GetBucketLifecycle」をご参照ください。

  • ライフサイクルルールを削除するために呼び出すことができるAPI操作の詳細については、「DeleteBucketLifecycle」をご参照ください。