cliente boto3 NoRegionError: debe especificar un error de región solo algunas veces
⏰ 3 minutos de lectura
WebQube
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?
De una forma u otra debes indicarle a boto3 en qué región deseas el kms cliente a crear. Esto podría hacerse explícitamente usando el region_name parámetro como en:
o puede tener una región predeterminada asociada con su perfil en su ~/.aws/config archivo como en:
[default]
region=us-west-2
o puede usar una variable de entorno como en:
export AWS_DEFAULT_REGION=us-west-2
pero necesita decirle a boto3 qué región usar.
¿Cómo puedo saber qué región usar?
– tadasajon
31 de marzo de 2017 a las 17:05
Si está tratando de acceder a los recursos existentes, elija la región en la que existen esos recursos. Si va a crear nuevos recursos, la mayoría de las personas eligen una región geográficamente más cercana para obtener tiempos de respuesta más rápidos. No todas las regiones admiten el mismo conjunto de servicios, por lo que si necesita un servicio en particular, asegúrese de elegir una región que lo admita.
Para Python 2, descubrí que la biblioteca boto3 no obtiene la región del ~/.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.
Hago esto porque uso diferentes perfiles para diferentes inicios de sesión en AWS, Personal y Work.
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)
jose eversman
Creo 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.
altímetro
Alternativamente, puede ejecutar lo siguiente (aws cli)
aws configure --profile $PROFILE_NAME
te pedirá la región.
aviso en ~/.aws/config su:
[default]
region = ap-southeast-1
output = json
[profile prod]
region = ap-southeast-1
output = json
[profile profile name] en los corchetes
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Porque el cliente boto3 no puede encontrar el perfil de AWS del conjunto de métodos de credenciales predeterminados: docs.aws.amazon.com/sdk-for-java/v1/developer-guide/….
– debate discutible
2 de noviembre de 2016 a las 11:26