Como compartilhar discos no linux usando o AWS EFS

Vamos ver neste artigo uma solução muito fácil, onde compartilhamos um mesmo disco EFS (Elastic File System) entre duas instâncias EC2 utilizando linux.

A AWS fornece outra forma de armazenamento chamado S3, porém temos situações onde precisamos providenciar uma infraestrutura para aplicações legadas, ou que a empresa não tem mais o suporte de desenvolvimento da ferramenta, impossibilitando a implementação do AWS SDK, nestes casos é possível então utilizar discos compartilhados a nível das instâncias criadas, de forma muito fácil e nativa.

Pré-Requisitos do artigo

Para seguir este artigo de forma natural, entendemos que você já tenha os seguintes recursos criados.

  1. VPC
  2. Subnets
  3. Duas ou mais instâncias AWS (Pode ser máquinas Micro em caso de POC)
  4. Instâncias com acesso a internet.
  5. Acesso SSH á cada uma.

Caso tenha dúvidas para criar estes recursos, temos vários vídeos no nosso Canal do Youtube.

Criando o disco EFS

A primeira coisa, claro, é criar o recurso da AWS, o EFS é um acrônimo de Elastic File System.

Este serviço da AWS tem como função permitir você criar um “disco” para uma ou mais máquinas e ele garante ter escalabilidade de petabytes sem interrupção do serviço hospedado, ou seja, caso atinja o limite de tamanho você tem a escolha de colocar mais discos ou de aumentar o tamanho do mesmo e também este serviço foi criado by-design para ser compartilhável, com grande capacidade de IOPS (leitura/escrita) permitindo então alta capacidade de transferência.

Agora que sabemos um pouco mais do serviço vamos a criação dele, caso você não tenha uma conta da AWS, eles fornecem um conta free tier, com algumas horas de computação gratuita e a possibilidade de usufruir de alguns dos serviços da plataforma, https://aws.amazon.com/pt/free

Acessando e criando o EFS

Após logar no console da AWS, você vai se deparar com a home do console, então faça a pesquisa por EFS.

Console da AWS
Figura 1 – EFS

Feito isso, os próximos passos são específicos de cada conta, como VPC ID, Subnets, então faça as escolhas conforme as particularidades da sua conta, caso seja uma conta nova, você precisará provisionar.

AWS EFS
Figura 2 – Primeiro passo ao configurar o EFS

A próxima tela você irá configurar alguns pontos específicos de comportamento do EFS.

Configurando as Tags

No primeiro bloco de informações do EFS, temos a opção de incluir Tags para o recurso.
As tags são muito importantes de serem declaradas nos serviços da AWS, pois facilita o entendimento da motivação do recurso criado, como qual aplicação utiliza e também facilita o gerenciamento utilizando AWS CLI / SDK, abaixo incluímos um exemplo de utilização.

AWS EFS Tags
Figura 3 – EFS Tags

Gerenciamento de ciclo de vida

No contexto de um storage, o ciclo de vida significa como o recurso irá gerenciar/controlar os arquivos armazenados, no caso do EFS, esta opção permite você informar a AWS em quanto tempo os dados terão uma frequência de acesso reduzido e então o serviço irá mover esses arquivos para uma classe de estrutura de storage chamado EFS IA (Elastic File System – Infrequent Access), com isso você consegue reduzir os custos do EFS.

Neste nosso caso não iremos selecionar nenhum tipo de opção de ciclo de vida.

Modo de taxa de transferência

Este opção permite você selecionar qual a taxa de transferência dos arquivos, existe uma fórmula de cálculo desta taxa a partir do tamanho do arquivo existente.

A AWS recomenda manter a taxa selecionada como intermitente, mas existe a possibilidade de criar o disco com uma taxa elevada acima do limite do intermitente caso seja sua necessidade.

Neste nosso caso iremos manter o que foi recomendado pela AWS.

Taxa de transferência AWS EFS
Figura 4 – Taxa de Transferência

Modo de desempenho

