cliente boto3 NoRegionError: debe especificar un error de región solo algunas veces

3 minutos de lectura

avatar de usuario
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?

avatar de usuario
garnacha

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:

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

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.

    – garnacha

    1 de abril de 2017 a las 18:18

  • Para saber qué regiones brindan qué servicios: Tabla de regiones de Amazon Web Services aws.amazon.com/about-aws/global-infrastructure/…

    – Nick

    23 de mayo de 2017 a las 4:53


  • ¿Sabe por qué “exportar AWS_DEFAULT_REGION=us-west-2” o el archivo ~/.aws/config no funciona?

    – fatih tekin

    28 de noviembre de 2017 a las 20:44

  • Desearía que boto3 pudiera usar la región de la instancia ec2 que ejecuta el código.

    – Selçuk Cihan

    6 de febrero de 2020 a las 9:26

avatar de usuario
antonio g

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

En mi caso la sensibilidad importaba.

avatar de usuario
Abhishek Garg

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.

  • AWS_DEFAULT_REGION distingue entre mayúsculas y minúsculas.

    – Jaime M.

    9 de julio de 2019 a las 9:20

  • Debería ser: os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' (mayúsculas)

    – José

    4 de diciembre de 2019 a las 5:36


avatar de usuario
david edson

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.

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

print(session.available_profiles)

client = session.client(
    'ec2'
)

Donde mi ~/.aws/config archivo se ve así:

[default]
region=ap-southeast-2

[NotDefault]
region=ap-southeast-2

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)

avatar de usuario
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.

avatar de usuario
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?

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
Privacidad