中国リージョンでboto3のget_available_regionsを使用する際には引数でパーティションを指定する
こんにちは。サービス開発室の武田です。
boto3では指定したサービスがサポートされているリージョンの一覧を取得したいと思った時、get_available_regions
という関数が使用できます。
実際に実行してみると、次のような結果が表示されました。
>>> session.get_available_regions(service_name="ec2") ['af-south-1', 'ap-east-1', 'ap-northeast-1', 'ap-northeast-2', 'ap-northeast-3', 'ap-south-1', 'ap-south-2', 'ap-southeast-1', 'ap-southeast-2', 'ap-southeast-3', 'ap-southeast-4', 'ca-central-1', 'eu-central-1', 'eu-central-2', 'eu-north-1', 'eu-south-1', 'eu-south-2', 'eu-west-1', 'eu-west-2', 'eu-west-3', 'me-central-1', 'me-south-1', 'sa-east-1', 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2']
普段はこれで困っていなかったのですが、よく見ると中国のリージョンが入っていません。ちなみにsession
オブジェクトは中国リージョンにアクセスしているプロファイルで実行しています。
どういうことなんだ、ということでドキュメントを確認してみました。
な、なんと、get_available_regions
関数は引数でpartition_name
を取っているではありませんか。
get_available_regions(service_name, partition_name='aws', allow_non_regional=False)
指定しなかった場合のデフォルトはaws
ですので、一般的な商用リージョンということになります。
そんなわけで、商用リージョン以外で有効なリージョン一覧を取得するためには、適切に引数を指定してやる必要があります。
>>> session.get_available_regions(service_name="ec2", partition_name="aws-cn") ['cn-north-1', 'cn-northwest-1']
無事に中国リージョンの一覧が取得できました!
describe_regionsはそのままでも動く
ちなみにリージョン一覧の取得によく使用される別の方法として、describe_regions
があります。こちらも実行してみましたが、次のように問題なく取得できました(前述の通り中国リージョンにアクセスしているオブジェクトです)。こちらの方法で一覧を作成している場合はそのままでも大丈夫そうです。
>>> ec2 = session.client("ec2") >>> [r["RegionName"] for r in ec2.describe_regions()["Regions"]] ['cn-north-1', 'cn-northwest-1']
まとめ
普段から使い慣れた関数でしたが、実は引数があったんだねというお話でした。既存のコードを中国リージョンでも使えるようにするためには、いろいろと修正が必要そうです。