Como você administra suas caixas EC2 Linux?

8

Tenho algumas imagens do Linux EC2 que realizam trabalhos de processamento noturno para um dos meus projetos. De tempos em tempos, precisarei entrar, fazer algumas alterações no código, configurar algumas coisas e reorganizar a imagem.

Meu conjunto de ferramentas para essas operações é esparsamente escasso (SSH na caixa, edite arquivos no VIM, arquivos remotos WGET que eu preciso) e suspeito que haja uma maneira muito melhor de fazê-lo. Estou curioso para ouvir o que outras pessoas na minha posição estão fazendo.

  • Você está usando alguma forma de sistema de janelas e equivalente à área de trabalho remota para acessar a caixa ou é tudo linha de comando? O gerenciamento de caixas do Windows EC2 é trivial, pois você pode simplesmente acessar a área de trabalho remota e transferir arquivos pela rede. Existe um equivalente a isso no mundo Linux?

  • Você está fazendo suas alterações de configuração / ajustes de script diretamente na máquina? Ou você tem algo configurado na sua caixa local para editar esses arquivos remotamente? Ou você está simplesmente editando-os remotamente e depois transferindo-os a cada salvamento?

  • Como você move os arquivos entre o EC2 e o ambiente local? FTP? Algum tipo de unidade mapeada via VPN?

Eu realmente precisaria ter algumas práticas recomendadas para administrar essas caixas. Qualquer sugestão para remover parte da dor seria bem-vinda!

EDIT: Evidentemente, eu não estava claro acima, pois as duas primeiras respostas giravam em torno do gerenciamento e configuração de instâncias do EC2. Eu só quero saber como usar a área de trabalho remota em um servidor Linux em execução para que a movimentação e edição de arquivos seja menos dolorosa.

Jason Kester
fonte
Você pode ter obtido respostas sobre o gerenciamento e a configuração de instâncias do EC2 porque seu título é "Como você administra suas caixas do EC2 Linux?"
11119 Bill Weiss

Respostas:

13

Eu não faço mais muita administração manual do sistema. Eu vejo minha infraestrutura como uma entidade programável e a trato como tal, configurando sistemas com ferramentas que automatizam o gerenciamento de configurações, manutenção de nós do EC2 etc. Ferramentas na minha caixa de ferramentas:

  • Ruby (minha linguagem de script / ferramenta favorita)
  • Git (controle de versão)
  • Opscode's Chef (escrito em Ruby) (1)
  • Capistrano (manutenção em massa ad hoc)
  • Ferramentas de API EC2 da Amazon para manutenção de imagem e instância.
  • Gem da AWS da Rightscale (ligações Ruby para EC2)

(1) - Divulgação, trabalho na Opscode. Outras ferramentas preenchem esse espaço, como o Puppet do Reductive Lab.

Eu agrupo uma AMI quando tenho um nó criado da maneira que preciso para uma função específica. Por exemplo, se estou construindo um servidor de aplicativos Rails, instalarei todos os pacotes de pré-requisitos para economizar tempo na compilação.

Quando tudo mais falha, eu entro nos sistemas com SSH. Eu fiz administração manual do sistema por muitos e muitos anos, isso é algo antigo.

Você está usando alguma forma de sistema de janelas e equivalente à área de trabalho remota para acessar a caixa ou é tudo linha de comando?

Não instalo nenhuma GUI nos servidores, a menos que um pacote tenha uma dependência e uma seja instalada automaticamente.

Existe um equivalente a isso no mundo Linux? (transferindo arquivos)

Normalmente, faço dois tipos de transferência / manutenção de arquivos.

  • Instalação do pacote
  • Arquivos de configuração

Para pacotes nativos da plataforma, eu uso a ferramenta de gerenciamento de pacotes padrão, como APT ou YUM. Para instalações de código-fonte (something.tar.gz), geralmente faço o download via wget.

Os arquivos de configuração geralmente são modelos de ERB gerenciados pelo Chef.

Eu uso SSH e SCP / SFTP para transferir arquivos manualmente.

Você está fazendo suas alterações de configuração / ajustes de script diretamente na máquina? Ou você tem algo configurado na sua caixa local para editar esses arquivos remotamente? Ou você está simplesmente editando-os remotamente e depois transferindo-os a cada salvamento?

Eu mantenho tudo relacionado ao gerenciamento de sistemas em um repositório de controle de software. Aqui está meu fluxo de trabalho típico ao atualizar a configuração em um ou mais sistemas. Começo na minha estação de trabalho local.

  • Puxe do repositório mestre do Git para alterações de outras pessoas.
  • Edite os arquivos localmente (como, atualize um arquivo de configuração).
  • Confirme a alteração, pressione para dominar.
  • No servidor Chef (conectado via SSH), retire a alteração mais recente que acabei de confirmar.
  • Implante a configuração no local apropriado no servidor Chef (eu uso o Rake para isso).
  • Os clientes do Chef são executados em um intervalo, para receber alterações a cada 30 minutos. Se eu precisar de algo imediatamente, eu corro o chef-client manualmente.
  • Verifique a mudança!

Como você move os arquivos entre o EC2 e o ambiente local? FTP? Algum tipo de unidade mapeada via VPN?

Existem alguns locais em que os arquivos que eu uso nos nós do EC2 podem ser armazenados.

  • Servidor Chef. Modelos de configuração principalmente, alguns pacotes pequenos também.
  • GitHub. Armazenamos nosso código (projetos de código aberto) no GitHub. Os nós do EC2 podem obter isso facilmente (como no check-out da versão mais recente de algo).
  • Caçambas Amazon S3. Algumas coisas são armazenadas em um balde.

