0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Storage Transfer ServiceのAPI使用で転送ジョブの設定内容変更・削除

Posted at

これは一体

転送ジョブって、細かいところまではコンソール上で設定変更できなかったりするので、
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

参考にさせていただきました。ありがとうございます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?