Ir para o conteúdo

Amazon AWS - S3

Nada pode ser mais simples de interagir com o Amazon Simple Storage Service (S3) do que o plugin Botcity para AWS S3.

Interaja com seus buckets, arquivos, pastas e muito mais usando esta API simples e com curadoria.

Instalação

pip install botcity-aws-s3-plugin

Importando o plugin

Depois de instalar este pacote, a próxima etapa é importar o pacote para o seu código e começar a usar as funções.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

configuração de conexão

Cuidado

O S3 funciona apenas com caminhos POSIX-style usam "/" (barras para frente). Caminhos relativos não são permitidos, se você for fazer alterações, coloque o caminho absoluto do arquivo ou pasta.

Observação

Existem duas maneiras diferentes de autenticar.

** 1.Criando a pasta .aws no diretório inicial, você precisa criar dois arquivos. **

# ~/.aws/config
[default]
region=<region_code>
# ~/.aws/credentials
[default]
aws_access_key_id=<your_aws_access_key_id>
aws_secret_access_key=<your_aws_secret_access_key>

** 2.Passando credenciais para o construtor de classe. **

# Usando a pasta `.aws '
s3 = BotAWSS3Plugin()

# Alternativa usando as credenciais como argumentos construtores
s3 = BotAWSS3Plugin(
    use_credentials_file=False,
    access_key_id='<seu_id_chave_acesso_aws>',
    secret_access_key='<sua_chave_acesso_secreta_aws>',
    region_name='<cod_regiao>'
)

Operações com bucket

Listando buckets

from botcity.plugins.aws.s3 import BotAWSS3Plugin, Filter

s3 = BotAWSS3Plugin()
print(s3.list_buckets())

print(s3.filter_buckets(text='test-', filter_=Filter.STARTS_WITH))

Criando buckets

Atenção

A Amazon S3 suporta buckets globais, o que significa que cada nome de bucket deve ser único em todas as contas da AWS em todas as regiões da AWS em uma partição.

Dica

Todos os métodos usando o parâmetro bucket_name são opcionais e podem ser definidos assim.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.bucket_name = '<seu_nome_bucket>'
from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.create_bucket(bucket_name='<nome_do_seu_bucket>')

# Or
# s3.bucket_name = '<nome_do_seu_bucket>'
# s3.create_bucket()

Excluindo o buckets

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.delete_bucket(bucket_name='<nome_do_seu_bucket>')

Operações de arquivo

Carregando Arquivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.upload_file(
    bucket_name='<nome_do_seu_bucket>',
    file_path='/<caminho_para_arquivo>/exemplo.txt',
    bucket_filename='exemplo.txt'
)

Baixando Arquivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
caminho_arquivo = s3.download_file(
    bucket_name='<nome_do_seu_bucket>',
    filename='exemplo.txt',
    path_to_save='/<caminho_para_salvar>/'
)
print(caminho_arquivo)  # Retornos: /<caminho_para_salvar>/exemplo.txt

Copiando arquivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# Copiando o arquivo para outro balde
s3.copy_file(
    bucket_name='<nome_do_seu_bucket>',
    filename='exemplo.txt',
    target_bucket_name='outro_bucket',
    target_filename='copia_do_arquivo_em_outro_bucket.txt'
)

# Copiando o arquivo para outro lugar no mesmo balde
s3.copy_file(
    bucket_name='<nome_do_seu_bucket>',
    filename='exemplo.txt',
    # Target_bucket_name = 'outro_bucket', ignore este argumento
    target_filename='copia_do_arquivo_no_mesmo_bucket.txt'
)

Listando arquivos

from botcity.plugins.aws.s3 import BotAWSS3Plugin, Filter

s3 = BotAWSS3Plugin()
print(s3.list_files(bucket_name='<nome_do_seu_bucket>'))

print(s3.filter_files(bucket_name='<nome_do_seu_bucket>', text='.txt', filter_=Filter.ENDS_WITH))

Excluindo o arquivo

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.delete_file(bucket_name='<nome_do_seu_bucket>', filename='exemplo.txt')

Arquivo de movimentação

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# moving the file to another bucket
s3.move_file(
    bucket_name='<nome_do_seu_bucket>',
    filename='/teste/arquivo-atual.txt',
    target_bucket_name='outro_bucket',
    target_filename='/teste/arquivo-atual.txt'
)

# copying the file to another place in the same bucket
s3.move_file(
    bucket_name='<nome_do_seu_bucket>',
    filename='/teste/arquivo-atual.txt',
    # target_bucket_name='outro_bucket', ignore este argumento
    target_filename='/outra_pasta/arquivo-atual.txt'
)

Operações com pasta

Pasta de upload

Atenção

Por enquanto, pastas vazias são ignoradas.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.upload_folder(
    bucket_name='<nome_do_seu_bucket>',
    bucket_folder='/docs',
    folder_path='/seu_caminho_para/docs'
)

Pasta de download

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.download_folder(
    bucket_name='<nome_do_seu_bucket>',
    bucket_folder='/docs',
    path_to_save='/caminho_para_downloads/docs'
)

Pasta de cópia

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# copiando a pasta para outro balde
s3.copy_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_name='/docs',
    target_bucket_name='outro_bucket',
    target_folder_name='/docs'
)

# copiando a pasta para outro lugar no mesmo balde
s3.copy_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_name='/arquivos/docs',
    # target_bucket_name='another_bucket', ignore this argument
    target_folder_name='/'  # Copiará a pasta para o caminho da raiz do bucket ./arquivos /docs -> /docs
)

Excluindo a pasta

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
s3.delete_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_name='/docs'
)

Pasta de movimentação

Dica

A função para mover pastas pode ser usada para renomear uma pasta.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# moving the folder to another bucket
s3.move_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_path='/docs/testes',
    target_bucket_name='outro_bucket',
    target_folder_name='/'  # move /docs/testes para / em outro balde
)

# movendo a pasta para outro lugar no mesmo balde
s3.move_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_path='/docs',
    # target_bucket_name='another_bucket', ignore este argumento
    target_folder_name='/copia-docs/'  # movPasta e para dentro /cópia-docs /
)

# renaming folder
s3.move_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_path='/docs',
    target_folder_name='/docs-v2'  # renomear pasta
)

Renomeando a pasta

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()

# Movendo a pasta para outro balde
s3.rename_folder(
    bucket_name='<nome_do_seu_bucket>',
    folder_path='/docs/tests',
    target_folder_name='testes-novo-nome'  # Renomear /docs/testes para /docs/tests-new-name
)

Outras operações

Para usar outros métodos AWS S3, use a propriedade S3 client da classe BotAWSS3Plugin.

from botcity.plugins.aws.s3 import BotAWSS3Plugin

s3 = BotAWSS3Plugin()
resultado = s3.s3_client.get_bucket_acl(Bucket='<nome_do_seu_bucket>')
print(resultado)

Filter Enum

As operações de filtro (filter buckets, filter files) recebem um Enum Filter com os possíveis valores:

  • Filter.EQUALS
  • Filter.STARTS_WITH
  • Filter.ENDS_WITH
  • Filter.CONTAINS