Esempio 8: gestione dei servizi - AWS OpsWorks

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esempio 8: gestione dei servizi

Importante

Il AWS OpsWorks Stacks servizio ha raggiunto la fine del ciclo di vita il 26 maggio 2024 ed è stato disattivato sia per i clienti nuovi che per quelli esistenti. Consigliamo vivamente ai clienti di migrare i propri carichi di lavoro verso altre soluzioni il prima possibile. Se hai domande sulla migrazione, contatta il AWS Support Team su AWS re:post o tramite Premium AWS Support.

I pacchetti, ad esempio i server delle applicazioni, in genere hanno associato un servizio che deve essere avviato, arrestato, riavviato e così via. Ad esempio, è necessario avviare il servizio Tomcat dopo l'installazione del pacchetto o dopo il termine del processo di avvio dell'istanza e riavviare il servizio a ogni modifica del file di configurazione. In questo argomento vengono illustrati i concetti di base per la gestione di un servizio su un'istanza Linux, utilizzando un server delle applicazioni Tomcat come esempio. La risorsa service funziona quasi nello stesso modo sulle istanze Windows, anche se vi sono alcune differenze nei dettagli. Per ulteriori informazioni, consulta service.

Nota

L'esempio prevede un'installazione minima di Tomcat, quanto basta per illustrare le procedure fondamentali per l'utilizzo di una risorsa service. Per un esempio di come implementare ricette per un server Tomcat più funzionale, consulta Creazione di un livello server Tomcat personalizzato.

Definizione e avvio di un servizio

Questa sezione mostra i concetti di base per definire e avviare un servizio.

Per iniziare
  1. Nella directory opsworks_cookbooks, creare una directory denominata tomcat e aprirla.

  2. Aggiungere un file metadata.rb a tomcat con il contenuto seguente.

    name "tomcat" version "0.1.0"
  3. Inizializzare e configurare Test Kitchen come descritto in Esempio 1: installazione di pacchetti, quindi rimuovere CentOS dall'elenco platforms.

  4. Aggiungere la sottodirectory recipes a tomcat.

La gestione del servizio avviene tramite una risorsa service. La seguente ricetta di default installa Tomcat e avvia il servizio.

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 ricetta effettua le seguenti operazioni:

  • La risorsa execute esegue apt-get update per installare gli aggiornamenti correnti del sistema.

    Per l'istanza di Ubuntu utilizzata in questo esempio, è necessario installare gli aggiornamenti prima di installare Tomcat. Altri sistemi possono avere requisiti diversi.

  • La risorsa package installa Tomcat 7.

  • La ricetta tomcat::service inclusa definisce il servizio e verrà discussa più avanti.

  • La risorsa service avvia il servizio Tomcat.

    È anche possibile usare questa risorsa per l'esecuzione di altri comandi, ad esempio per interrompere e riavviare il servizio.

L'esempio seguente illustra la ricetta tomcat::service.

service 'tomcat' do service_name "tomcat7" supports :restart => true, :reload => false, :status => true action :nothing end

Questa ricetta crea la definizione del servizio Tomcat come segue:

  • Il nome della risorsa, tomcat, viene utilizzato da altre ricette per fare riferimento al servizio.

    Ad esempio, default.rb fa riferimento a tomcat per avviare il servizio.

  • La risorsa service_name specifica il nome del servizio.

    Nell'elenco dei servizi per l'istanza, il servizio Tomcat sarà denominato tomcat7.

  • supports specifica come Chef gestisce i comandi restart, reload e status del servizio.

    • true indica che Chef può utilizzare lo script init o un altro provider di servizi per eseguire il comando.

    • false indica che Chef deve tentare di eseguire il comando con altri mezzi.

Osserva che action è impostato su :nothing, che indica alla risorsa di non eseguire alcuna operazione. La risorsa service supporta azioni quali start e restart. Tuttavia, questo libro di ricette segue una pratica standard: l'utilizzo della definizione di un servizio che non richiede alcun intervento con avvio o riavvio del servizio altrove. Ogni ricetta che avvia o riavvia un servizio deve prima definirlo, perciò l'approccio più semplice è indicare in una ricetta separata la definizione del servizio e includerla in altre ricette in base alle esigenze.

Nota

Per semplicità, la ricetta di default per questo esempio utilizza una risorsa service per avviare il servizio dopo aver eseguito la definizione del servizio. Un'implementazione di produzione in genere avvia o riavvia un servizio utilizzando notifies, come illustrato più avanti.

