Boto3を使ってAWSアカウント内のすべてのクローラー一覧を取得する方法
この記事では、Pythonのboto3ライブラリを使用して、AWSアカウントに存在するすべてのクローラー(AWS Glue Crawler)の一覧を取得する方法を解説します。
課題
問題設定: Pythonのboto3ライブラリを使って、アカウント内のすべてのクローラーのリストを取得します。
解決のアプローチと手順
ステップ1: boto3とbotocore.exceptionsをインポートし、例外処理に備えます。
ステップ2: 今回使用する関数にはパラメータは不要です。
ステップ3: boto3ライブラリでAWSセッションを作成します。デフォルトプロファイルにregion_nameが設定されていることを確認してください。設定されていない場合は、セッション作成時に明示的にregion_nameを渡す必要があります。
ステップ4: AWS Glue用のクライアントを作成します。
ステップ5: list_crawlers関数を呼び出します。
ステップ6: この関数は、AWS Glueデータカタログに存在するすべてのクローラーの名前リストを返します。
ステップ7: 処理中に問題が発生した場合に備え、汎用的な例外処理を実装しておきます。
サンプルコード
以下のコードは、すべてのクローラーの一覧を取得する例です。
import boto3
from botocore.exceptions import ClientError
def list_of_crawlers():
session = boto3.session.Session()
glue_client = session.client('glue')
try:
crawler_details = glue_client.list_crawlers()
return crawler_details
except ClientError as e:
raise Exception("boto3 client error in list_of_crawlers: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in list_of_crawlers: " + e.__str__())
print(list_of_crawlers())実行結果
{'CrawlerNames': ['crawler_for_s3_file_job', 'crawler_for_employee_data', 'crawler_for_security_data'], 'ResponseMetadata': {'RequestId': 'a498ba4a-7ba4-47d3-ad81-d86287829c1d', 'HTTPStatusCode': 200, 'HTTPHeaders': {'date': 'Sat, 13 Feb 2021 14:04:03 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '830', 'connection': 'keep-alive', 'x-amzn-requestid': 'a498ba4a-7ba4-47d3-ad81-d86287829c1d'}, 'RetryAttempts': 0}}コードのポイント
list_crawlers()は、レスポンスとしてCrawlerNamesキーにクローラー名の配列を含む辞書を返します。
ClientErrorを個別にキャッチすることで、AWS API呼び出し時のエラー(権限不足やリージョン指定ミスなど)と、その他の予期しないエラーを区別してハンドリングできます。
クローラーが多数存在する場合は、NextTokenを使用したページネーション処理が必要になる点にも注意してください。
-
PythonのBoto3ライブラリを使ってAWS S3のバケット一覧を取得する方法
問題の概要: Pythonのboto3ライブラリを使用して、AWSアカウント内に存在するすべてのS3バケットの一覧を取得します。例: BUCKET_1、BUCKET_2、BUCKET_3 のようなバケット名の一覧を取得します。boto3とはboto3は、PythonからAWSの各種サービスを操作するための公式SDKです。S3やEC2、DynamoDBなど、多くのAWSリソースをPythonコードから簡単に扱えます。使用前には pip install boto3 でインストールしておき、AWSの認証情報(アクセスキー・シークレットキー)が適切に設定されていることを確認してください。解決のための手
-
Pythonで現在のディレクトリ内のすべてのサブディレクトリ一覧を取得する方法
os.walkを使ってサブディレクトリを再帰的に取得するPythonで、あるディレクトリ配下のすべてのサブディレクトリを再帰的に一覧化したい場合は、標準ライブラリのos.walk関数を使うのが最も手軽です。os.walkは走査中の各ディレクトリについて「(ディレクトリのパス, サブディレクトリ名のリスト, ファイル名のリスト)」という3要素のタプルを順番に返します。タプルの最初の要素(パス)だけを取り出せば、起点となるディレクトリとその配下の全サブディレクトリのパス一覧が得られます。実際のコードは次のようになります。import os subdirs = [x[0] for x in os.