Boto3でS3バケットのマルチパートアップロードをページネーションする方法【AWS Glue対応】
課題
Pythonのboto3ライブラリを使用して、自分のアカウントに作成されたAWS Glue Data CatalogのS3バケット内にあるマルチパートアップロードオブジェクトをページネーション(ページ分割)して取得します。
解決のアプローチとアルゴリズム
ステップ1: boto3とbotocoreの例外クラスをインポートし、例外処理に備えます。
ステップ2: 関数のパラメータを確認します。bucket_nameは必須パラメータであり、prefix_name、max_items、page_size、starting_tokenは任意パラメータです。
prefix_name: ページネーション対象としたい特定のサブフォルダ(プレフィックス)を指定します。
max_items: 返却するレコードの総数を指定します。利用可能なレコード数がmax_itemsを超える場合、レスポンスにNextTokenが含まれ、それを使ってページネーションを再開できます。
page_size: 1ページあたりのサイズ(件数)を指定します。
starting_token: ページネーションを途中から開始するためのトークンです。前回のレスポンスに含まれるMarkerを利用します。
ステップ3: boto3ライブラリを使ってAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを渡す必要があります。
ステップ4: S3用のAWSクライアントを作成します。
ステップ5: list_multipart_uploadsを使用して、S3バケット内のマルチパートアップロード情報を含むpaginatorオブジェクトを作成します。
ステップ6: paginate関数を呼び出し、PaginationConfigパラメータとしてmax_items、page_size、starting_tokenを渡します。また、Bucketパラメータにはbucket_name、Prefixパラメータにはprefix_nameを指定します。
ステップ7: max_itemsとpage_sizeに基づいた件数のレコードが返されます。
ステップ8: ページネーション中に問題が発生した場合は、汎用的な例外処理でエラーをハンドリングします。
サンプルコード
以下のコードを使用すると、ユーザーアカウントに作成されたS3バケットのマルチパートアップロードをページネーションできます。
import boto3
from botocore.exceptions import ClientError
def paginate_through_multipart_upload_s3_bucket(bucket_name, prefix_name=None,
max_items=None, page_size=None,
starting_token=None):
session = boto3.session.Session()
s3_client = session.client('s3')
try:
paginator = s3_client.get_paginator('list_multipart_uploads')
response = paginator.paginate(
Bucket=bucket_name,
Prefix=prefix_name,
PaginationConfig={
'MaxItems': max_items,
'PageSize': page_size,
'StartingToken': starting_token
}
)
return response
except ClientError as e:
raise Exception("boto3 client error in paginate_through_multipart_upload_s3_bucket: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in paginate_through_multipart_upload_s3_bucket: " + e.__str__())
a = paginate_through_multipart_upload_s3_bucket('s3-test-bucket', 'testfolder', 2, 5)
print(*a)
実行結果
{'ResponseMetadata': {'RequestId': 'YA9CGTAAX', 'HostId': '8dqJW******************', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': '8dqJW*********************', 'x-amz-request-id': 'YA9CGTAAX', 'date': 'Sat, 03 Apr 2021 08:16:05 GMT', 'content-type': 'application/xml', 'transfer-encoding': 'chunked', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'Bucket': 's3-test-bucket', 'KeyMarker': '', 'UploadIdMarker': '', 'NextKeyMarker': '', 'Prefix': 'testfolder', 'NextUploadIdMarker': '', 'MaxUploads': 5, 'IsTruncated': False, 'Uploads': [
{'UploadId': 'YADF**************LK25',
'Key': 'testfolder/testfilemultiupload.csv',
'Initiated': datetime(2021, 1, 2),
'StorageClass': 'STANDARD',
'Owner': {
'DisplayName': 'AmazonServicesJob',
'Id': '********************'
}}], 'CommonPrefixes': None}ポイントのまとめ
- マルチパートアップロードの一覧を取得するには、paginator名としてlist_multipart_uploadsを指定します(通常のオブジェクト一覧に使うlist_objectsとは異なります)。
- レスポンスにはUploadId、Key、Initiated(開始日時)、StorageClass、Ownerなどの情報が含まれます。
- IsTruncatedがTrueの場合は、NextKeyMarkerやNextUploadIdMarkerを次のページネーションの開始点として利用できます。
-
Boto3を使ってAWS Glueのセキュリティ設定から指定したセキュリティ構成の詳細を取得する方法
課題Pythonのboto3ライブラリを使用して、AWS Glueセキュリティに存在する指定されたセキュリティ構成(Security Configuration)の詳細情報を取得します。例 − AWS Glueセキュリティに存在する「job-security-settings」というセキュリティ構成の詳細を取得します。解決のためのアプローチとアルゴリズムステップ1 − boto3とbotocoreの例外処理用モジュールをインポートし、例外を適切にハンドリングできるようにします。ステップ2 − security_nameは必須パラメータです。ここには、詳細を取得したいセキュリティ構成の名前を指定
-
Boto3を使ってAWS Glueのジョブを削除する方法を徹底解説
AWS Glueは、ETL(抽出・変換・ロード)処理を簡単に実行できるサーバーレスのデータ統合サービスです。本記事では、Pythonのboto3ライブラリを使用して、自分のAWSアカウント内に作成済みのGlueジョブを削除する方法を、ステップごとにわかりやすく解説します。 課題 Pythonのboto3ライブラリを使って、AWSアカウント内に作成されたGlueジョブを削除します。 例: アカウント内に作成された「transfer_from_s3」というGlueジョブを削除します。 解決のためのアプローチとアルゴリズム ステップ1: 例外処理のために、boto3とbotocoreの例外モジュール