O EFS fornece duas opções de discos para sua aplicação, são elas:

  • Uso Geral
  • Máxima Performance

Seguindo as recomendações da AWS, o modo de uso geral é para a maior parte das realidades de uso de disco e arquivos, ou seja, você terá um disco com alta taxa de IOPS, praticamente não virando um gargalo, no caso de você ter dezenas até milhares de máquinas conectado ao EFS, você precisará utilizar a opção de Máxima Perfomance, internamente o serviço da AWS irá prover o disco com altíssimas taxas de transferência e baixa latência para os arquivos.

No nosso cenário, iremos utilizar o modo de uso geral.

Criptografia

No último bloco desta tela, temos a criptografia do disco. A AWS possui um serviço de chaves de criptografia que se integra com o EFS neste ponto, este serviço é chamado de KMS (Key Management Service), assim permitimos que os dados do disco e o disco em si esteja criptografado, aumentando em muito a segurança dos dados e impossibilitando a leitura de disco no caso de roubo físico dos dados, pois estarão ininteligível.

Neste cenário não iremos utilizar esta opção.

Agora quando clicar em próximo a AWS irá fazer uma revisão dos dados e no final aplique para que seja iniciado a geração do EFS.

Neste nosso artigo, vamos utilizar duas máquinas Amazon Linux 2 para exemplificar o uso do EFS, mas saliento novamente que este tipo de recurso foi criado para atender centenas de máquinas.

Acessando a primeira instância

Utilizando o SSH vamos acessar a instância denominada de lab-1.

Para isso, pegue o IP público da máquina e utilize as chaves criadas durante o provisionamento.

O primeiro comando que vamos rodar é o:

sudo yum install -y amazon-efs-utils

Ele permitirá que a gente sincronize a instância ao EFS, para isso precisamos determinar qual a pasta da máquina será utilizado como diretório do EFS, então vamos criar uma nova pasta no linux.

mkdir dados

e vamos dar permissões para a pasta, para fins de POC, vamos utilizar uma permissão full.

sudo chmod 777 dados/

Agora que já temos tudo vamos montar o volume do EFS a pasta criada.

sudo mount -t efs EFSID dados/

No comando acima substitua o EFSID pelo ID do recurso criado na sua conta. Para encontrar essa informação, volte no console da AWS e copie o ID.

AWS EFS ID
Figura 5 – EFS ID

Pronto, para confirmar se o volume está montado, rode o seguinte comando:

df -h

Você irá ver que a pasta dados/ estará listado e em seguida com o link do EFS.

Aproveitando que ainda estamos dentro da máquina, vamos criar um arquivo dentro da pasta dados/, para isso execute os seguintes comandos.

cd dados
vim teste.txt

Aperta i para entrar no modo de escrita e escreva algo no arquivo.

Para sair do vim aperte Esc e em seguida wq para salvar o arquivo.

Pronto, agora podemos ir para a segunda máquina e fazer o mesmo procedimento de instalação do EFS-Tools, criar a pasta dados e fazer a montagem igual fizemos acima.

Ao finalizar a montagem do diretório na segunda máquina, rode o seguinte comando:

ls -la dados

O comando irá listar os arquivos no diretório e nesta pasta deve aparecer o arquivo teste.txt criado na primeira máquina.

Para fins de testes, abra este arquivo na segunda máquina, escreva uma nova linha e verifique pela primeira máquina que o arquivo foi atualizado.

Rapidamente temos duas máquinas compartilhando dados de um disco gerenciado pela plataforma cloud do AWS, com alta taxa de transferência, escalabilidade conforme a necessidade e segurança.

Conclusão

Finalizamos a exemplificação do uso do EFS e passagem de alguns conceitos de dentro dos serviços da AWS, como KMS, S3. Agora com essas informações, você pode planejar melhor sua migração para um serviço de nuvem como AWS, mas o conceito de uso serve para os demais players de mercados Azure, GCP.

Deixe seus relatos sobre a utilização do EFS, problemas encontrados em cenários maiores ou até mesmo problemas relacionado ao artigo!

Abraços.