Eu não faço mais 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ção, a manutenção do nó EC2, etc. Ferramentas na minha caixa de ferramentas:
- Ruby (minha linguagem de script / ferramenta favorita)
- Git (controle de versão)
- Chef do Opscode (escrito em Ruby) (1)
- Capistrano (manutenção em massa ad hoc)
- Ferramentas da API EC2 da Amazon, por exemplo, e manutenção de imagem.
- gem AWS do Rightscale (ligações do Ruby para EC2)
(1) - Divulgação, eu trabalho para o Opscode. Outras ferramentas preenchem esse espaço como o Puppet do Reductive Lab.
Eu faço o empacotamento de uma AMI quando tenho um nó construído da maneira que preciso para uma função específica. Por exemplo, se eu estiver criando um servidor de aplicativos Rails, instalarei todos os pacotes de pré-requisitos para economizar tempo na compilação.
Quando tudo mais falhar, eu entro em sistemas com SSH. Eu fiz a administração do sistema manual por muitos anos, isso é velho chapéu.
Are you using some form of Windowing system and remote-desktop equivalent to access the box, or is it all command line?
Eu não instalo nenhuma GUI em servidores, a menos que um pacote tenha uma dependência e um seja instalado automaticamente.
Is there an equivalent to this in the Linux world? (transferring files)
Normalmente, faço dois tipos de transferência de arquivos / 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 o APT ou o YUM. Para instalações de fontes (something.tar.gz), geralmente faço o download via wget.
Os arquivos de configuração são normalmente modelos ERB gerenciados pelo Chef.
Eu uso SSH e SCP / SFTP para transferir arquivos manualmente.
Are you doing your config changes/script tweaks directly on the machine? Or do you have something set up on your local box to edit these files remotely? Or are you simply editing them remotely then transferring them at each save?
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. Eu começo da minha estação de trabalho local.
- Puxar do repositório mestre do Git para as alterações dos outros.
- Edite arquivo (s) localmente (por exemplo, atualize um arquivo de configuração).
- Confirme a alteração, envie para o mestre.
- No servidor do Chef (conectado via SSH), puxe a última alteração que acabei de confirmar.
- Implante a configuração no local apropriado no servidor do Chef (eu uso o Rake para isso).
- Os clientes chefes são executados em um intervalo, para que eles captem as alterações a cada 30 minutos. Se eu precisar de algo imediatamente, eu executo o cliente-chefe manualmente.
- Verifique a alteração!
How are you moving files back and forth between EC2 and your local environment? FTP? Some sort of Mapped Drive via VPN?
Existem alguns locais onde os arquivos que eu uso nos nós do EC2 podem ser armazenados.
- servidor do chef. Modelos de configuração principalmente, alguns pequenos pacotes também.
- GitHub. Nós armazenamos nosso código (projetos de código aberto) no GitHub. Os nós do EC2 podem chegar a isso facilmente (como para uma verificação da versão mais recente de algo).
- baldes do Amazon S3. Algumas coisas são armazenadas em um balde.
Eu faço muito trabalho no EC2, principalmente testando ambientes e alterações. Como resultado de minhas ferramentas e fluxo de trabalho, passo mais tempo trabalhando em coisas com as quais realmente me preocupo e menos lidando com arquivos individuais e pensando em configurações específicas.