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.
Ejemplo 8: Administración de servicios
importante
La AWS OpsWorks Stacks El servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los existentes. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tiene preguntas sobre la migración, póngase en contacto con el AWS Support Equipo en AWS Re:post
Normalmente, los paquetes como servidores de aplicaciones tienen un servicio asociado que debe iniciarse, pararse, reiniciarse, etc. Por ejemplo, debe iniciar el servicio Tomcat después de instalar el paquete o después de que la instancia termine de arrancar, y reiniciar el servicio cada vez que modifique el archivo de configuración. En este tema se abordan los aspectos básicos de cómo administrar un servicio en una instancia de Linux, utilizando como ejemplo un servidor de aplicaciones Tomcat. El recurso del servicio funciona prácticamente de la misma manera en las instancias de Windows, aunque haya algunas diferencias de detalle. Para obtener más información, consulte service
nota
En el ejemplo se realiza una instalación de Tomcat mínima, lo suficiente para demostrar los aspectos básicos de cómo utilizar un recurso service
. Si desea ver un ejemplo de cómo implementar recetas para tener un servidor Tomcat más funcional, consulte Crear una capa personalizada de servidor Tomcat.
Definición e inicio de un servicio
En esta sección se demuestran los aspectos básicos de cómo definir e iniciar un servicio.
Primeros pasos
-
En el directorio
opsworks_cookbooks
, cree un directorio llamadotomcat
y ábralo. -
Añada un archivo
metadata.rb
atomcat
con el contenido siguiente.name "tomcat" version "0.1.0"
-
Inicialice y configure Test Kitchen, tal y como se describe en Ejemplo 1: Instalación de paquetes, y elimine CentOS de la lista
platforms
. -
Añada un subdirectorio
recipes
atomcat
.
Se utiliza un recurso service
execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :start end
La receta hace lo siguiente:
-
El recurso
execute
ejecutaapt-get update
para instalar las actualizaciones del sistema actuales.Para la instancia de Ubuntu utilizada en este ejemplo, debe instalar las actualizaciones antes de instalar Tomcat. Es posible que otros sistemas tengan requisitos diferentes.
-
El recurso
package
instala Tomcat 7. -
La receta
tomcat::service
incluida define el servicio y se trata más adelante. -
El recurso
service
inicia el servicio Tomcat.También puede utilizar este recurso para ejecutar otros comandos, como parar o reiniciar el servicio.
En el ejemplo siguiente se demuestra la receta tomcat::service
.
service 'tomcat' do service_name "tomcat7" supports :restart => true, :reload => false, :status => true action :nothing end
Esta receta crea la definición del servicio Tomcat de la siguiente manera:
-
Otros recursos utilizan el nombre del recurso,
tomcat
, para hacer referencia el servicio.Por ejemplo,
default.rb
hace referencia atomcat
para iniciar el servicio. -
El recurso
service_name
especifica el nombre del servicio.Cuando genera una lista de los servicios de la instancia, el servicio Tomcat recibe el nombre tomcat7.
-
supports
especifica cómo Chef administra los comandosrestart
,reload
ystatus
del servicio.-
true
indica que Chef puede utilizar el script init u otro proveedor de servicios para ejecutar el comando. -
false
indica que Chef debe intentar ejecutar el comando por otros medios.
-
Observe que action
está establecido en :nothing
, lo que indica al recurso que no debe realizar ninguna acción. El recurso de servicio es compatible con acciones como start
y restart
. Sin embargo, este libro de recetas sigue una práctica estándar de utilizar una definición de servicio que no tiene acción e iniciar o reiniciar el servicio en otro punto. Cada receta que empieza o reinicia un servicio primero debe definirlo, por lo que el enfoque más sencillo es poner la definición del servicio en una receta independiente e incluirla en otras recetas según las necesidades.
nota
En aras a la sencillez, la receta predeterminada de este ejemplo utiliza un recurso service
para iniciar el servicio después de ejecutar la definición del servicio. Normalmente, una implementación de producción inicia o reinicia un servicio mediante notifies
, tal y como se explica más adelante.
Para ejecutar la receta
-
Cree un archivo
default.rb
que contenga el ejemplo de receta predeterminado y guárdelo enrecipes
. -
Cree un archivo
service.rb
que contenga el ejemplo de definición del servicio y guárdelo enrecipes
. -
Ejecute
kitchen converge
y, a continuación, inicie sesión en la instancia y ejecute el siguiente comando para verificar que el servicio se esté ejecutando.sudo service tomcat7 status
nota
Si estaba ejecutando service.rb
por separado de default.rb
, tendrá que editar .kitchen.yml
para añadir tomcat::service
a la lista de ejecución. Sin embargo, cuando incluya una receta, su código se incorpora en la receta de matrices antes de que se ejecute la receta. Por lo tanto, service.rb
es básicamente una parte de default.rb
y no requiere una entrada de lista de ejecución diferente.
Uso de notifies para iniciar o reiniciar un servicio
Por lo general, las implementaciones de producción no utilizan service
para iniciar o reiniciar un servicio. En su lugar, añaden notifies
a cualquiera de varios recursos. Por ejemplo, si quiere reiniciar el servicio después de modificar un archivo de configuración, incluya notifies
en el recurso template
asociado. El uso de notifies
para reiniciar explícitamente el servicio reporta las siguientes ventajas en comparación con el uso de un recurso service
.
-
El elemento
notifies
reinicia el servicio únicamente si el archivo de configuración asociado ha cambiado, por lo que no hay riesgo de provocar un reinicio del servicio innecesario. -
Chef reinicia el servicio como máximo una vez al final de cada ejecución, sea cual sea el número de
notifies
que la ejecución contenga.Por ejemplo, la ejecución de Chef puede incluir varios recursos de plantilla, cada uno de los cuales modifica un archivo de configuración diferente y requiere un reinicio de servicio si el archivo ha cambiado. Ahora bien, normalmente se quiere reiniciar el servicio una única vez, al final de la ejecución de Chef. De lo contrario, es posible que intente reiniciar un servicio que aún no esté totalmente operativo después de un reinicio anterior, lo que puede dar lugar a errores.
En este ejemplo se modifica tomcat::default
para incluir un recurso template
que utiliza notifies
para reiniciar el servicio. Un ejemplo realista utilizaría un recurso de plantilla para crear una versión personalizada de uno de los archivos de configuración de Tomcat, pero son bastante largos y complejos. Para mayor simplicidad, el ejemplo se limita a utilizar el recurso de plantilla de Creación de un archivo a partir de una plantilla. No tiene nada que ver con Tomcat, pero es una forma sencilla de mostrar cómo utilizar notifies
. Para ver un ejemplo de cómo utilizar plantillas para crear archivos de configuración de Tomcat, consulte Recetas de instalación.
Para configurar el libro de recetas
-
Añada un subdirectorio
templates
atomcat
y un subdirectoriodefault
atemplates
. -
Copie la plantilla
example_data.json.erb
del libro de recetascreatefile
en el directoriotemplates/default
. -
Añada un subdirectorio
attributes
atomcat
. -
Copie el archivo de atributos
default.rb
del libro de recetascreatefile
en el directorioattributes
.
En la siguiente receta se utiliza notifies
para reiniciar el servicio Tomcat.
execute "install_updates" do command "apt-get update" end package "tomcat7" do action :install end include_recipe 'tomcat::service' service 'tomcat' do action :enable end directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end template "/srv/www/shared/example_data.json" do source "example_data.json.erb" mode 0644 variables( :a_boolean_var => true, :a_string_var => "some string" ) only_if {node['createfile']['install_file']} notifies :restart, resources(:service => 'tomcat') end
El ejemplo fusiona la receta de Creación de un archivo a partir de una plantilla en la receta de la sección anterior, con dos cambios importantes:
-
El recurso
service
sigue existiendo, pero ahora su objetivo es algo diferente.La acción
:enable
habilita el servicio Tomcat al arrancar. -
Ahora, el recurso de plantilla contiene
notifies
, lo que permite reiniciar el servicio Tomcat siexample_data.json
ha cambiado.De este modo, se garantiza que el servicio se inicie cuando Tomcat se instale por primera vez y se reinicie después de cada cambio de configuración.
Para ejecutar la receta
-
Ejecute
kitchen destroy
para comenzar por una instancia limpia. -
Sustituya el código de
default.rb
por el ejemplo anterior. -
Ejecute
kitchen converge
y, a continuación, inicie sesión en la instancia y verifique que el servicio se esté ejecutando.
nota
Si quiere reiniciar un servicio, pero la receta no contiene un recurso como template
que admita notifies
, puede utilizar un recurso ficticio execute
en su lugar. Por ejemplo
execute 'trigger tomcat service restart' do command 'bin/true' notifies :restart, resources(:service => 'tomcat') end
El recurso execute
debe tener un atributo command
, incluso si está utilizando el recurso únicamente como forma de ejecutar notifies
. Este ejemplo evita este requisito al ejecutar /bin/true
, que es un comando de shell que simplemente devuelve un código de éxito.