Migración de Chef Server a AWS OpsWorks Stacks - AWS OpsWorks

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migración de Chef Server a AWS OpsWorks Stacks

importante

AWS OpsWorks Stacks ya no acepta nuevos clientes. Los clientes actuales podrán usar la OpsWorks consola, la API, la CLI y CloudFormation los recursos con normalidad hasta el 26 de mayo de 2024, momento en el que dejarán de utilizarse. A fin de prepararse para esta transición, le recomendamos que pase sus pilas a AWS Systems Manager lo antes posible. Para obtener más información, consulte AWS OpsWorks Stacks Preguntas frecuentes sobre el final de la vida útil y Migración de sus AWS OpsWorks Stacks aplicaciones a AWS Systems Manager Application Manager.

Dado que AWS OpsWorks Stacks se basa en Chef, migrar desde Chef Server a AWS OpsWorks Stacks es relativamente fácil. En este tema se proporcionan directrices para modificar el código de Chef Server para trabajar con AWS OpsWorks Stacks.

nota

No recomendamos migrar a pilas con versiones de Chef anteriores a Chef 11.10, las cuales se basan en chef-solo y no admiten búsquedas ni bolsas de datos.

Asignación de roles a capas

Chef Server utiliza roles para representar y administrar instancias con el mismo objetivo y la misma configuración, como un conjunto de instancias donde cada una aloja un servidor de aplicaciones Java. Una capa de AWS OpsWorks Stacks sirve básicamente para la misma finalidad que un rol de Chef. Una capa es un esquema para crear un conjunto de instancias de Amazon Elastic Compute Cloud (Amazon EC2) con la misma configuración, paquetes instalados, procedimiento de implementación de aplicaciones, etc.

AWS OpsWorks Stacks incluye un conjunto de capas integradas para varios tipos de servidores de aplicaciones, un balanceador de carga HAProxy, una base de datos maestra MySQL y un nodo maestro de monitorización de Ganglia. Por ejemplo, la capa integrada del servidor de aplicaciones de Java corresponde a un plan para crear instancias que alojan un servidor Tomcat.

Para migrar a AWS OpsWorks Stacks, debe asociar cada rol con una capa que proporcione una funcionalidad equivalente. En el caso de algunos roles es posible que pueda utilizar simplemente una de las capas integradas. Otros roles pueden requerir diferentes grados de personalización. Comience por examinar la funcionalidad de las capas integradas, incluidas las recetas asociadas con cada una, para ver si una de ellas proporciona al menos algunas de las funcionalidades de su rol. Para obtener más información sobre las capas integradas, consulte Capas y Referencia de las capas de AWS OpsWorks Stacks. Para ver las recetas integradas, consulta el GitHub repositorio público de AWS OpsWorks Stacks.

Cómo proceder dependerá de la exactitud con la que pueda asociar una capa a cada rol, como se indica a continuación.

Una capa integrada admite todas las funcionalidades del rol

Puede utilizar la capa integrada directamente, con personalizaciones menores, si es necesario. Por ejemplo, si un rol es compatible con un servidor Tomcat, es posible que las recetas de la capa del servidor de aplicaciones de Java gestionen ya todas las tareas del rol, quizás con una modesta personalización. Por ejemplo, puede hacer que recetas integradas de la capa utilicen opciones de configuración de Tomcat o de Apache anulando los atributos o las plantillas correspondientes.

Una capa integrada admite algunas funcionalidades del rol, pero no todas

Es posible que pueda utilizar una capa integrada ampliando la capa. Esto normalmente implica implementar recetas personalizadas para admitir la funcionalidad que falta, y asignar las recetas a los eventos del ciclo de vida de la capa. Por ejemplo, suponga que su rol instala un servidor de Redis en las mismas instancias que alojan un servidor Tomcat. Podría ampliar la capa del servidor de aplicaciones de Java para que coincida con la funcionalidad del rol implementando una receta personalizada para instalar Redis en las instancias de la capa y asignando la receta al evento de configuración de la capa.

Ninguna capa integrada es correctamente compatible con la funcionalidad del rol

Implemente una capa personalizada. Por ejemplo, suponga que su rol admite un servidor de base de datos MongoDB, el cual no es compatible con ninguna de las capas integradas. Usted puede proporcionar esa compatibilidad implementando recetas que instalen los paquetes necesarios, configuren el servidor, etc., y asignar las recetas a eventos del ciclo de vida de una capa personalizada. Normalmente, podrá utilizar al menos algunas de las recetas del rol con este fin. Para obtener más información acerca de cómo implementar una capa personalizada, consulte Crear una capa personalizada de servidor Tomcat.

