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.

Nader A. Jabbar
fuente
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')
Jordon Phillips
fuente
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)
asmaier
fuente
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')
mgig
fuente
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')

MrKulli
fuente