2
respostas

Não entendi como ele faz para ter acesso ao S3.

Ele simplesmente rodou o código:

import boto3

s3 = boto3.resource('s3')

def lista_imagens():
    imagens = []
    bucket = s3.Bucket('fa-imagens')
    for imagem in bucket.objects.all():
        imagens.append(imagem.key)
    print(imagens)
    return imagens

imagens = lista_imagens()

Quando na verdade não colocou nenhum usuário/role nele, fiz a mesma coisa mudando apenas meu bucket e ele não acerta o bucket, "Unable to locate credentials".

2 respostas

Também tenho a mesma dúvida.

No início do primeiro vídeo dessa aula, ele explica a necessidade de criar um usuário admin, mas não menciona onde e quando usar as credenciais.

Ajuda a gente, professor?

Olá Matheus e Ana, tudo bem com vocês? Peço desculpas pela demora em ti responder! Isso acontece por que é necessário ter o Python instalado na máquina e também ter as credenciais no arquivo ~/.aws/config isso dentro do diretório do seu usuário, o arquivo deve está da seguinte forma:

[default]
region = us-east-1
output = json
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ou então vocês podem criar variáveis de ambientes e indicar dentro do arquivo, eu particularmente usei essa abordagem, porque estava usando o Python com um container Docker já que não queria instalar diretamente na minha máquina, então deixei meu arquivo da seguinte forma: Primeiro defini pelo docker-compose as variáveis de ambientes:

version: '3'

services:
  web:
    image: jonilsonds9/python-teste:v2
    ports:
      - "7000:7000"
    volumes:
      - .:/usr/src/app
    environment:
    - AWS_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXX
    - AWS_SECRET_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    - AWS_REGION=us-east-1

E então usei as variaveis fazendo o uso da instrução import os, e depois setando as mesmas diretamente na linha s3 = boto3.resource('s3'), como você podem ver abaixo:

import os
import boto3

s3 = boto3.resource('s3',region_name=os.environ['AWS_REGION'],aws_access_key_id=os.environ['AWS_ACCESS_KEY'],aws_secret_access_key=os.environ['AWS_SECRET_KEY'])

def lista_imagens():
    imagens=[]
    bucket = s3.Bucket('fa-imagens-js')
    for imagem in bucket.objects.all():
        imagens.append(imagem.key)
    print(imagens)
    return imagens

imagens = lista_imagens()

Isso deve resolver os problemas que estão enfrentando, espero ter ajudado!