Tengo un cliente de boto3:
boto3.client('kms')Pero sucede en máquinas nuevas, se abren y cierran dinámicamente.
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()¿Por qué está pasando esto? y ¿por qué sólo una parte del tiempo?
Alternativamente, puede ejecutar lo siguiente (aws cli)
aws configure --profile $PROFILE_NAMEte pedirá la región.
observe en ~/.aws/config que es:
[default] region = ap-southeast-1 output = json [profile prod] region = ap-southeast-1 output = json[ nombre del perfil del perfil ] entre corchetes
Si está usando lambdas, entonces probablemente querrá usar la región en la que está implementada la lambda. Puede usar lo siguiente
import boto3 import json import os def lambda_handler(event, context): region = os.environ['AWS_REGION'] print('Lambda region: ', region) kms = boto3.client('kms', region_name=region)también puede establecer variables de entorno en el propio script, en lugar de pasar el parámetro region_name
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'
la distinción entre mayúsculas y minúsculas puede ser importante.
os.environ['AWS_DEFAULT_REGION'] = 'your_region_name'En mi caso la sensibilidad importaba.
Para Python 2, descubrí que la biblioteca boto3 no obtiene la región de ~/.aws/config si la región está definida en un perfil diferente al predeterminado. Así que tienes que definirlo en la creación de la sesión.
session = boto3.Session( profile_name='NotDefault', region_name='ap-southeast-2' ) print(session.available_profiles) client = session.client( 'ec2' ) Donde mi archivo ~/.aws/config se ve así:
[default] region=ap-southeast-2 [NotDefault] region=ap-southeast-2Hago esto porque uso diferentes perfiles para diferentes inicios de sesión en AWS, Personal y Work.
Para aquellos que usan la plantilla de CloudFormation. Puede configurar la variable de entorno AWS_DEFAULT_REGION utilizando UserData y AWS::Region . Por ejemplo,
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/profileCreo que, de forma predeterminada, boto elige la región que está configurada en aws cli. Puede ejecutar el comando #aws configure y presionar enter (muestra qué credenciales ha establecido en aws cli con la región) dos veces para confirmar su región.
De una forma u otra debes indicarle a boto3 en qué región quieres que se cree el cliente kms . Esto podría hacerse explícitamente usando el parámetro region_name como en:
kms = boto3.client('kms', region_name='us-west-2') o puede tener una región predeterminada asociada con su perfil en su archivo ~/.aws/config como en:
[default] region=us-west-2o puede usar una variable de entorno como en:
export AWS_DEFAULT_REGION=us-west-2pero necesita decirle a boto3 qué región usar.