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
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
recipesgenerate
.rb templates defaultredis.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][:
, Quindi, utilizza un modello di risorsaapp_name
][:deploy_to]/currentredis.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 diredis[:host]
, che è il nome host del cluster di cache. -
<%= @redis[:port] || 6379 %>
rappresenta il valore diredis[:port]
oppure, se tale attributo non è definito, il valore della porta di default, 6379.
La risorsa template
funziona come segue:
-
source
ecookbook
specificano rispettivamente il modello e i nomi del libro di ricette. -
mode
,group
eowner
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
-
Nella pagina AWS OpsWorks Stacks Stack, fai clic su Impostazioni dello stack, quindi su Modifica.
-
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.
-
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.