日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Go數(shù)據(jù)復(fù)制

數(shù)據(jù)復(fù)制是以異步(近實時)方式將源Bucket中的文件(Object)以及對Object的創(chuàng)建、更新和刪除等操作自動復(fù)制到目標(biāo)Bucket。OSS支持跨區(qū)域復(fù)制(Cross-Region Replication)和同區(qū)域復(fù)制(Same-Region Replication)。

注意事項

  • 本文以華東1(杭州)外網(wǎng)Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產(chǎn)品訪問OSS,請使用內(nèi)網(wǎng)Endpoint。關(guān)于OSS支持的Region與Endpoint的對應(yīng)關(guān)系,請參見OSS訪問域名、數(shù)據(jù)中心、開放端口

  • 本文以從環(huán)境變量讀取訪問憑證為例。如何配置訪問憑證,請參見配置訪問憑證

  • 本文以O(shè)SS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請參見初始化

  • 阿里云賬號默認擁有數(shù)據(jù)復(fù)制的相關(guān)權(quán)限。如果您希望通過RAM用戶或者STS的方式執(zhí)行數(shù)據(jù)復(fù)制相關(guān)操作,例如:

    • 開啟數(shù)據(jù)復(fù)制,您必須擁有oss:PutBucketReplication權(quán)限。

    • 開啟或關(guān)閉數(shù)據(jù)復(fù)制時間控制(RTC)功能,您必須擁有oss:PutBucketRtc權(quán)限。

    • 查看數(shù)據(jù)復(fù)制規(guī)則,您必須擁有oss:GetBucketReplication權(quán)限。

    • 查看可復(fù)制的目標(biāo)地域,您必須擁有oss:GetBucketReplicationLocation權(quán)限。

    • 查看數(shù)據(jù)復(fù)制進度,您必須擁有oss:GetBucketReplicationProgress權(quán)限。

    • 關(guān)閉數(shù)據(jù)復(fù)制,您必須擁有oss:DeleteBucketReplication權(quán)限

示例代碼

開啟數(shù)據(jù)復(fù)制

重要

開啟數(shù)據(jù)復(fù)制前,請確保源存儲空間與目標(biāo)存儲空間同時處于非版本化或已啟用版本控制狀態(tài)。

以下代碼用于開啟數(shù)據(jù)復(fù)制,將華東1(杭州)地域下的srcexamplebucket中的數(shù)據(jù)復(fù)制到相同或不同地域下的destexamplebucket。

package main

import (
	"encoding/xml"
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}
	// 創(chuàng)建OSSClient實例。
	// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}
	// 指定源Bucket名稱。
	srcbucketName := "srcexamplebucket"
	// 指定數(shù)據(jù)要復(fù)制到的目標(biāo)Bucket。
	destBucketName := "destexamplebucket"
	// 指定待復(fù)制Object的前綴prefix_1和prefix_2。指定Prefix后,只有匹配該Prefix的Object才會復(fù)制到目標(biāo)Bucket。
	// 如果您需要將源Bucket中的所有Object復(fù)制到目標(biāo)Bucket,則無需設(shè)置Prefix。
	prefix1 := "prefix_1"
	prefix2 := "prefix_2"
	// 指定SSE-KMS密鑰ID。如果指定Status為Enabled,則必須指定該元素。
	keyId := "c4d49f85-ee30-426b-a5ed-95e9139d"
	// 指定OSS是否復(fù)制通過SSE-KMS加密創(chuàng)建的對象。
	source := "Enabled"
	prefixSet := oss.ReplicationRulePrefix{Prefix: []*string{&prefix1, &prefix2}}
	// 在配置跨區(qū)域復(fù)制規(guī)則時,開啟數(shù)據(jù)復(fù)制時間控制(RTC)功能。
	enabled := "enabled"
	reqReplication := oss.PutBucketReplication{
		Rule: []oss.ReplicationRule{
			{
				PrefixSet: &prefixSet,
				//指定可以被復(fù)制到目標(biāo)Bucket的操作。默認值為ALL,表示源Bucket的所有操作都會復(fù)制到目標(biāo)Bucket。
				Action: "ALL",
				RTC:    &enabled,
				Destination: &oss.ReplicationRuleDestination{
					Bucket:       destBucketName,
					Location:     "oss-cn-hangzhou",
					TransferType: "oss_acc",
				},
				HistoricalObjectReplication: "disabled",
				SyncRole:                    "aliyunramrole",
				EncryptionConfiguration:     &keyId,
				SourceSelectionCriteria:     &source,
			},
		},
	}

	xmlBody, err := xml.Marshal(reqReplication)
	if err != nil {
		log.Fatalf("Failed to marshal XML for PutBucketReplication: %v", err)
	}
	err = client.PutBucketReplication(srcbucketName, string(xmlBody))
	if err != nil {
		log.Fatalf("Failed to put bucket replication: %v", err)
	}

	log.Println("Put Bucket Replication Success!")
}

