em Sem categoria

Integrando uploads do WordPress com AWS S3

Utilizo estrutura da AWS para os projetos da empresa e recentemente fiz algumas otimizações em nossa infraestrutura, para projetos web utilizamos normalmente EC2 + RDS e eventualmente integrações com S3 e SES.

Para otimizar os custos com alguns projetos uma das saídas foi reduzir o storage do EC2 e passar o que era possível para o S3 – a biblioteca de mídias do WordPress é um exemplo que traz outras vantagens além da redução de custo:

  • Facilidade para migração futura
  • Facilidade de integração/migração de CDN
  • Redução da carga de requests do servidor da aplicação

Vamos para a parte técnica:

Como instalar e usar a S3 Uploads by Human Made

A biblioteca que escolhi foi a S3 Uploads, feita pela Human Made. Os motivos:

  • Gratuita e open source
  • Facilita fazer o trabalho de transferência e migração de URLs das mídias antigas
  • Funciona com qualquer tipo de mídia
  • Você configura o bucket e continua com autoridade e autonomia sobre o conteúdo e a infra

Os requisitos:

O que precisa ser feito para enviar toda a biblioteca de mídias do WordPress para o S3 usando a S3 Uploads:

  1. Configurar um IAM em sua conta da AWS, com acesso ao S3
  2. Criar uma chave de acesso para a IAM
  3. Criar um novo Bucket S3
  4. Instalar o S3 Uploads – Human Made
  5. Criar o arquivo de configuração
  6. Ativar o plugin S3 Uploads
  7. Enviar toda a biblioteca de mídia para o bucket S3

Antes de começar, faça o que é certo: backup do banco de dados do WordPress e também da instalação do seu WordPress.

Rodei essa integração com 4 sites e em apenas em um deles tive um problema – não precisei restaurar backup, mas foi necessário desativar e reinstalar o plugin.


Configurar um IAM na AWS

Acesse o Gerenciamento de IAM da AWS e clique em Adicionar.

Adicione a política AmazonS3FullAccess (você também pode criar uma restrição por Bucket para esta IAM, assim ela só terá acesso a um bucket específico) e crie o usuário.


Criar uma chave de acesso para a IAM

Na tela do usuário vá na aba Credenciais de Segurança e na área de Chaves de acesso clique em Criar chave de acesso – crie uma nova chave para aplicações rodadas fora da AWS e guarde os dados, você precisará da chave de acesso e da chave de segurança para confiruar o plugin no WordPress.


Criar um novo Bucket S3

Vá para a área de console do S3 do AWS e clique em Criar Bucket, dê um nome para seu novo bucket, mantenha ACLs habilitadas e remova o bloqueio público (o material deste bucket será público, portanto o uso dele deve ser exclusivo para as mídias públicas do seu WordPress) e concorde com a configuração do bucket público.


Instalar o S3 Uploads – Human Made

Para instalar o plugin será necessário o composer instalado e você deverá acessar (ssh) o servidor e, no diretório público do WordPress executar:

composer require humanmade/s3-uploadsCode language: JavaScript (javascript)

Isso irá instalar o s3-uploads e todas as suas dependências, o resultado esperado é que seu projeto tenha um diretório /vendor, um composer.json e dentro do diretório de plugins seja criado o diretório s3-uploads.


Criando o arquivo de configuração

A configuração dos dados do plugin é diretamente no wp-config.php pois este plugin não tem uma interface gráfica.

No seu arquivo de configuração do WordPress adicione o autoload do composer:

require_once __DIR__ . '/vendor/autoload.php';Code language: PHP (php)

Isso irá adicionar o autoload e todas as dependências que foram instaladas com o composer no carregamento da aplicação.

Agora preencha as configurações com as informações da sua conta AWS:

define( 'S3_UPLOADS_BUCKET', 'odesenvolvedor' );
define( 'S3_UPLOADS_REGION', 'us-east-1' );

define( 'S3_UPLOADS_KEY', 'iam-key' );
define( 'S3_UPLOADS_SECRET', 'iam-secret' );

define( 'S3_UPLOADS_USE_INSTANCE_PROFILE', true );Code language: JavaScript (javascript)

Ativar o plugin S3 Uploads

Para ativar o plugin você usará o WP Cli, com o comando abaixo:

wp plugin activate s3-uploads

Neste ponto os novos uploads da biblioteca de mídia do WordPress já devem estar sendo enviadas para o bucket S3 e recebendo as URLs diretamente do bucket público.

Você pode testar se a integração está funcionando com o comando:

wp s3-uploads verify

Isso irá testar inserir e excluir um objeto do bucket.


Enviar toda a biblioteca de mídia para o bucket S3

Para enviar toda a biblioteca de mídia para o S3, estando no diretório público do seu WordPress utilize o comando:

wp s3-uploads upload-directory wp-content/uploads uploads

Isso irá copiar o conteúdo de wp-content/uploads para o diretório uploads no seu bucket.

O plugin faz também o ajuste das urls de todas as mídias apontando para o S3 – mas não faz a exclusão automática das imagens antigas.

Escreva um comentário

Comentário