Como escolher um perfil AWS ao usar boto3 para se conectar ao CloudFront

127

Estou usando a biblioteca python Boto 3 e desejo me conectar ao AWS CloudFront. Preciso especificar o Perfil AWS correto (credenciais AWS), mas olhando a documentação oficial, não vejo como especificá-lo.

Estou inicializando o cliente usando o código: client = boto3.client('cloudfront')

No entanto, isso resulta em usar o perfil padrão para se conectar. Não consegui encontrar um método onde posso especificar qual perfil usar.

Nader A. Jabbar
fonte
Veja também: leia e baixe um arquivo do AWS S3 com perfis
Martin Thoma
você já tentou usar as chaves do código? (você também pode usar env var para ocultá-lo do código)client = boto3.client('s3', aws_access_key_id = '<access-key>', aws_secret_access_key = '<secret-key>')
Ivan Carrasco Quiroz

Respostas:

224

Acho que os documentos não são maravilhosos em expor como fazer isso. No entanto, já é um recurso compatível há algum tempo e há alguns detalhes nesta solicitação de pull .

Portanto, existem três maneiras diferentes de fazer isso:

Opção A) Criar uma nova sessão com o perfil

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

Opção B) Alterar o perfil da sessão padrão no código

    boto3.setup_default_session(profile_name='dev')

Opção C) Alterar o perfil da sessão padrão com uma variável de ambiente

    $ AWS_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')
Jordon Phillips
fonte
1
A variável env não deveria ser AWS_PROFILE?
Stefano M
Obrigado por isso! não parecia encontrar essa informação em nenhum lugar até agora. Parece que eu só precisei da etapa 2 para fazer isso funcionar. O que a etapa 1 fez? (já que a variável dev não é usada ou passada para qualquer outra coisa?)
Marcos
40
Essas são opções, não etapas. Na primeira opção, você cria uma nova sessão para usar em vez da sessão padrão. Portanto, para criar um cliente com essa sessão, você faria algo como, em dev.client('s3')vez deboto3.client('s3')
Jordon Phillips,
fora do tópico, ipythontambém foi útil para mim.
Mike D de
7
Obtenha a lista de perfis usando boto3.session.Session().available_profiles- é uma lista. Em seguida, use o que você deseja @ jordan-phillips.
Daisuke Aramaki de
35

Faça isso para usar um perfil com o nome 'dev':

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

Esta seção da documentação do boto3 é útil.

Aqui está o que funcionou para mim:

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

Basta adicionar o perfil à configuração da sessão antes da chamada do cliente. boto3.session.Session(profile_name='YOUR_PROFILE_NAME').client('cloudwatch')

MrKulli
fonte