Faço muito trabalho no EC2, testando principalmente ambientes e alterações. Como resultado de minhas ferramentas e fluxo de trabalho, passo mais tempo trabalhando em assuntos com os quais me importo e menos em lidar com arquivos individuais e pensar em configurações específicas.

jtimberman
fonte
"Eu uso a ferramenta padrão de gerenciamento de pacotes, como APT ou YUM" - o apt-get / yum sempre escolhe as últimas. Como você gerencia se precisa instalar outra versão do pacote (necessária pelas necessidades específicas do seu aplicativo)? Ou você nunca enfrentou isso?
Talonx 11/03
6

Todo o nosso software é implantado via RPM. Cada tipo de instância do EC2 é descrito por um arquivo kickstart (que lista os RPMs a serem instalados ...). A configuração do kickstart significa que uma máquina de trabalho de cada tipo de instância pode ser criada do zero em cerca de 10 minutos.

Em seguida, temos um programa que chama o anaconda (o instalador da Red Hat) para pegar um arquivo kickstart, instalar o sistema em um diretório, agrupar o diretório e enviá-lo ao S3 como Amazon Machine Image. Este é um passo, apenas digito:

kickstart2ami webserver.ks

Como uma máquina pode ser completamente reconstruída, carregada e executada em cerca de 40 minutos, é mais fácil criar novas imagens da máquina do que executar o sysadmin nas instâncias reais (descartáveis) do EC2. Portanto, nenhum sysadmin é realmente executado nas instâncias do EC2.

tfh1985
fonte
Então você reconstrói a caixa inteira do zero toda vez que a inicia? Ai. Até o pequeno trabalho que minha caixa faz possui uma dúzia de dependências aleatórias e um monte de código personalizado em 3 idiomas. Demorou um mês para aprimorá-lo, então não pude imaginar o roteiro complexo que reproduziria tudo isso de uma só vez. Como você construiu e testou esse script?
21430 Jason Kester
todo o código é empacotado nos pacotes RPM ( en.wikipedia.org/wiki/RPM_Package_Manager ), portanto, qualquer complexidade de instalação de vários trechos de código é abstraída dentro dos pacotes. A maior parte do esforço é então empacotar o código. Em geral, considero que qualquer coisa instalada que não seja via gerenciamento de pacotes seja incorporada. O kickstart apenas instala uma lista desses pacotes, portanto, seu trabalho é bem simples. Desde então, não há configurações / ajustes mágicos, nenhuma máquina é especial ou preciosa. O "kickstart2ami" chama apenas anaconda, depois as ferramentas de upload / registro do ec2 em ordem, com um pouco de cola.
tfh1985 19/06/09
11
Você pode compartilhar seu script kickstart2ami?
Noah Campbell
@JasonKester Qualquer coisa importante que "levou um mês para fazer ajustes" certamente vale a pena documentar as etapas de reprodução. Qual a melhor maneira de documentá-lo do que com scripts?
Skyhawk
3

Eu gosto do NX para acesso remoto à GUI. Muito bem documentado também.


fonte
3

Eu uso o nautilus para bastante gerenciamento de arquivos e ssh para comandos. Ele se conecta diretamente ao seu sistema como se estivesse fisicamente no data center. Se você estiver fazendo isso a partir de uma caixa do Windows, esse tipo de conectividade não funcionará, pois os vfs no Windows são limitados.

Jason Mitchell
fonte
2

Eu acho que você não precisa de uma área de trabalho remota para essas tarefas.

Como outros mencionados, você pode usar o SFTP para transferir os arquivos entre as caixas. Use o cliente WinSCP para conectar-se via sftp, que você também pode usar para editar os arquivos na sua máquina Windows (clicando duas vezes neles) como se estivesse na sua máquina local. Você também pode usá-lo para copiar / mover arquivos remotamente.

Você também pode considerar usar o Midnight Commander (mc) no console ssh que pode acelerar as operações de arquivo. Para instalar, use o comando yum install mcou apt-get install mc. Depois, você pode iniciá-lo digitando mcno terminal. Ele também possui um visualizador e editor integrados que são mais diretos que o vim.

Se você realmente deseja ter uma GUI - que normalmente não temos em servidores -, instale o ambiente X e conecte-o ao VNC. Nesses casos, nos conectamos ao servidor VNC através de um túnel ssh que adiciona mais segurança a ele.

Attila Fulop
fonte
1

Em resposta à sua pergunta sobre como configurar uma área de trabalho remota com o X, se você estiver usando o Debian, leia isto . Não é exatamente o melhor documento para configurá-lo. Você instala muitos pacotes, mas tem a ideia certa. Você realmente só precisa de um driver de vídeo fictício para o X e, em seguida, o VNC inicia uma área de trabalho do X.

supercheetah
fonte
0

Se você estiver usando o ubuntu: estamos considerando o uso de paisagem para isso, é um produto comercial da equipe do ubuntu (canonical) e será integrado aos comandos ec2.

hoberion
fonte
Obrigado, mas isso parece ser uma ferramenta para gerenciar instâncias do EC2, em vez da área de trabalho remota em uma caixa individual, que é o que estou procurando ferramentas para fazer.
21410 Jason Kester
0

Você pode tentar algo como capistrano, mas se isso não for suficiente para o que você procura, parece que você é candidato a algum tipo de gerenciamento de configuração.
O Puppet, reductivelabs.com/products/puppet/, é realmente um destaque nesse campo, mas pode ser um pouco exagerado para você, a menos que você tenha planos de se tornar maior e, então, vale a pena trabalhar duro com antecedência.
Se você estiver usando uma das distribuições debian / ubuntu, eu verificaria o Slack Roles.
É um invólucro sofisticado para os scripts rsync e shell. Isso tem muito pouco aprendizado inicial e funciona bem, no entanto, à medida que você cresce, pode ficar um pouco desajeitado.

aussielunix
fonte