boto3のclientからリージョンを取得する

boto3のclientから_client_config.region_nameでリージョンを取得できます。
2022.07.23

こんにちは、臼田です。

みなさん、boto3使ってますか?(挨拶

今回はちょっとしたメモです。

概要

boto3でclientを利用している時に、そのクライアントがどのリージョンのものかを確認できてもおかしくないよなーと思ったのでちょっと調べてみました。

boto3のclientでリージョンを指定する方法は下記の通りです。

securityhub = boto3.client('securityhub', region_name="us-east-1")

この値がどこかに保持されているはずなので、それを持ってこればいいと考えました。

リージョン取得方法

答えは下記のようになります。

region_name = securityhub._client_config.region_name
print(region_name)
us-east-1

securityhubはクライアントの変数なので、よしなに変えてください。

今回は下記のようにdirで中身を確認して無理やり見つけました。

>>> dir(securityhub)
['_PY_TO_OP_NAME', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_cache', '_client_config', '_convert_to_request_dict', '_emit_api_params', '_endpoint', '_exceptions', '_exceptions_factory', '_get_waiter_config', '_load_exceptions', '_loader', '_make_api_call', '_make_request', '_register_handlers', '_request_signer', '_response_parser', '_serializer', '_service_model', 'accept_administrator_invitation', 'accept_invitation', 'batch_disable_standards', 'batch_enable_standards', 'batch_import_findings', 'batch_update_findings', 'can_paginate', 'close', 'create_action_target', 'create_finding_aggregator', 'create_insight', 'create_members', 'decline_invitations', 'delete_action_target', 'delete_finding_aggregator', 'delete_insight', 'delete_invitations', 'delete_members', 'describe_action_targets', 'describe_hub', 'describe_organization_configuration', 'describe_products', 'describe_standards', 'describe_standards_controls', 'disable_import_findings_for_product', 'disable_organization_admin_account', 'disable_security_hub', 'disassociate_from_administrator_account', 'disassociate_from_master_account', 'disassociate_members', 'enable_import_findings_for_product', 'enable_organization_admin_account', 'enable_security_hub', 'exceptions', 'generate_presigned_url', 'get_administrator_account', 'get_enabled_standards', 'get_finding_aggregator', 'get_findings', 'get_insight_results', 'get_insights', 'get_invitations_count', 'get_master_account', 'get_members', 'get_paginator', 'get_waiter', 'invite_members', 'list_enabled_products_for_import', 'list_finding_aggregators', 'list_invitations', 'list_members', 'list_organization_admin_accounts', 'list_tags_for_resource', 'meta', 'tag_resource', 'untag_resource', 'update_action_target', 'update_finding_aggregator', 'update_findings', 'update_insight', 'update_organization_configuration', 'update_security_hub_configuration', 'update_standards_control', 'waiter_names']
>>> dir(securityhub._client_config)
['NON_LEGACY_OPTION_DEFAULTS', 'OPTION_DEFAULTS', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_record_user_provided_options', '_user_provided_options', '_validate_retry_configuration', '_validate_s3_configuration', 'client_cert', 'connect_timeout', 'defaults_mode', 'endpoint_discovery_enabled', 'inject_host_prefix', 'max_pool_connections', 'merge', 'parameter_validation', 'proxies', 'proxies_config', 'read_timeout', 'region_name', 'retries', 's3', 'signature_version', 'use_dualstack_endpoint', 'use_fips_endpoint', 'user_agent', 'user_agent_extra']

ドキュメントにもあまりちゃんと説明がなかったので今回はこんな感じになりました。

もちろんリージョン指定がないクライアントでもデフォルトのリージョンが格納されています。

securityhub = boto3.client('securityhub')
print(securityhub._client_config.region_name)
ap-northeast-1

まとめ

boto3のclientからリージョンを取得しました。

boto3でスクリプトを書いている時にリージョンがほしい場面はいろいろありますが、clientから取得する方法は汎用性が高そうなので活用してみてはいかがでしょうか?