Uso de las bolsas de datos

Chef Server le permite transferir datos definidos por el usuario a sus recetas utilizando bolsas de datos.

  • Puede almacenar los datos con los libros de recetas y Chef los instalará en cada instancia.

  • Puede usar bolsas de datos cifradas para la información confidencial como, por ejemplo, las contraseñas.

AWS OpsWorks Stacks es compatible con las bolsas de datos; las recetas pueden recuperar los datos utilizando exactamente el mismo código que con Chef Server. No obstante, existen las siguientes limitaciones y diferencias en cuanto a compatibilidad:

  • Las bosas de datos son compatibles únicamente con pilas de Chef 11.10 Linux y versiones posteriores.

    Las pilas de Windows y de Linux ejecutan versiones anteriores de Chef que no son compatibles con las bolsas de datos.

  • No almacene bolsas de datos en el repositorio de libros de recetas.

    En lugar de esto, utilice JSON personalizado para administrar los datos de las bolsas de datos.

  • AWS OpsWorks Stacks no es compatible con bolsas de datos cifradas.

    Si necesita almacenar información confidencial de forma cifrada, como, por ejemplo, contraseñas o certificados, le recomendamos almacenarla en un bucket privado de S3. A continuación, puede crear una receta personalizada que utilice Amazon SDK para Ruby para recuperar los datos. Para ver un ejemplo, consulte Uso del SDK para Ruby.

Para obtener más información, consulte Uso de las bolsas de datos.

Chef Server almacena información de configuración de la pila, como, por ejemplo, direcciones IP y configuraciones de roles, en el servidor. Las recetas utilizan la búsqueda de Chef para recuperar esta información. AWS OpsWorks Stacks se sirve de un planteamiento algo distinto. Por ejemplo, las pilas de Linux de Chef 11.10 se basan en el modo de cliente local de Chef, una opción de cliente de Chef que ejecuta una versión ligera de Chef Server (a menudo denominada "Chef Zero") localmente en la instancia. Chef Zero admite búsquedas según los datos almacenados en el objeto de nodo de la instancia.

En vez de almacenar los datos de la pila en un servidor remoto, AWS OpsWorks Stacks añade un conjunto de atributos de configuración de pila y de implementación a cada objeto de nodo de la instancia para cada evento del ciclo de vida. Estos atributos representan una instantánea de la configuración de la pila. Utilizan la misma sintaxis que Chef Server y representan la mayor parte de los datos que necesitan las recetas recuperar del servidor.

No necesita modificar con frecuencia el código dependiente de búsqueda de las recetas para AWS OpsWorks Stacks. Dado que Chef opera en el objeto de nodo, que incluye los atributos de configuración de la pila y de implementación, la las consultas de búsqueda en AWS OpsWorks Stacks normalmente funcionan exactamente como con Chef Server.

La principal excepción se genera porque los atributos de configuración de la pila y de implementación contienen solo datos que AWS OpsWorks Stacks conoce cuando instala los atributos en la instancia. Si crea o modifica un atributo localmente en una instancia determinada, esos cambios no se propagan de vuelta a AWS OpsWorks Stacks y no se incluyen en los atributos de configuración de la pila y de implementación que se instalan en las demás instancias. Podrá utilizar la búsqueda para recuperar el valor del atributo solo en dicha instancia. Para obtener más información, consulte Uso de la búsqueda de Chef.

Para garantizar la compatibilidad con Chef Server, AWS OpsWorks Stacks añade un conjunto de atributos role al objeto de nodo, cada uno de los cuales contiene uno de los atributos de capa de la pila. Si la receta utiliza roles como clave de búsqueda, no es necesario cambiar el código de búsqueda. La consulta devuelve automáticamente los datos para la capa correspondiente. Por ejemplo, las siguientes consultas devuelven los atributos php-app de la capa.

phpserver = search(:node, "layers:php-app").first
phpserver = search(:node, "roles:php-app").first

Gestión de libros de recetas y recetas

AWS OpsWorks Stacks y Chef Server gestionan los libros de recetas y las recetas de manera diferente. Con Chef Server:

  • Usted proporciona todos los libros de recetas, ya sea implementándolos usted mismo o utilizando libros de recetas de la comunidad.

  • Usted almacena libros de recetas en el servidor.

  • Usted ejecuta recetas manualmente o mediante un programa habitual.