查看數(shù)據(jù)復(fù)制規(guī)則

以下代碼用于查看examplebucket的數(shù)據(jù)復(fù)制規(guī)則。

package main

import (
	"encoding/xml"
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 創(chuàng)建OSSClient實例。
	// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// 填寫源Bucket名稱。
	bucketName := "srcexamplebucket"

	// 獲取數(shù)據(jù)復(fù)制配置
	stringData, err := client.GetBucketReplication(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket replication: %v", err)
	}

	// 解析XML響應(yīng)
	var repResult oss.GetBucketReplicationResult
	err = xml.Unmarshal([]byte(stringData), &repResult)
	if err != nil {
		log.Fatalf("Failed to unmarshal XML response: %v", err)
	}

	// 打印數(shù)據(jù)復(fù)制規(guī)則
	for _, rule := range repResult.Rule {
		log.Printf("Rule Id: %s", rule.ID)
		if rule.RTC != nil {
			log.Printf("Rule RTC: %s", *rule.RTC)
		}
		if rule.PrefixSet != nil {
			for _, prefix := range rule.PrefixSet.Prefix {
				log.Printf("Rule Prefix: %s", *prefix)
			}
		}
		log.Printf("Rule Action: %s", rule.Action)
		log.Printf("Rule Destination Bucket: %s", rule.Destination.Bucket)
		log.Printf("Rule Destination Location: %s", rule.Destination.Location)
		log.Printf("Rule Destination TransferType: %s", rule.Destination.TransferType)
		log.Printf("Rule Status: %s", rule.Status)
		log.Printf("Rule Historical Object Replication: %s", rule.HistoricalObjectReplication)
		if rule.SyncRole != "" {
			log.Printf("Rule SyncRole: %s", rule.SyncRole)
		}
	}
}

設(shè)置數(shù)據(jù)復(fù)制時間控制(RTC)

以下代碼用于為已有的跨區(qū)域復(fù)制規(guī)則開啟或關(guān)閉數(shù)據(jù)復(fù)制時間控制(RTC)功能。

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 創(chuàng)建OSSClient實例。
	// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// 填寫源Bucket名稱。
	bucketName := "srcexamplebucket"

	// 開啟RTC。
	enabled := "enabled"

	// 填寫跨區(qū)域復(fù)制規(guī)則ID。
	id := "564df6de-7372-46dc-b4eb-10f****"

	// 構(gòu)建PutBucketRTC請求
	rtc := oss.PutBucketRTC{
		RTC: &enabled,
		ID:  id,
	}

	err = client.PutBucketRTC(bucketName, rtc)
	if err != nil {
		log.Fatalf("Failed to put bucket RTC: %v", err)
	}

	log.Println("Put Bucket RTC Success!")
}

查看可復(fù)制的目標(biāo)地域

以下代碼用于查看examplebucket的數(shù)據(jù)可復(fù)制的目標(biāo)地域列表。

package main

import (
	"encoding/xml"
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 創(chuàng)建OSSClient實例。
	// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// 填寫源Bucket名稱。
	bucketName := "srcexamplebucket"

	// 查看源Bucket可復(fù)制到的目標(biāo)地域。
	stringData, err := client.GetBucketReplicationLocation(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket replication location: %v", err)
	}

	// 解析XML響應(yīng)
	var repLocation oss.GetBucketReplicationLocationResult
	err = xml.Unmarshal([]byte(stringData), &repLocation)
	if err != nil {
		log.Fatalf("Failed to unmarshal XML response: %v", err)
	}

	// 打印目標(biāo)地域信息
	for _, location := range repLocation.Location {
		log.Printf("Bucket Replication Location: %s", location)
	}

	// 打印傳輸類型信息
	for _, transferType := range repLocation.LocationTransferType {
		log.Printf("Bucket Replication Location Transfer Type Location: %s", transferType.Location)
		log.Printf("Bucket Replication Location Transfer Type Type: %s", transferType.TransferTypes)
	}

	// 打印RTC位置信息
	for _, rtcLocation := range repLocation.RTCLocation {
		log.Printf("Bucket Replication Location RTC Location: %s", rtcLocation)
	}

	log.Println("Get Bucket Replication Location Success!")
}

查看數(shù)據(jù)復(fù)制進度

