Fase 3: creazione e distribuzione di un libro di ricette personalizzato - 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à.

Fase 3: creazione e distribuzione di un libro di ricette personalizzato

Importante

Il AWS OpsWorks Stacks servizio ha raggiunto la fine del ciclo di vita il 26 maggio 2024 ed è stato disabilitato 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.

Allo stato attuale, lo stack non è ancora pienamente funzionale; devi abilitare l'applicazione per accedere al server Redis. L'approccio più flessibile è inserire un file YAML con le informazioni di accesso nella sottocartella config dell'applicazione. L'applicazione è quindi in grado di recuperare le informazioni dal file. Con questo approccio, puoi modificare le informazioni di connessione senza riscrivere e ridistribuire l'applicazione. Per questo esempio, il file deve avere un nome redis.yml e contenere il nome host e la porta del ElastiCache cluster, come segue:

host: cache-cluster-hostname port: cache-cluster-port

Puoi copiare manualmente questo file sui tuoi server, ma un approccio migliore consiste nell'implementare una ricetta Chef per generare il file e fare in modo che AWS OpsWorks Stacks esegua la ricetta su ogni server. Le ricette Chef sono applicazioni Ruby specializzate che AWS OpsWorks Stacks utilizza per eseguire attività su istanze come l'installazione di pacchetti o la creazione di file di configurazione. Le ricette sono contenute in un libro di ricette, che può contenere più ricette e i file correlati, ad esempio i modelli per i file di configurazione. Il ricettario viene inserito in un repository, ad esempio GitHub, e deve avere una struttura di directory standard. Se non disponi già di un repository personalizzato per il libro di ricette, consulta Repository dei libri di ricette per informazioni su come crearne uno.

Per questo esempio, aggiungi un libro di ricette denominato redis-config al relativo repository con il seguente contenuto:

my_cookbook_repository redis-config recipes generate.rb templates default redis.yml.erb

La cartella recipes contiene una ricetta denominata generate.rb, che genera il file di configurazione dell'applicazione da redis.yml.erb, come indicato di seguito:

node[:deploy].each do |app_name, deploy_config| # determine root folder of new app deployment app_root = "#{deploy_config[:deploy_to]}/current" # use template 'redis.yml.erb' to generate 'config/redis.yml' template "#{app_root}/config/redis.yml" do source "redis.yml.erb" cookbook "redis-config" # set mode, group and owner of generated file mode "0660" group deploy_config[:group] owner deploy_config[:user] # define variable “@redis” to be used in the ERB template variables( :redis => deploy_config[:redis] || {} ) # only generate a file if there is Redis configuration not_if do deploy_config[:redis].blank? end end end

La ricetta dipende dai dati dell'oggetto JSON di configurazione e distribuzione dello stack AWS OpsWorks Stacks, che è installato su ogni istanza e contiene informazioni dettagliate sullo stack e sulle app distribuite. Il nodo deploy dell'oggetto ha la seguente struttura:

{ ... "deploy": { "app1": { "application" : "short_name", ... } "app2": { ... } ... } }

Il nodo di distribuzione contiene un set di oggetti JSON incorporati, uno per ogni applicazione distribuita, denominati con il nome breve dell'app. Ogni oggetto dell'app contiene un set di attributi che definiscono la configurazione dell'app, ad esempio la radice del documento e il tipo di applicazione. Per un elenco degli attributi di distribuzione, consulta Attributi deploy. Le ricette possono utilizzare la sintassi degli attributi di Chef per rappresentare i valori del JSON di configurazione e distribuzione dello stack. Ad esempio, [:deploy][:app1][:application] rappresenta il nome breve dell'applicazione app1.

Per ogni applicazione [:deploy], la ricetta esegue il blocco di codice associato, dove deploy_config rappresenta l'attributo dell'app. La ricetta prima imposta app_root nella directory principale dell'app, [:deploy][:app_name][:deploy_to]/current, Quindi, utilizza un modello di risorsa Chef per generare un file di configurazione da redis.yml.erb e inserirlo in app_root/config.

I file di configurazione sono in genere creati da modelli, con molte impostazioni definite dagli attributi di Chef. Con gli attributi puoi modificare le impostazioni tramite JSON personalizzati, come descritto più avanti, invece di riscrivere il file modello. Il modello redis.yml.erb contiene quanto segue:

host: <%= @redis[:host] %> port: <%= @redis[:port] || 6379 %>

Gli elementi <%... %> sono segnaposti che rappresentano un valore attributo.

  • <%= @redis[:host] %> rappresenta il valore di redis[:host], che è il nome host del cluster di cache.

  • <%= @redis[:port] || 6379 %> rappresenta il valore di redis[:port] oppure, se tale attributo non è definito, il valore della porta di default, 6379.

La risorsa template funziona come segue:

  • source e cookbook specificano rispettivamente il modello e i nomi del libro di ricette.

  • mode, group e owner assegnano al file di configurazione gli stessi diritti di accesso dell'applicazione.

  • La sezione variables imposta la variabile @redis utilizzata nel modello sul valore attributo [:redis] dell'applicazione.

    I valori attributo [:redis] sono impostati utilizzando un JSON personalizzato, come descritto più avanti; non è uno degli attributi delle app standard.

  • La direttiva not_if garantisce che la ricetta non generi un file di configurazione se ne esiste già uno.

Dopo aver creato il libro di ricette, è necessario distribuirlo per ogni istanza della relativa cache. Questa operazione non esegue la ricetta, ma si limita a installare il nuovo libro di ricette sulle istanze dello stack. Una ricetta viene eseguita in genere assegnandola all'evento del ciclo di vita di un livello, come descritto più avanti.

Per distribuire il libro di ricette personalizzato
  1. Nella pagina AWS OpsWorks Stacks Stack, fai clic su Impostazioni dello stack, quindi su Modifica.

  2. Nella sezione Configuration Management (Gestione configurazione), impostare Use custom Chef cookbooks (Usa libri di ricette Chef personalizzati) su Yes (Sì), inserire le informazioni sul repository dei libri di ricette e fare clic su Save (Salva) per aggiornare la configurazione dello stack.

  3. Nella pagina Stack, fare clic su Run Command (Esegui comando), selezionare il comando dello stack Update Custom Cookbooks (Aggiorna libri di ricette personalizzati) e fare clic su Update Custom Cookbooks (Aggiorna libri di ricette personalizzati) per installare il nuovo libro di ricette nelle cache relative ai libri di ricette nelle istanze.

Per modificare il libro di ricette, basta eseguire di nuovo Update Custom Cookbooks (Aggiorna libri di ricette personalizzati) per installare la versione aggiornata. Per ulteriori informazioni su questa procedura, consulta Installazione di libri di ricette personalizzati.