如何主動(dòng)觸發(fā)特定文件夾的反向同步
本文介紹如何通過云存儲(chǔ)網(wǎng)關(guān)主動(dòng)觸發(fā)特定文件夾的反向同步。
前提條件
已創(chuàng)建共享。具體操作,請(qǐng)參見創(chuàng)建共享。
操作步驟
您可以通過調(diào)用TriggerGatewayRemoteSyncRequest接口來實(shí)現(xiàn)主動(dòng)觸發(fā)特定文件夾的反向同步。
云存儲(chǔ)網(wǎng)關(guān)Python SDK兼容Python2和Python3,下文以Python3版本為例具體說明。
安裝Python SDK。
pip install aliyun-python-sdk-core pip install aliyun-python-sdk-sgw
主動(dòng)觸發(fā)特定文件夾的反向同步,完整代碼如下所示,您可以自行根據(jù)實(shí)際情況修改代碼內(nèi)容。
#!/usr/bin/env python3 from aliyunsdkcore.client import AcsClient from aliyunsdksgw.request.v20180511 import TriggerGatewayRemoteSyncRequest def trigger_gateway_remote_sync(): # 阿里云賬號(hào)AccessKey擁有所有API的訪問權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM用戶進(jìn)行API訪問或日常運(yùn)維,請(qǐng)登錄RAM控制臺(tái)創(chuàng)建RAM用戶。 # AccessKey ID和AccessKey Secret是RAM用戶訪問阿里云ECS服務(wù)API的密鑰,具有該賬戶完全的權(quán)限,請(qǐng)妥善保管,避免泄露。 # 將<AccessKey ID>、<AccessKey Secret>變量替換為您的阿里云賬號(hào)對(duì)應(yīng)的AccessKey ID以及AccessKey Secret。 # 將<RegionId>變量替換為您正在使用的網(wǎng)關(guān)實(shí)例所屬的地域ID。 client = AcsClient('<AccessKey ID>', '<AccessKey Secret>', '<RegionId>') # 調(diào)用TriggerGatewayRemoteSyncRequest接口觸發(fā)主動(dòng)反向同步。 request =TriggerGatewayRemoteSyncRequest.TriggerGatewayRemoteSyncRequest() request.set_GatewayId("<Gateway Id>") request.set_IndexId("<Index Id>") request.set_Path("<Path>") result = client.do_action_with_exception(request) print(result) if __name__ == "__main__": trigger_gateway_remote_sync()
重要參數(shù)說明如下:
說明Gateway Id是需要觸發(fā)主動(dòng)反向同步的網(wǎng)關(guān)ID。
Index Id是需要觸發(fā)主動(dòng)反向同步的共享ID,如果是NFS共享,假設(shè)共享名字為test1,則Index Id為“NFStest1”,如果是SMB共享,假設(shè)共享名字為test2,則Index Id為“SMBtest2”。
Path是需要觸發(fā)主動(dòng)反向同步的特定的掛載點(diǎn)內(nèi)的文件夾。
當(dāng)創(chuàng)建共享時(shí)沒有指定OSS Bucket子目錄,則Path為OSS Bucket子目錄。
例如:假設(shè)需要反向同步的特定文件夾在OSS上的路徑為
oss://<bucket name>/dir
,其中<bucket name>為OSS Bucket的名稱,則Path為/dir
。當(dāng)創(chuàng)建共享時(shí)已指定OSS Bucket子目錄,則Path為該子目錄的相對(duì)路徑。
例如:假設(shè)需要反向同步的特定文件夾在OSS上的路徑為
oss://<bucket name>/<prefix>/dir
,其中<bucket name>為OSS Bucket的名稱,<prefix>為共享指定的OSS Bucket子目錄,則Path為/dir
。如果您需要觸發(fā)共享根目錄的反向同步,則Path為空或者“/"。
輸出結(jié)果示例如下:
<?xml version='1.0' encoding='UTF-8'?> <TriggerGatewayRemoteSyncResponse> <TaskId>t-000cbzf2v72pcall****</TaskId> <Message>successful</Message> <RequestId>72191BD9-10AF-43BA-B1B5-4677F992DA3E</RequestId> <Code>200</Code> <Success>true</Success> </TriggerGatewayRemoteSyncResponse>
由于主動(dòng)觸發(fā)反向同步是一個(gè)異步的長(zhǎng)時(shí)間的過程,所以需要通過不斷輪詢?nèi)蝿?wù)接口來獲知主動(dòng)反向同步任務(wù)是否完成,完整代碼如下所示,您可以自行根據(jù)實(shí)際情況修改代碼內(nèi)容。
from aliyunsdksgw.request.v20180511 import DescribeTasksRequest def describe_tasks(): client = AcsClient('<AccessKey ID>', '<AccessKey Secret>', '<RegionId>') request = DescribeTasksRequest.DescribeTasksRequest() request.set_TaskId("<Task Id>") # Task Id可以通過解析上一步的XML格式的輸出結(jié)果獲取,即示例中的“t-000cbzf2v72pcall****”。 request.set_TargetId("<Gateway Id>") # Gateway Id是需要觸發(fā)主動(dòng)反向同步的網(wǎng)關(guān)ID。 result = client.do_action_with_exception(request) print(result) if __name__ == "__main__": describe_tasks()
輸出結(jié)果示例如下,可以通過XML解析獲取字段Progress的值,如果Progress為100表示任務(wù)已經(jīng)完成,如果Progress為-1表示任務(wù)失敗,如果Progress在0和100之間表示任務(wù)正在執(zhí)行中。
<?xml version='1.0' encoding='UTF-8'?> <DescribeTasksResponse> <TotalCount>1</TotalCount> <Tasks> <SimpleTask> <Progress>100</Progress> <TaskId>t-000cbzf2v72pcall****</TaskId> <CreatedTime>1622194647</CreatedTime> <StateCode>task.state.completed</StateCode> <UpdatedTime>1622194656</UpdatedTime> <StageCode>completed</StageCode> <Name>task.name.operate_gateway.trigger_remote_sync</Name> </SimpleTask> </Tasks> <RequestId>0CE0F47E-1664-468E-AE95-8FC86A9C8BB3</RequestId> <Message>successful</Message> <PageSize>10</PageSize> <PageNumber>1</PageNumber> <Code>200</Code> <Success>true</Success> </DescribeTasksResponse>