數(shù)據(jù)復(fù)制進度分為歷史數(shù)據(jù)復(fù)制進度和新寫入數(shù)據(jù)復(fù)制進度。

  • 歷史數(shù)據(jù)復(fù)制進度用百分比表示,僅對開啟了歷史數(shù)據(jù)復(fù)制的存儲空間有效。

  • 新寫入數(shù)據(jù)復(fù)制進度用新寫入數(shù)據(jù)的時間點表示,代表這個時間點之前的數(shù)據(jù)已復(fù)制完成。

以下代碼用于查看examplebucket中指定規(guī)則ID的數(shù)據(jù)復(fù)制進度。

package main

import (
	"encoding/xml"
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 創(chuàng)建OSSClient實例。
	// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// 填寫源Bucket名稱。
	bucketName := "srcexamplebucket"
	ruleId := "564df6de-7372-46dc-b4eb-10f****"

	// 查看數(shù)據(jù)復(fù)制進度。
	stringData, err := client.GetBucketReplicationProgress(bucketName, ruleId)
	if err != nil {
		log.Fatalf("Failed to get bucket replication progress: %v", err)
	}

	// 解析XML響應(yīng)
	var repProgress oss.GetBucketReplicationProgressResult
	err = xml.Unmarshal([]byte(stringData), &repProgress)
	if err != nil {
		log.Fatalf("Failed to unmarshal XML response: %v", err)
	}

	// 打印數(shù)據(jù)復(fù)制進度信息
	for _, repProgressRule := range repProgress.Rule {
		log.Printf("Rule Id: %s", repProgressRule.ID)
		if repProgressRule.PrefixSet != nil {
			for _, prefix := range repProgressRule.PrefixSet.Prefix {
				log.Printf("Rule Prefix: %s", *prefix)
			}
		}
		log.Printf("Replication Progress Rule Action: %s", repProgressRule.Action)
		log.Printf("Replication Progress Rule Destination Bucket: %s", repProgressRule.Destination.Bucket)
		log.Printf("Replication Progress Rule Destination Location: %s", repProgressRule.Destination.Location)
		log.Printf("Replication Progress Rule Destination TransferType: %s", repProgressRule.Destination.TransferType)
		log.Printf("Replication Progress Rule Status: %s", repProgressRule.Status)
		log.Printf("Replication Progress Rule Historical Object Replication: %s", repProgressRule.HistoricalObjectReplication)
		if repProgressRule.Progress != nil && repProgressRule.Progress.HistoricalObject != "" {
			log.Printf("Replication Progress Rule Progress Historical Object: %s", repProgressRule.Progress.HistoricalObject)
		}
		log.Printf("Replication Progress Rule Progress NewObject: %s", repProgressRule.Progress.NewObject)
	}

	log.Println("Get Bucket Replication Progress Success!")
}

關(guān)閉數(shù)據(jù)復(fù)制

通過刪除存儲空間的復(fù)制規(guī)則,您可以關(guān)閉源存儲空間到目標(biāo)存儲空間的數(shù)據(jù)復(fù)制關(guān)系。

以下代碼用于刪除examplebucket中指定規(guī)則ID的數(shù)據(jù)復(fù)制關(guān)系。

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// 從環(huán)境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// 創(chuàng)建OSSClient實例。
	// yourEndpoint填寫B(tài)ucket對應(yīng)的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// 填寫源Bucket名稱。
	srcbucketName := "yourSourceBucket"

	// 填寫GetBucketReplication接口返回的數(shù)據(jù)復(fù)制規(guī)則ID。
	ruleID := "e047ce28-6806-4131-b1da-30142116****"

	// 關(guān)閉數(shù)據(jù)復(fù)制。
	err = client.DeleteBucketReplication(srcbucketName, ruleID)
	if err != nil {
		log.Fatalf("Failed to delete bucket replication: %v", err)
	}

	log.Println("Delete Bucket Replication Success!")
}

相關(guān)文檔

  • 關(guān)于開啟數(shù)據(jù)復(fù)制的API接口說明,請參見PutBucketReplication

  • 關(guān)于為已有的跨區(qū)域復(fù)制規(guī)則開啟或關(guān)閉數(shù)據(jù)復(fù)制時間控制(RTC)功能的API接口說明,請參見PutBucketRTC

  • 關(guān)于查看數(shù)據(jù)復(fù)制規(guī)則的API接口說明,請參見GetBucketReplication

  • 關(guān)于查看可復(fù)制的目標(biāo)地域的API接口說明,請參見GetBucketReplicationLocation

  • 關(guān)于查看數(shù)據(jù)復(fù)制進度的API接口說明,請參見GetBucketReplicationProgress

  • 關(guān)于關(guān)閉數(shù)據(jù)復(fù)制的API接口說明,請參見DeleteBucketReplication