Aprenda como configurar o armazenamento de arquivos S3 usando este guia passo a passo.

Se você estiver construindo um aplicativo da web Django, é essencial lidar com recursos estáticos e arquivos de mídia carregados pelo usuário com eficiência.

Em um ambiente de desenvolvimento, o Django gerencia esses arquivos. Na produção, no entanto, você desejará explorar outras opções. Sua base de usuários pode crescer significativamente e você pode estar lidando com arquivos muito maiores, como áudio e vídeo.

O bucket do Amazon Web Services (AWS) Simple Storage Service (S3) é uma alternativa para hospedar arquivos estáticos e de mídia. Ao integrar o S3 com o Django, você pode descarregar o fardo do gerenciamento de arquivos de seu servidor, reduzir a carga e garantir uma entrega de ativos mais rápida e confiável.

Etapa 1: criar uma conta da AWS

Se você não tiver uma conta da AWS, navegue até o local da AWSe crie uma nova conta.

Novas contas da AWS têm acesso gratuito a 5 GB de armazenamento padrão S3 todos os meses durante um ano.

Etapa 2: criar um bucket S3 para seu projeto

  1. Depois de criar sua conta da AWS, faça login e procure por S3 na barra de pesquisa na parte superior e selecione a primeira opção.
  2. Depois de selecionar a primeira opção, você verá uma nova página. Clique no Criar balde botão:
  3. Em seguida, forneça um nome para seu bucket S3. Você pode deixar a maior parte da configuração como padrão.
  4. Role para baixo até o Bloquear configurações de acesso público para este bucket seção, desmarque a Bloquear todo o acesso público configuração e confirme o aviso que aparece.
  5. Feito isso, clique no Criar balde botão. Ele o redirecionará para uma página que mostra uma lista dos buckets S3 que você criou.

Etapa 3: criar um usuário do IAM na AWS

A AWS fornece um serviço chamado IAM (gerenciamento de identidade e acesso). Isso permite que você crie uma conta separada para uma pessoa ou aplicativo específico que precisa interagir com os serviços da AWS.

Você pode atribuir diferentes níveis de permissões a usuários do IAM, representando indivíduos ou aplicativos que interagem com os serviços da AWS que você criou. Com os usuários do IAM, você pode garantir que cada usuário tenha acesso apenas aos recursos de que precisa e nada mais.

Para fins de segurança, você deve criar um usuário IAM para seu projeto Django interagir com seu bucket S3. Siga estas etapas para criar um usuário IAM na AWS:

  1. Na barra de pesquisa, digite EU SOU e selecione a primeira opção. Uma nova página aparecerá.
  2. No lado esquerdo da página IAM, selecione Usuários, em seguida, prossiga para clicar no Adicionar usuários botão. Ele abrirá outra página para preencher algumas informações.
  3. Comece inserindo um nome para o usuário do IAM e clicando no botão Próximo botão na parte inferior: Na próxima página, você deve selecionar os níveis de permissão para o usuário do IAM. Siga esses passos:
    1. Primeiro, selecione o Anexar políticas diretamente opção do Opções de permissões seção.
    2. Em seguida, defina uma política de permissão para seu usuário do IAM. Isso determinará o que o usuário do IAM pode ou não fazer. Como você deseja que seu aplicativo Django baixe e carregue arquivos, você deve conceder a ele acesso total ao bucket do S3.
    3. No Políticas de permissões seção, você deve procurar por S3FullAccess e selecione a opção. Feito isso, clique no Próximo botão.
  4. Em seguida, revise as políticas para o usuário do IAM e clique no botão Criar usuário botão para criar seu usuário IAM.

Etapa 4: criar uma chave de acesso para seu usuário do IAM

Na AWS, uma chave de acesso refere-se às credenciais que você pode usar para autenticar e acessar com segurança os recursos da AWS programaticamente. Seu projeto Django deve fornecer essas credenciais para acessar seu bucket S3.

As etapas a seguir ajudarão você a gerar uma chave de acesso para seu projeto.

  1. Depois de criar seu usuário do IAM, você receberá uma mensagem de alerta solicitando que visualize o usuário. Como alternativa, você pode visualizar o usuário clicando no botão Nome de usuário.
  2. A seguir, selecione o Credenciais de segurança guia, role para baixo para encontrar o Chaves de acesso seção e selecione Criar chave de acesso.
  3. Você precisará selecionar um caso de uso para seu acesso, para que a AWS possa recomendar uma opção alternativa quando apropriado. Não afeta sua chave de acesso. Sinta-se à vontade para selecionar uma opção como Serviço terceirizado ou código local e confirme o aviso que aparece. Feito isso, clique no Próximo botão.
  4. Na próxima página, insira uma tag de descrição para sua chave de acesso e clique no botão Criar chave de acesso botão.
  5. Depois de criar sua chave de acesso, você pode copiar suas credenciais ou baixá-las como um arquivo CSV. De qualquer forma, certifique-se de manter esses dados seguros e protegidos.

