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.