Python
 Computer >> コンピューター >  >> プログラミング >> Python

Boto3を使ってAWS Glueのセキュリティ設定をページネーションで一覧取得する方法

この記事では、boto3ライブラリを使用して、AWS Glueに登録されているセキュリティ設定(Security Configuration)をページネーションしながら効率的に一覧取得する方法を解説します。

課題

問題: Pythonのboto3ライブラリを使い、自分のAWSアカウント内のAWS Glue Data Catalogに作成されたセキュリティ設定を、ページ分割(ページネーション)しながら取得すること。

解決のためのアプローチと手順

  • ステップ1: 例外処理のために boto3botocore.exceptions(ClientErrorなど)をインポートします。

  • ステップ2: この関数では max_itemspage_sizestarting_token の3つがオプションパラメータとして指定できます。

    • max_items: 取得するレコードの合計数を表します。利用可能なレコード数が max_items を超える場合は、ページネーションを再開するための NextToken がレスポンスに含まれます。

    • page_size: 1ページあたりのレコード数(ページサイズ)を表します。

    • starting_token: ページネーションを途中から再開するためのトークンです。前回のレスポンスに含まれていた NextToken を指定します。

  • ステップ3: boto3 を使ってAWSセッションを作成します。デフォルトプロファイルに region_name が設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的に region_name を渡す必要があります。

  • ステップ4: AWS Glue用のクライアントを作成します。

  • ステップ5: get_security_configurations APIに対する paginator オブジェクトを作成し、すべてのセキュリティ設定の情報を扱えるようにします。

  • ステップ6: paginate() 関数を呼び出し、max_itemspage_sizestarting_tokenPaginationConfig として渡します。

  • ステップ7: MaxItemsPageSize の設定に応じた件数のレコードが返されます。

  • ステップ8: ページネーション処理中にエラーが発生した場合に備え、汎用的な例外ハンドリングを行います。

サンプルコード

以下のコードを使用すると、アカウント内に作成されたすべてのセキュリティ設定をページネーションしながら取得できます。

import boto3
from botocore.exceptions import ClientError

def paginate_through_security_configuration(max_items: int = None,
                                             page_size: int = None,
                                             starting_token: str = None):
    session = boto3.session.Session()
    glue_client = session.client('glue')
    try:
        paginator = glue_client.get_paginator('get_security_configurations')
        response = paginator.paginate(PaginationConfig={
            'MaxItems': max_items,
            'PageSize': page_size,
            'StartingToken': starting_token
        })
        return response
    except ClientError as e:
        raise Exception("boto3 client error in paginate_through_security_configuration: " + e.__str__())
    except Exception as e:
        raise Exception("Unexpected error in paginate_through_security_configuration: " + e.__str__())

a = paginate_through_security_configuration(2, 5)
print(*a)

実行結果

{'SecurityConfigurations': [
{'Name': 'test-sc', 'CreatedTimeStamp': datetime.datetime(2020, 9, 24, 1, 53, 21, 265000, tzinfo=tzlocal()), 'EncryptionConfiguration': {'S3Encryption': [{'S3EncryptionMode': 'SSE-KMS', 'KmsKeyArn': 'arn:aws:kms:us-east-1:*************:key/***************'}]}},
{'Name': 'port-sc', 'CreatedTimeStamp': datetime.datetime(2020, 11, 6, 0, 38, 3, 753000, tzinfo=tzlocal()), 'EncryptionConfiguration': {'S3Encryption': [{'S3EncryptionMode': 'SSE-KMS', 'KmsKeyArn': 'arn:aws:kms:us-east-1:********:key/***************'}]}}],
'NextToken': '',
'ResponseMetadata': {'RequestId': '**********', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Fri, 02 Apr 2021 13:19:57 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '826', 'connection': 'keep-alive', 'x-amzn-requestid': '*********'}, 'RetryAttempts': 0}}

まとめ

boto3のpaginator機能を活用すれば、AWS Glueのセキュリティ設定を大量に保有している環境でも、MaxItemsPageSize を制御しながら安定してデータを取得できます。レスポンスに含まれる NextToken を次の呼び出しの StartingToken に渡すことで、シームレスにページ送りが可能です。また、ClientErrorなどの例外を適切にハンドリングすることで、堅牢なスクリプトを実装できます。

  1. Boto3を使ってAWS Glue Data Catalogのセキュリティ構成・暗号化設定を取得する方法

    はじめにこの記事では、Pythonのboto3ライブラリを使用して、AWS Glue Data Catalogのセキュリティ構成(暗号化設定)を取得する方法を解説します。Data Catalogの暗号化設定を確認することで、保存時の暗号化(Encryption at Rest)や接続パスワードの暗号化状態を把握できます。課題Pythonのboto3ライブラリを使って、カタログのセキュリティ構成/暗号化設定を取得します。例として、指定したカタログの暗号化設定情報を取得するコードを見ていきましょう。解決のためのアプローチと手順ステップ1: 例外処理のために、boto3とbotocore.excep

  2. Boto3を使ってAWS Glueのジョブを削除する方法を徹底解説

    AWS Glueは、ETL(抽出・変換・ロード)処理を簡単に実行できるサーバーレスのデータ統合サービスです。本記事では、Pythonのboto3ライブラリを使用して、自分のAWSアカウント内に作成済みのGlueジョブを削除する方法を、ステップごとにわかりやすく解説します。 課題 Pythonのboto3ライブラリを使って、AWSアカウント内に作成されたGlueジョブを削除します。 例: アカウント内に作成された「transfer_from_s3」というGlueジョブを削除します。 解決のためのアプローチとアルゴリズム ステップ1: 例外処理のために、boto3とbotocoreの例外モジュール