これは一体
転送ジョブって、細かいところまではコンソール上で設定変更できなかったりするので、
API使用での変更が必要になる場面があると思います。
ということで、今回はAPI使用で転送ジョブの設定内容変更・削除をメモとして残しました。
ジョブの設定内容変更
以下、注意点です。
ジョブの転送仕様を更新しても、すでに実行されている転送操作には影響しない。 更新できるtransferJobのフィールドは、description、transferSpec、notificationConfig、およびstatus。 ジョブのtransferSpecを更新するには、完全な転送仕様を提供する必要がある。 必須フィールドが欠落している不完全な仕様は、エラーINVALID_ARGUMENTで拒否される。
今回、S3からGCSへデータを移しました。
変更箇所としては、データ送信元のS3のPATHを変更させました。
‘transferSpec’の”awsS3DataSource”を変更するので、
‘update_transfer_job_field_mask’: には、’transferSpec’と指定しました。
from pprint import pprint from googleapiclient import discovery from oauth2client.client import GoogleCredentials credentials = GoogleCredentials.get_application_default() service = discovery.build('storagetransfer', 'v1', credentials=credentials) # The name of job to update. # Required. job_name = 'transferJobs/ジョブ名' # TODO: Update placeholder value. update_transfer_job_request_body = { 'project_id': 'プロジェクトID', 'update_transfer_job_field_mask': 'transferSpec', 'transfer_job': { 'status': 'ENABLED', "transferSpec": { "awsS3DataSource": { "bucketName": "バケット名", "path": "PATH名/", "roleArn": "信頼関係を記述したロールのARN" }, "gcsDataSink": { "bucketName": "バケット名", "path": "PATH名/" }, }, }, } request = service.transferJobs().patch(jobName=job_name, body=update_transfer_job_request_body) response = request.execute() # TODO: Change code below to process the `response` dict: pprint(response)
ジョブの削除
今回、ジョブを削除するので、statusをDELETEDに指定します。
下記のように、’update_transfer_job_field_mask’で
設定更新をしたい箇所を記述し、その内容を具体的に書くという感じです。
'update_transfer_job_field_mask': 'status' 'transfer_job': { 'status': 'DELETED' }
""" BEFORE RUNNING: --------------- 1. If not already done, enable the Storage Transfer API and check the quota for your project at https://console.developers.google.com/apis/api/storagetransfer 2. This sample uses Application Default Credentials for authentication. If not already done, install the gcloud CLI from https://cloud.google.com/sdk and run `gcloud beta auth application-default login`. For more information, see https://developers.google.com/identity/protocols/application-default-credentials 3. Install the Python client library for Google APIs by running `pip install --upgrade google-api-python-client` """ from pprint import pprint from googleapiclient import discovery from oauth2client.client import GoogleCredentials credentials = GoogleCredentials.get_application_default() service = discovery.build('storagetransfer', 'v1', credentials=credentials) # The name of job to update. # Required. job_name = 'transferJobs/ジョブの名前' # TODO: Update placeholder value. update_transfer_job_request_body = { 'project_id': 'プロジェクトID', 'update_transfer_job_field_mask': 'status', 'transfer_job': { 'status': 'DELETED' } } request = service.transferJobs().patch(jobName=job_name, body=update_transfer_job_request_body) response = request.execute() # TODO: Change code below to process the `response` dict: pprint(response)
上記記述したPYファイルを実行すると、下記のようなメッセージが現れると思います。
@cloudshell:~ (PJ名)$ python3 patch.py {'creationTime': '', 'deletionTime': '', 'lastModificationTime': '', 'latestOperationName': 'transferOperations/ジョブ名前', 'name': 'transferJobs/ジョブ名前', 'projectId': '', 'status': 'DELETED', 'transferSpec': {'awsS3DataSource': {'bucketName': '', 'roleArn': ''}, 'gcsDataSink': {'bucketName': '', 'path': ''}, 'transferOptions': {'deleteObjectsFromSourceAfterTransfer': True}}}
コンソールでジョブの一覧を確認すると、削除されているのが確認できると思います。
ほか
もし、AWSのS3との連携をしていて、”Failed to obtain the location of the source S3 bucket”エラーが
発生した場合、IAMポリシーの設定や、信頼関係を見直してみると、うまく行くかもしれません。
参考
https://cloud.google.com/storage-transfer/docs/reference/rest/v1/transferJobs/patch https://www.any-api.com/googleapis_com/storagetransfer/docs/transferJobs/storagetransfer_transferJobs_patch https://github.com/GoogleCloudPlatform/storage-sdrs/blob/master/scripts/provisioning/command_line.py
参考にさせていただきました。ありがとうございます。
元記事はこちら
https://qiita.com/namely_/items/32f13a169dd6a154711b
著者:@namely_