Etapa 5: configurar seu projeto Django para S3 Bucket

Para usar seu bucket S3 com um projeto Django, instale estes pacotes:

  • Django-storages: este pacote ajudará você a definir um back-end de armazenamento para seus arquivos.
  • boto3: Este pacote é o AWS Kit de Desenvolvimento de Software (SDK) para ajudar seu projeto Python a interagir com a AWS.

Você pode instalar esses pacotes em seu ambiente virtual Python com o gerenciador de pacotes Pip do Python digitando este comando em seu terminal:

pip install django-storages boto3

Depois de instalar esses pacotes com sucesso, abra seu settings.py arquivar e adicionar boto3 para os aplicativos instalados.

A última coisa a fazer é configurar seu projeto Django para usar o balde AWS S3. Aqui está a configuração geral a ser usada:

AWS_ACCESS_KEY_ID = 'AWS_ACCESS_KEY_ID '
AWS_SECRET_ACCESS_KEY = 'AWS_SECRET_ACCESS_KEY'
AWS_STORAGE_BUCKET_NAME = 'AWS_STORAGE_BUCKET_NAME'
AWS_S3_SIGNATURE_NAME = 's3v4',
AWS_S3_REGION_NAME = 'AWS_S3_REGION_NAME'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
AWS_S3_VERITY = True
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

Cole a configuração acima em seu settings.py arquivo e substitua os valores de acordo. Substitua o seu AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY com a chave de acesso e a chave de acesso secreta que você copiou ou baixou anteriormente. Você também deve alterar o AWS_STORAGE_BUCKET_NAME e AWS_S3_REGION_NAME aos nomes de seu bucket e região do S3.

Você pode obter o nome da região navegando até seu bucket S3 e copiando os últimos valores do região da AWS coluna.

Etapa 6: teste sua configuração da AWS

Com as etapas acima concluídas, você deve estar pronto para testar seu aplicativo fazendo upload de arquivos. Os exemplos de código a seguir farão upload de arquivos diretamente do painel de administração, mas você pode fazer upload dos seus de outro local.

Para contextualizar, você pode ter um modelo parecido com este:

classPost(models.Model):
title = models.CharField(max_length=225, blank=False, null=False)
content = models.TextField('Post Body', blank=False, null=False)
author = models.CharField(max_length=225, blank=False, null=False)
date_published = models.DateTimeField(auto_now=True)
image = models.ImageField(upload_to='posts')

def__str__(self):
return self.title

Certifique-se de executar as operações necessárias, como migrações, adicioná-lo ao painel de administração, criar uma visualização e outras coisas necessárias para o seu projeto. Certifique-se de praticar Princípio MVT do Django.

Quando terminar, navegue até o painel de administração ou qualquer formulário que você tenha criado para upload de arquivo e carregue um arquivo de imagem.

Navegue até seu site principal e confirme se a imagem está lá. Se estiver, clique com o botão direito do mouse na imagem e selecione a opção Abra a imagem em uma nova aba opção. Na nova guia que contém a imagem, você notará que a barra de endereços faz referência ao bucket S3 que você criou anteriormente:

Outra maneira de confirmar se sua configuração está funcionando é navegando até seu bucket no console AWS. Você encontrará sua imagem lá:

Etapa 7: coletar arquivos estáticos em seu bucket S3

Até agora, você conseguiu carregar arquivos de mídia em seu bucket do S3; agora, você precisa enviar seus arquivos estáticos.

Para fazer isso, adicione essas configurações ao seu settings.py arquivo:

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_LOCATION = 'static'

Depois disso, abra seu Interface de linha de comando (CLI) e execute este comando:

python manage.py collectstatic --noinput

Para confirmar que tudo funciona, abra seu bucket S3 no console AWS. Você verá uma pasta chamada estático.

Use o AWS S3 Bucket para muito mais

As possibilidades dos baldes AWS S3 são enormes! Você deve se familiarizar com ele e aprender a usar o S3 para outras finalidades, como hospedar um aplicativo da Web estático.

Saber como usar os baldes S3 corretamente economizará muito tempo e ajudará a criar um produto ou solução melhor. Mas você também deve estar ciente de que o S3 pode não ser adequado para todos os casos, portanto, considere os requisitos do seu projeto antes de usá-lo.