Como usar um balde AWS S3 para hospedar arquivos estáticos e de mídia no Django
O gerenciamento eficiente de ativos estáticos e conteúdo gerado pelo usuário é crucial ao desenvolver um aplicativo da Web Django, pois esses elementos desempenham um papel integral na garantia de desempenho ideal e experiência de usuário perfeita.
Em uma configuração de desenvolvimento, o Django é responsável por lidar com esses arquivos. No entanto, em um contexto de produção, caberia a você considerar soluções alternativas à medida que sua base de usuários se expande substancialmente e os ativos de mídia tornam-se cada vez mais consideráveis em tamanho, incluindo conteúdo de áudio e visual.
A utilização do Amazon Web Services Simple Storage Solution (S3) fornece uma opção alternativa para armazenar conteúdo estático e multimídia. Por meio da integração com o Django, essa abordagem alivia a sobrecarga nos servidores, delegando responsabilidades de manipulação de arquivos ao S3, minimizando assim a carga e garantindo uma distribuição de ativos rápida e confiável.
Etapa 1: criar uma conta da AWS
Para estabelecer uma conta Amazon Web Services (AWS), caso ainda não possua uma, visite o site oficial da AWS e siga as instruções para criar uma nova conta.
As contas recém-estabelecidas da Amazon Web Services (AWS) têm direito a receber acesso gratuito a 5 gigabytes de armazenamento padrão anualmente, como parte de seu pacote de serviços.
Etapa 2: criar um bucket S3 para seu projeto
⭐ Depois de criar sua conta AWS, faça login e procure por S3 na barra de pesquisa na parte superior e selecione a primeira opção.
⭐ Após selecionar a primeira opção, você verá uma nova página. Clique no botão Criar balde:
⭐ Em seguida, forneça um nome para seu bucket S3. Você pode deixar a maior parte da configuração como padrão.
⭐ Role para baixo até a seção Bloquear configurações de acesso público para este bloco, desmarque a configuração Bloquear todo o acesso público e confirme o aviso exibido.
⭐ Feito isso, clique no botão Criar balde. Ele o redirecionará para uma página que mostra uma lista dos buckets S3 que você criou.
Etapa 3: criar um usuário IAM na AWS
A AWS oferece uma solução conhecida como Identity and Access Management (IAM), que permite a criação de contas individuais personalizadas para atender aos requisitos de pessoas ou aplicativos que buscam interação com os serviços da AWS.
A AWS fornece um nível granular de controle sobre o acesso do usuário por meio de seu serviço Identity and Access Management (IAM). Ao atribuir vários níveis de permissão a usuários do IAM, que podem ser pessoas individuais ou aplicativos interagindo com seus recursos da AWS, você pode restringir o acesso deles a recursos específicos e, ao mesmo tempo, garantir que eles não obtenham acesso não autorizado a outras áreas.
Para garantir a segurança de nosso aplicativo, é essencial estabelecer um método seguro de interação entre nosso projeto Django e nosso bucket Amazon S3. Para atingir esse objetivo, precisaremos implementar um usuário de gerenciamento de identidade e acesso (IAM) dentro da plataforma Amazon Web Services (AWS). Siga as instruções detalhadas abaixo para criar com êxito um usuário IAM na AWS:
⭐ Na barra de pesquisa, digite IAM e selecione a primeira opção. Uma nova página aparecerá.
⭐ No lado esquerdo da página do IAM, selecione Usuários e clique no botão Adicionar usuários. Ele abrirá outra página para preencher algumas informações.
⭐ Comece inserindo um nome para o usuário IAM e clicando no botão Avançar na parte inferior: Na próxima página, você deve selecionar os níveis de permissão para o usuário IAM. Siga esses passos:
Comece escolhendo a opção “Anexar políticas diretamente” na seção “Permissões”.
Para estabelecer uma estrutura de permissões para nosso usuário do IAM, devemos especificar o escopo das ações que o usuário está autorizado a executar dentro das restrições especificadas. Dado que nosso aplicativo requer a capacidade de recuperar e depositar o conteúdo do arquivo em um bucket do Amazon S3, seria prudente conceder ao usuário do IAM acesso irrestrito ao referido repositório.
⭐ Na seção Políticas de permissões, você deve procurar por S3FullAccess e selecionar a opção. Feito isso, clique no botão Avançar.
⭐ Em seguida, revise as políticas para o usuário IAM e clique no botão Criar usuário para criar seu usuário IAM.
Etapa 4: criar uma chave de acesso para seu usuário do IAM
Na Amazon Web Services (AWS), uma chave de acesso constitui um conjunto de credenciais de autenticação que permitem o acesso programático aos recursos da AWS de maneira segura. Para obter acesso ao seu bucket do Amazon Simple Storage Service (S3) dentro do seu aplicativo Django, é imperativo que as credenciais de acesso necessárias sejam fornecidas pelo seu projeto.
Seguir uma série de instruções processuais pode facilitar a produção de uma senha de autorização específica para seu empreendimento em andamento.
⭐ Depois de criar seu usuário IAM, você receberá uma mensagem de alerta solicitando que visualize o usuário. Como alternativa, você pode visualizar o usuário clicando no nome do usuário.
⭐ Em seguida, selecione a guia Credenciais de segurança, role para baixo para encontrar a seção Chaves de acesso e selecione Criar chave de acesso.
⭐ 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 de terceiros ou Código local e confirme o aviso que aparece. Feito isso, clique no botão Avançar.
⭐ 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.
⭐ 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 integrar um bucket Amazon S3 com um projeto Django, é necessário instalar pacotes específicos que facilitem essa integração. Esses pacotes são os seguintes:
O Django Storages é um complemento que permite a criação de back-ends de armazenamento de arquivos personalizados dentro da estrutura de desenvolvimento da Web do Django. Ele permite que os desenvolvedores configurem e implementem suas soluções de armazenamento preferidas, fornecendo flexibilidade no gerenciamento de ativos digitais e simplificando os processos de gerenciamento de dados.
O Boto3, um kit de desenvolvimento de software (SDK), serve como uma ferramenta essencial para facilitar a interação perfeita entre projetos baseados em Python e Amazon Web Services (AWS).
Para instalar os pacotes acima mencionados em seu ambiente virtual Python, utilize o gerenciador de pacotes pip executando o seguinte comando em seu terminal:
pip install django-storages boto3
Depois de instalar efetivamente esses pacotes, é imperativo que você acesse seu arquivo settings.py
e acrescente boto3
à lista de aplicativos integrados no referido arquivo de configuração.
Para utilizar um bucket Amazon Web Services (AWS) Simple Storage Service (S3) dentro de um projeto Django, é necessário realizar configurações específicas. Abaixo estão as etapas necessárias para este processo:
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'
Incorpore a configuração fornecida em seu arquivo settings.py
, garantindo que cada campo designado seja atualizado apropriadamente. Especificamente, substitua as chaves relevantes, como seu AWS Access Key ID, Secret Access Key, S3 Bucket Name e S3 Region Name, por suas respectivas contrapartes obtidas ou recuperadas anteriormente.
Para obter a designação regional de um bucket do Amazon S3, pode-se navegar até o respectivo contêiner de armazenamento e examinar as entradas finais na coluna “Região da AWS” para obter essas informações.
Etapa 6: teste sua configuração da AWS
Depois que todas as etapas mencionadas forem executadas, você estará preparado para avaliar a funcionalidade do seu aplicativo por meio do teste de arquivo. Os exemplos de código subsequentes demonstram uploads de arquivos que podem ser executados por meio da interface administrativa; no entanto, sinta-se à vontade para realizar seus próprios uploads de um local alternativo.
A fim de fornecer o contexto apropriado, um exemplo possível de tal modelo poderia ser o seguinte:
class Post(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 que todas as tarefas necessárias sejam executadas, incluindo migração de dados, incorporação do recurso à interface administrativa, elaboração de um método de exibição apropriado e conclusão de quaisquer etapas adicionais essenciais para a execução bem-sucedida de seu projeto. Além disso, certifique-se de aderir ao paradigma Model-View-Template (MVT) do Django ao desenvolver seu aplicativo.
Após a conclusão de sua tarefa, acesse seu painel administrativo ou utilize a interface específica que você estabeleceu para envio de mídia. Posteriormente, carregue um arquivo gráfico na área designada.
Visite seu site principal e verifique se a imagem especificada aparece conforme o esperado. Se presente, clique na referida imagem usando o cursor do mouse enquanto pressiona a tecla “Ctrl” (ou a tecla “Command” para Mac) em seu teclado. Em seguida, selecione a opção “Abrir imagem em uma nova guia” no menu de contexto exibido. Ao abrir a imagem em uma janela ou guia separada do navegador, observe a URL exibida na parte superior do navegador. Ele deve corresponder ao local do bucket do Amazon S3 que foi estabelecido anteriormente.
Um método alternativo para verificar se sua configuração está funcionando corretamente envolve acessar o Console do Amazon Web Services (AWS) e visualizar seu contêiner de armazenamento designado, dentro do qual você deve descobrir seu arquivo de mídia visual.
Etapa 7: coletar arquivos estáticos em seu bucket S3
Até o momento, você carregou com sucesso os arquivos de mídia em seu bucket do Amazon S3; no entanto, para atender aos requisitos do seu projeto, é necessário que você também carregue seus arquivos estáticos.
Para implementar essa funcionalidade, é necessário fazer algumas modificações no arquivo ‘settings.py’ adicionando configurações específicas. Essas configurações permitirão o resultado desejado e garantirão o desempenho ideal do sistema.
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_LOCATION = 'static'
Depois de acessar a interface de linha de comando (CLI), execute o seguinte comando:
python manage.py collectstatic --noinput
Para garantir a funcionalidade adequada do seu bucket do Amazon Simple Storage Service (S3), navegue até o Console de gerenciamento da AWS e acesse seu bucket do S3. Dentro da listagem do bucket, você deve observar um diretório chamado “static”.
Use o balde AWS S3 para muito mais
O Simple Storage Service (S3) da Amazon Web Services apresenta vastas potencialidades que merecem sua compreensão e domínio na utilização de seus recursos além de sua função convencional de armazenamento de objetos. Por exemplo, você pode empregar o S3 como uma plataforma ideal para hospedar sites estáticos, capitalizando assim sua escalabilidade e confiabilidade.
A utilização eficiente dos recursos do Amazon Simple Storage Service (S3) Buckets pode gerar benefícios substanciais em termos de eficiência e desenvolvimento de produtos. No entanto, é imperativo entender que o S3 nem sempre pode estar alinhado com as demandas específicas do projeto, portanto, é crucial avaliar os requisitos do empreendimento antes da implementação.