dynamodb aws boto boto3

aws - botocore



Error de Boto3: botocore.exceptions.NoCredentialsError: no se pueden encontrar las credenciales (10)

Asegúrese de que su archivo ~ / .aws / credentials en Unix tenga este aspecto:

[MyProfile1] aws_access_key_id = yourAccessId aws_secret_access_key = yourSecretKey [MyProfile2] aws_access_key_id = yourAccessId aws_secret_access_key = yourSecretKey

Su script Python debería verse así, y funcionará:

from __future__ import print_function import boto3 import os os.environ[''AWS_PROFILE''] = "MyProfile1" os.environ[''AWS_DEFAULT_REGION''] = "us-east-1" ec2 = boto3.client(''ec2'') # Retrieves all regions/endpoints that work with EC2 response = ec2.describe_regions() print(''Regions:'', response[''Regions''])

Fuente: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .

Cuando simplemente ejecuto el siguiente código, siempre recibo este error.

s3 = boto3.resource(''s3'') bucket_name = "python-sdk-sample-%s" % uuid.uuid4() print("Creating new bucket with name:", bucket_name) s3.create_bucket(Bucket=bucket_name)

He guardado mi archivo de credenciales en

C:/Users/myname/.aws/credentials , desde donde Boto debería leer mis credenciales.

¿Mi configuración es incorrecta?

Aquí está la salida de boto3.set_stream_logger(''botocore'', level=''DEBUG'') .

2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set. 2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env 2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file 2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file 2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file 2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config 2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role


El boto3 está buscando las credenciales en la carpeta como

C:/ProgramData/Anaconda3/envs/tensorflow/Lib/site-packages/botocore/.aws

Debe guardar dos archivos en esta carpeta credentials y config .

Es posible que desee consultar el orden general en el que boto3 busca credenciales en este enlace . Mire debajo del subtítulo Configuración de credenciales .


Estas instrucciones son para máquinas Windows con un único perfil de usuario para AWS. Asegúrese de que su archivo ~/.aws/credentials vea así

[profile_name] aws_access_key_id = yourAccessId aws_secret_access_key = yourSecretKey

Tuve que establecer la variable de entorno AWS_DEFAULT_PROFILE que se encuentra en sus credenciales.
Entonces mi python pudo conectarse. por ejemplo desde here

import boto3 # Let''s use Amazon S3 s3 = boto3.resource(''s3'') # Print out bucket names for bucket in s3.buckets.all(): print(bucket.name)


Si está buscando una forma alternativa, intente agregar sus credenciales con AmazonCLI

desde el tipo de terminal: -

aws configure

luego complete sus claves y región.


Si está seguro de configurar sus aws correctamente, solo asegúrese de que el usuario del proyecto pueda leer ./aws o simplemente ejecutar su proyecto como root


Si tiene múltiples perfiles aws en ~/.aws/credentials como ...

[Profile 1] aws_access_key_id = ******************* aws_secret_access_key = ****************************************** [Profile 2] aws_access_key_id = ******************* aws_secret_access_key = ******************************************

Sigue dos pasos:

  1. Haga uno que quiera usar como predeterminado usando export AWS_DEFAULT_PROFILE=Profile 1 en el terminal.

  2. Asegúrese de ejecutar el comando anterior en la misma terminal desde donde usa boto3 o abra un editor. [Comprenda el siguiente escenario]

Guión:

  • Si tiene dos terminales abiertas llamadas t1 y t2 .
  • Y ejecuta el comando de exportación en t1 y abre JupyterLab o cualquier otro desde t2 , obtendrá NoCredentialsError: no se puede encontrar el error de credenciales .

Solución:

  • Ejecute el comando de exportación en t1 y luego abra JupyterLab o cualquier otro desde el mismo terminal t1 .

También tuve el mismo problema, se puede resolver creando un archivo de configuración y credenciales en el directorio de inicio. A continuación se muestran los pasos que hice para resolver este problema.

Crea un archivo de configuración:

C:/ProgramData/Anaconda3/envs/tensorflow/Lib/site-packages/botocore/.aws

Y en ese archivo ingresé a la región

[Profile 1] aws_access_key_id = ******************* aws_secret_access_key = ****************************************** [Profile 2] aws_access_key_id = ******************* aws_secret_access_key = ******************************************

Luego cree el archivo de credencial:

touch ~/.aws/credentials

Luego ingrese sus credenciales

[Profile1] aws_access_key_id = XXXXXXXXXXXXXXXXXXXX aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Después de configurar todo esto, luego mi archivo python para conectar el cubo. Ejecutar este archivo enumerará todos los contenidos.

import boto3 import os os.environ[''AWS_PROFILE''] = "Profile1" os.environ[''AWS_DEFAULT_REGION''] = "us-west-2" s3 = boto3.client(''s3'', region_name=''us-west-2'') print("[INFO:] Connecting to cloud") # Retrieves all regions/endpoints that work with S3 response = s3.list_buckets() print(''Regions:'', response)

También puede consultar los siguientes enlaces:


Trabajo para una gran corporación y encontré este mismo error, pero necesitaba una solución diferente. Mi problema estaba relacionado con la configuración del proxy. Tenía mi proxy configurado, así que necesitaba configurar mi no_proxy para incluir en la lista blanca AWS antes de que pudiera hacer que todo funcionara. También puede configurarlo en su script bash si no desea enturbiar su código Python con la configuración del sistema operativo.

Pitón:

import os os.environ["NO_PROXY"] = "s3.amazonaws.com"

Golpetazo:

no_proxy = "s3.amazonaws.com"


Tuve el mismo problema y descubrí que el formato de mi archivo ~/.aws/credentials era incorrecto.

Funcionó con un archivo que contiene:

[default] aws_access_key_id=XXXXXXXXXXXXXX aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

Tenga en cuenta que el nombre del perfil debe ser " [default] ". Algunos documentos oficiales hacen referencia a un perfil llamado " [credentials] ", que no funcionó para mí.


intente especificar claves manualmente

s3 = boto3.resource(''s3'', aws_access_key_id=ACCESS_ID, aws_secret_access_key= ACCESS_KEY)

Asegúrese de no incluir su ACCESS_ID y ACCESS_KEY en el código directamente por cuestiones de seguridad. Considere usar configuraciones de entorno e inyectarlas en el código como lo sugiere @Tiger_Mike.

Para entornos Prod, considere usar teclas de acceso giratorias: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey