Ya no hago mucha administración manual del sistema. Veo mi infraestructura como una entidad programable y la trato como tal, configurando sistemas con herramientas que automatizan la gestión de la configuración, el mantenimiento del nodo EC2, etc. Herramientas en mi caja de herramientas:
- Ruby (mi lenguaje de scripting / herramienta favorito)
- Git (control de versiones)
- Opscode's Chef (escrito en Ruby) (1)
- Capistrano (mantenimiento masivo ad hoc)
- Herramientas de API EC2 de Amazon, por ejemplo, y mantenimiento de imágenes.
- Gema AWS de Rightscale (enlaces Ruby para EC2)
(1) - Divulgación, trabajo para Opscode. Otras herramientas llenan este espacio como la marioneta de Reductive Lab.
Empaquete un AMI cuando tengo un nodo construido de la manera que necesito para una función específica. Por ejemplo, si estoy compilando un servidor de aplicaciones Rails, tendré todos los paquetes de requisitos previos instalados para ahorrar tiempo en la compilación.
Cuando todo lo demás falla, inicio sesión en los sistemas con SSH. Hice la administración manual del sistema durante muchos años, este es un sombrero viejo.
¿Está utilizando algún tipo de sistema de ventanas y un escritorio remoto equivalente para acceder al cuadro, o es todo línea de comando?
No instalo ninguna GUI en los servidores a menos que un paquete tenga una dependencia y uno se instale automáticamente.
¿Hay un equivalente a esto en el mundo de Linux? (transferencia de archivos)
Normalmente hago dos tipos de transferencia de archivos / mantenimiento de archivos.
- Instalación del paquete
- Archivos de configuración
Para los paquetes nativos de la plataforma, utilizo la herramienta de administración de paquetes estándar como APT o YUM. Para las instalaciones de origen (something.tar.gz) generalmente descargo a través de wget.
Los archivos de configuración suelen ser plantillas ERB administradas por Chef.
Yo uso SSH y SCP / SFTP para transferir archivos manualmente.
¿Estás haciendo tus cambios de configuración / ajustes de script directamente en la máquina? ¿O tiene algo configurado en su casilla local para editar estos archivos de forma remota? ¿O simplemente los edita de forma remota y luego los transfiere en cada guardado?
Mantengo todo lo relacionado con la gestión de sistemas en un repositorio de control de software. Aquí está mi flujo de trabajo típico al actualizar la configuración en uno o más sistemas. Comienzo desde mi estación de trabajo local.
- Extraiga del repositorio maestro de Git para los cambios de otros.
- Editar archivos localmente (como actualizar un archivo de configuración).
- Cometer el cambio, empujar para dominar.
- En el servidor Chef (conectado a través de SSH), obtenga el último cambio que acabo de confirmar.
- Implemente la configuración en el lugar apropiado en el servidor Chef (uso Rake para esto).
- Los clientes chef se ejecutan en un intervalo, por lo que recogerán los cambios cada 30 minutos. Si necesito algo de inmediato, ejecuto chef-cliente manualmente.
- ¡Verifica el cambio!
¿Cómo mueve los archivos de un lado a otro entre EC2 y su entorno local? FTP? ¿Algún tipo de unidad asignada a través de VPN?
Hay algunas ubicaciones donde se pueden almacenar los archivos que uso en los nodos EC2.
- Chef servidor. Plantillas de configuración principalmente, algunos paquetes pequeños también.
- GitHub. Almacenamos nuestro código (proyectos de código abierto) en GitHub. Los nodos EC2 pueden acceder a esto fácilmente (por ejemplo, para el pago de la última versión de algo).
- Cubos de Amazon S3. Algunas cosas se almacenan en un cubo.
Hago mucho trabajo en EC2, principalmente probando entornos y cambios. Como resultado de mis herramientas y flujo de trabajo, paso más tiempo trabajando en cosas que realmente me interesan y menos en el manejo de archivos individuales y pensando en configuraciones específicas.