boto3クライアントNoRegionError:領域エラーを指定する必要があるのはときどきのみ


147

私はboto3クライアントを持っています:

boto3.client('kms')

しかし、それは新しいマシンで起こり、動的に開閉します。

    if endpoint is None:
        if region_name is None:
            # Raise a more specific error message that will give
            # better guidance to the user what needs to happen.
            raise NoRegionError()

なぜこうなった?そして、なぜ時間の一部だけですか?


boto3クライアントは、デフォルトの認証情報メソッドのセット(docs.aws.amazon.com/sdk-for-java/v1/developer-guide/…)からAWSプロファイルを見つけることができないためです。
mootmoot 2016年

回答:


325

いずれにしても、kmsクライアントを作成するリージョンをboto3に指示する必要があります。これは、次のようにregion_nameパラメータを使用して明示的に行うことができます。

kms = boto3.client('kms', region_name='us-west-2')

または、次のように~/.aws/configファイル内のプロファイルに関連付けられたデフォルトのリージョンを持つことができます。

[default]
region=us-west-2

または、次のように環境変数を使用できます。

export AWS_DEFAULT_REGION=us-west-2

ただし、使用する領域をboto3に指示する必要があります。


2
使用するリージョンを自分で知るにはどうすればよいですか?
jononomo 2017年

1
既存のリソースにアクセスする場合は、それらのリソースが存在するリージョンを選択してください。新しいリソースを作成する場合、ほとんどの人は、応答時間を短縮するために、地理的に最も近い地域を選択します。すべてのリージョンが同じサービスのセットをサポートするわけではないため、特定のサービスが必要な場合は、それをサポートするリージョンを選択してください。
garnaat

1
Amazon Webサービス地域表は:どのサービス提供している地域を知るためにaws.amazon.com/about-aws/global-infrastructure/...
ニック・

2
「export AWS_DEFAULT_REGION = us-west-2」または〜/ .aws / configファイルが機能しない理由を知っていますか
fatih tekin

3
boto3がコードを実行しているec2インスタンスの領域を使用できることを願っています。
セルチュクチハン


4

デフォルトでは、botoはaws cliで設定されているリージョンを選択すると思います。コマンド#aws configureを実行してEnterキーを押すと(リージョンを使用してaws cliで設定した資格情報が表示されます)、2回リージョンを確認できます。


3

また、region_nameパラメータを渡すのではなく、スクリプト自体で環境変数を設定することもできます

os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

大文字と小文字の区別が重要な場合があります。


AWS_DEFAULT_REGION大文字と小文字が区別されます。
ハイメM.

それは:(os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' 大文字)
Joe

2

Python 2の~/.aws/config場合、領域がデフォルトとは異なるプロファイルで定義されている場合、boto3ライブラリはから領域を取得しないことがわかりました。したがって、セッションの作成時にそれを定義する必要があります。

session = boto3.Session(
    profile_name='NotDefault',
    region_name='ap-southeast-2'
)

print(session.available_profiles)

client = session.client(
    'ec2'
)

私の~/.aws/configファイルは次のようになります:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

これは、AWS、Personal、Workへのログインごとに異なるプロファイルを使用するためです。


0

CloudFormationテンプレートを使用するユーザー向け。AWS_DEFAULT_REGIONUserDataおよびを使用して環境変数を設定できますAWS::Region。例えば、

MyInstance1:
    Type: AWS::EC2::Instance                
    Properties:                           
        ImageId: ami-04b9e92b5572fa0d1 #ubuntu
        InstanceType: t2.micro
        UserData: 
            Fn::Base64: !Sub |
                    #!/bin/bash -x

                    echo "export AWS_DEFAULT_REGION=${AWS::Region}" >> /etc/profile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.