Cómo elegir un perfil de AWS al usar boto3 para conectarse a CloudFront


127

Estoy usando la biblioteca de Python de Boto 3 y quiero conectarme a AWS CloudFront. Necesito especificar el perfil de AWS correcto (credenciales de AWS), pero al mirar la documentación oficial, no veo forma de especificarlo.

Estoy inicializando al cliente usando el código: client = boto3.client('cloudfront')

Sin embargo, esto hace que use el perfil predeterminado para conectarse. No pude encontrar un método donde pueda especificar qué perfil usar.


Ver también: leer y descargar un archivo de AWS S3 con perfiles
Martin Thoma

¿Ha intentado usar las claves en el código? (también puede usar env var para ocultarlo del código)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Respuestas:


224

Creo que los documentos no son maravillosos para exponer cómo hacer esto. Sin embargo, ha sido una función admitida durante algún tiempo, y hay algunos detalles en esta solicitud de extracción .

Entonces, hay tres formas diferentes de hacer esto:

Opción A) Crear una nueva sesión con el perfil

    dev = boto3.session.Session(profile_name='dev')

Opción B) Cambiar el perfil de la sesión predeterminada en el código

    boto3.setup_default_session(profile_name='dev')

Opción C) Cambiar el perfil de la sesión predeterminada con una variable de entorno

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')

1
¿No debería la variable env ser AWS_PROFILE?
Stefano M

¡Gracias por eso! no pareció encontrar esa información en ningún lado hasta ahora. Sin embargo, parece que solo necesitaba el paso 2 para que esto funcione. ¿Qué hizo el paso 1? (¿Dado que la variable dev no se usa ni se pasa a ninguna otra cosa?)
Mark

40
Esas son opciones, no pasos. En la primera opción, crea una nueva sesión para usar en lugar de la sesión predeterminada. Entonces, para crear un cliente con esa sesión, haría algo como en dev.client('s3')lugar deboto3.client('s3')
Jordon Phillips

fuera de tema, ipythontambién fue útil para mí.
Mike D

7
Obtenga la lista de perfiles usando boto3.session.Session().available_profiles- es una lista. Luego usa el que quieras @ jordan-phillips.
Daisuke Aramaki

35

Haga esto para usar un perfil con el nombre 'dev':

session = boto3.session.Session(profile_name='dev')
s3 = session.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

24

Esta sección de la documentación de boto3 es útil.

Esto es lo que funcionó para mí:

session = boto3.Session(profile_name='dev')
client = session.client('cloudfront')

5

Simplemente agregue el perfil a la configuración de la sesión antes de la llamada del cliente. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.