Per eseguire la ricetta
  1. Creare un file default.rb che contiene l'esempio di ricetta predefinita e salvarlo in recipes.

  2. Creare un file service.rb che contiene l'esempio di definizione del servizio e salvarlo in recipes.

  3. Eseguire kitchen converge, quindi effettuare l'accesso all'istanza ed eseguire il comando seguente per verificare che il servizio sia in esecuzione.

    sudo service tomcat7 status
Nota

Se service.rb era in esecuzione separatamente da default.rb, è necessario modificare .kitchen.yml per aggiungere tomcat::service all'elenco di esecuzione. Tuttavia, quando si include una ricetta, il relativo codice viene incorporato nella ricetta padre prima che la ricetta viene eseguita. service.rb è quindi fondamentalmente una parte di default.rb e non richiede un elenco di esecuzione separato.

Utilizzo di notifies per avviare o riavviare un servizio

Di solito, le implementazioni di produzione non utilizzano service per avviare o riavviare un servizio. Al contrario, aggiungono notifies a una qualsiasi delle diverse risorse. Ad esempio, se vuoi riavviare il servizio dopo la modifica di un file di configurazione, includi notifies nella risorsa template associata. L'utilizzo di notifies presenta i seguenti vantaggi rispetto all'utilizzo di una risorsa service per il riavvio esplicito del servizio.

  • L'elemento notifies riavvia il servizio solo se il file di configurazione associato è stato modificato, eliminando ogni rischio di riavvii superflui del servizio.

  • Chef riavvia il servizio al massimo una volta al termine di ogni sessione, indipendentemente dal numero di notifies contenuti nell'esecuzione.

    Ad esempio, un'esecuzione Chef può includere più risorse di modelli, ciascuna delle quali modifica un file di configurazione differente e richiede il riavvio del servizio se il file è stato modificato. Tuttavia, in genere è preferibile riavviare il servizio solo una volta, alla fine dell'esecuzione Chef. In caso contrario, può succedere che si tenti di riavviare un servizio non ancora completamente operativo da un riavvio precedente, il che può causare errori.

In questo esempio viene modificato tomcat::default per includere una risorsa template che utilizza notifies per riavviare il servizio. Un esempio realistico potrebbe utilizzare una risorsa template che crea una versione personalizzata di uno dei file di configurazione Tomcat, che sono però alquanto lunghi e complessi. Per semplicità, l'esempio usa soltanto la risorsa template da Creazione di un file da un modello. Non ha niente a che fare con Tomcat, ma consente di illustrare in modo semplice come utilizzare notifies. Per un esempio che illustri come utilizzare i modelli per creare file di configurazione Tomcat, consulta Ricette di impostazione.

Per configurare il libro di ricette
  1. Aggiungere la sottodirectory templates a tomcat e la sottodirectory default a templates.

  2. Copiare il modello example_data.json.erb dal libro di ricette createfile nella directory templates/default.

  3. Aggiungere la sottodirectory attributes a tomcat.

  4. Copiare il file attributo default.rb dal libro di ricette createfile nella directory attributes.

La seguente ricetta utilizza notifies per riavviare il servizio 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

L'esempio unisce la ricetta di Creazione di un file da un modello e la ricetta della sezione precedente, con due modifiche rilevanti:

  • La risorsa service è ancora presente, ma con uno scopo leggermente diverso.

    L'operazione :enable abilita il servizio Tomcat all'avvio.

  • La risorsa template ora include notifies, che riavvia il servizio Tomcat se example_data.json è stato modificato.

    Questo garantisce che il servizio venga avviato quando alla prima installazione di Tomcat e riavviato dopo ogni modifica alla configurazione.

Per eseguire la ricetta
  1. Eseguire kitchen destroy per iniziare con un'istanza pulita.

  2. Sostituire il codice in default.rb con l'esempio precedente.

  3. Eseguire kitchen converge, quindi accedere all'istanza e verificare che il servizio sia in esecuzione.

Nota

Se si desidera riavviare un servizio ma la ricetta non include una risorsa, ad esempio template che supporta notifies, è possibile utilizzare una risorsa fittizia execute. Ad esempio

execute 'trigger tomcat service restart' do command 'bin/true' notifies :restart, resources(:service => 'tomcat') end

La risorsa execute deve avere un attributo command, anche se viene utilizzata solo come modo per eseguire notifies. Questo esempio aggira quel requisito eseguendo /bin/true, un comando shell che restituisce semplicemente un codice di riuscita.