boto3 client NoRegionError: Sie müssen nur manchmal einen Regionsfehler angeben

147

Ich habe einen boto3-Client:

boto3.client('kms')

Aber es passiert auf neuen Maschinen. Sie öffnen und schließen sich dynamisch.

    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()

Warum passiert dies? und warum nur ein Teil der Zeit?

WebQube
quelle
Da der Boto3-Client das AWS-Profil nicht anhand der Standardmethode für Anmeldeinformationen finden kann: docs.aws.amazon.com/sdk-for-java/v1/developer-guide/… .
Mootmoot

Antworten:

325

Auf die eine oder andere Weise müssen Sie boto3 mitteilen, in welcher Region der kmsClient erstellt werden soll. Dies könnte explizit unter Verwendung des region_nameParameters wie folgt erfolgen:

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

oder Sie können einen Standardbereich mit Ihrem Profil in Ihrer ~/.aws/configDatei verknüpfen, wie in:

[default]
region=us-west-2

oder Sie können eine Umgebungsvariable wie folgt verwenden:

export AWS_DEFAULT_REGION=us-west-2

Sie müssen boto3 jedoch mitteilen, welche Region verwendet werden soll.

garnaat
quelle
2
Woher weiß ich selbst, welche Region ich verwenden soll?
Jononomo
1
Wenn Sie versuchen, auf vorhandene Ressourcen zuzugreifen, wählen Sie die Region aus, in der diese Ressourcen vorhanden sind. Wenn Sie neue Ressourcen erstellen möchten, wählen die meisten Benutzer eine Region aus, die ihnen geografisch am nächsten liegt, um schnellere Antwortzeiten zu erzielen. Nicht alle Regionen unterstützen denselben Satz von Diensten. Wenn Sie also einen bestimmten Dienst benötigen, wählen Sie eine Region aus, die diesen unterstützt.
Garnaat
1
Um herauszufinden, welche Regionen welche Dienste anbieten: Amazon Web Services Region Table aws.amazon.com/about-aws/global-infrastructure/…
Nick
2
Wissen Sie, warum "AWS_DEFAULT_REGION = us-west-2 exportieren" oder ~ / .aws / config-Datei nicht funktioniert
fatih tekin
3
Ich wünschte, boto3 könnte nur die Region der ec2-Instanz verwenden, in der der Code ausgeführt wird.
Selçuk Cihan
12
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'

In meinem Fall war Sensibilität wichtig.

Anthony G.
quelle
4

Ich glaube, Boto wählt standardmäßig die Region aus, die in aws cli festgelegt ist. Sie können den Befehl #aws configure ausführen und zweimal die Eingabetaste drücken (er zeigt an, welche Creds Sie in aws cli mit region festgelegt haben), um Ihre Region zu bestätigen.

Josh Eversman
quelle
3

Sie können Umgebungsvariablen auch im Skript selbst festlegen, anstatt den Parameter region_name zu übergeben

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

Groß- und Kleinschreibung kann von Bedeutung sein.

Abhishek Garg
quelle
AWS_DEFAULT_REGIONunterscheidet zwischen Groß- und Kleinschreibung.
Jaime M.
Es sollte sein: os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' (Großbuchstaben)
Joe
2

Für Python 2 habe ich festgestellt, dass die boto3-Bibliothek die Region nicht aus dem Standard bezieht, ~/.aws/configwenn die Region in einem anderen Profil definiert ist. Sie müssen es also bei der Sitzungserstellung definieren.

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

print(session.available_profiles)

client = session.client(
    'ec2'
)

Wo meine ~/.aws/configDatei so aussieht:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

Ich mache das, weil ich unterschiedliche Profile für unterschiedliche Anmeldungen bei AWS, Personal und Work verwende.

David Edson
quelle
0

Für Benutzer der CloudFormation-Vorlage. Sie können AWS_DEFAULT_REGIONUmgebungsvariablen mit UserData und festlegen AWS::Region. Beispielsweise,

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
Marcin
quelle