Con AWS OpsWorks Stacks:

  • AWS OpsWorks Stacks proporciona uno o varios libros de recetas para cada una de las capas integradas. Estos libros de recetas gestionan tareas estándar, como la instalación y la configuración de un software de capa integrada y la implementación de aplicaciones.

    Para gestionar tareas que los libros de recetas integradas no realicen, usted añade libros de recetas personalizados a su pila o se puede servir de libros de recetas de la comunidad.

  • Usted almacena libros de recetas de AWS OpsWorks Stacks en un repositorio remoto como, por ejemplo, un bucket de S3 o un repositorio de Git.

    Para obtener más información, consulte Almacenamiento de libros de recetas.

  • Puede ejecutar recetas manualmente, pero por lo general dejará que AWS OpsWorks Stacks ejecute las recetas por usted en respuesta a un conjunto de eventos de ciclo de vida que se produzcan en puntos clave durante el ciclo de vida de la instancia.

    Para obtener más información, consulte Ejecución de recetas.

  • AWS OpsWorks Stacks es compatible con Berkshelf solo con pilas de Chef 11.10. Si utiliza Berkshelf para administrar sus dependencias de libros de recetas, no podrá utilizar pilas que ejecuten Chef 11.4 o versiones anteriores.

    Para obtener más información, consulte Uso de Berkshelf.

Almacenamiento de libros de recetas

Con Chef Server, puede almacenar los libros de recetas en el servidor e implementarlos desde el servidor a las instancias. Con AWS OpsWorks Stacks, puede almacenar los libros de recetas en un repositorio: en un archivo S3 o HTTP o en un repositorio de Git o de Subversion. Usted especifica la información que necesita AWS OpsWorks Stacks para descargar el código del repositorio a las instancias de una pila al instalar libros de recetas.

Para migrar desde Chef Server, debe colocar los libros de recetas en uno de estos repositorios. Para obtener más información sobre cómo estructurar un repositorio de libros de recetas, consulte Repositorios de libros de recetas.

Ejecución de recetas

En AWS OpsWorks Stacks, cada capa tiene un conjunto de eventos de ciclo de vida (instalación, configuración, implementación, anulación de la implementación y cierre), cada uno de los cuales tiene lugar en un punto clave durante el ciclo de vida de la instancia. Para ejecutar una receta personalizada, por lo general la asignar al evento correspondiente en la capa adecuada. Cuando se produce el evento, AWS OpsWorks Stacks ejecuta las recetas asociadas. Por ejemplo, el evento de instalación tiene lugar después de que una instancia termine de arrancar, por lo que, por lo general, asignará recetas a este evento que realicen tareas como instalar y configurar paquetes e iniciar servicios.

Puede ejecutar recetas manualmente con el comando de pila de ejecución de recetas. Este comando es útil para las fases de desarrollo y pruebas, pero también puede utilizarlo para ejecutar recetas que no se hayan asignado a un evento de ciclo de vida. También puede utilizar el comando de ejecución de recetas (Execute Recipes) para activar manualmente los eventos de instalación y configuración.

Además de la consola de AWS OpsWorks Stacks, para ejecutar recetas puede utilizar la AWS CLI o los SDK. Estas herramientas admiten todas las acciones de API de AWS OpsWorks Stacks, y son más fácil de usar que la API. Utilice el comando de la CLI create-deployment para activar un evento de ciclo de vida que ejecute todas las recetas asociadas. También puede utilizar este comando para ejecutar una o varias recetas sin activar un evento. El código SDK equivalente dependerá del lenguaje en cuestión, pero, por lo general, es similar al del comando de la CLI.

Los siguientes ejemplos describen dos maneras de utilizar el comando de la CLI create-deployment para automatizar la implementación de aplicaciones.

  • Implementar su aplicación según un programa habitual añadiendo una capa personalizada con una sola instancia a su pila.

    Añadir una receta de configuración personalizada a la capa que cree un trabajo cron en la instancia para ejecutar el comando según un programa especificado. Si desea ver un ejemplo de cómo utilizar una receta para crear un trabajo cron, consulte Ejecución de trabajos cron en instancias de Linux.

  • Añadir una tarea a su canalización de integración continua que utilice el comando de la CLI create-deployment para implementar la aplicación.

Utilización de entornos de Chef

AWS OpsWorks Stacks no es compatible con entornos de Chef; node.chef_environment siempre devuelve _default.