tl; dr: preciso configurar uma sincronização automática rápida do EFS para vários EC2s
Eu configurei um EC2 Auto-Scaling Group na AWS e estou procurando a melhor maneira de gerenciar implantações de código em minhas instâncias, com o mínimo de interrupção de serviço possível (de preferência nenhuma) e com pouco escopo para humanos erro quanto possível (de preferência nenhum, hahaha) ...
Isto é para um site do Magento. Inicialmente, olhei para armazenar todo o conteúdo da Web no EFS (Elastic File System) e fazer com que meu EC2 o montasse na inicialização, portanto, havia apenas uma base de código centralizada à qual cada um deles teria acesso. Eu rapidamente descobri que essa era uma Idéia Muito Ruim - servir conteúdo da web de um site do tamanho do Magento em um compartilhamento de rede é basicamente impraticável, e com a latência no EFS é ainda pior do que seu compartilhamento médio de NFS.
O que eu estou tentando alcançar agora é ter uma base de código centralizada no EFS, com uma sincronização quase em tempo real de lá para um diretório "local" (EBS) em cada instância.
Eu tentei rsync
, usando uma abordagem "pull", tendo cada instância arquivos rsync do EFS para ela mesma. No início, parecia bom, mas parece que gradualmente fica mais lento a cada exame (mais de uma hora no último teste).
Eu tentei find
, resultado semelhante.
Eu experimentei o transportador de symlink_or_copy
do fileconveyor , mas isso ainda parece lento - talvez porque por uma razão ou outro não está usando inotify
para descobrir mudanças e está voltando para a pesquisa.
Em última análise, o objetivo é permitir que um desenvolvedor implante arquivos novos e alterados em um único local e que esses arquivos sejam replicados de maneira rápida e automática em todas as instâncias em execução. O desenvolvedor não precisa saber ou se importar com quantas instâncias estão em execução - é provável que varie de hora em hora.
Esta resposta a uma pergunta semelhante é muito boa e é a abordagem que estou usando atualmente - uma instância protegida do EC2 é atualizado, novo AMI é criado, instâncias restantes são eliminadas e substituições são inicializadas com base na nova imagem. O EFS basicamente se torna redundante.
Mas a intervenção manual necessária é realmente muito mais trabalhosa, e mais propensa a erros humanos, do que eu posso ficar com o longo prazo. Eu não quero ter que criar uma nova AMI e iniciar a configuração, e atualizar o Auto Scaling Group para usar esse novo LC, toda vez que eu fizer uma implantação.
Então ... como faço para sincronizar rápida e automaticamente do EFS para vários EC2s?
Se eu conseguir um colaborador trabalhando em conjunto com o inotify, isso resolverá isso? Ou isso é uma perseguição selvagem, alguém sabe?