Una breve digressione: libri di cucina, ricette e attributi di Stacks AWS OpsWorks - 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à.

Una breve digressione: libri di cucina, ricette e attributi di Stacks AWS OpsWorks

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.

Ora disponi di server di applicazioni e server di database, ma non sono ancora pronti per l'uso. Devi comunque configurare il database e configurare le impostazioni di connessione dell'app. AWS OpsWorks Stacks non gestisce queste attività automaticamente, ma supporta i ricettari, le ricette e gli attributi dinamici di Chef. Puoi implementare un paio di ricette, una per configurare il database e l'altra per configurare le impostazioni di connessione dell'app, e farle eseguire da AWS OpsWorks Stacks per te.

Il libro di ricette phpapp, che contiene le ricette necessarie, è già implementato ed è pronto all'uso. Puoi passare direttamente alla Passaggio 3.3: Aggiungere i ricettari personalizzati a MyStack se preferisci. Per saperne di più, questa sezione fornisce alcune informazioni di base sui libri di ricette e sulle ricette, nonché descrive il funzionamento delle ricette. Per visualizzare il libro di ricette, passa alla pagina relativa al libro di ricette phpapp.

Ricette e attributi

Una ricetta di Chef in pratica è un'applicazione Ruby specializzata che esegue attività sull'istanza quali, ad esempio, l'installazione di pacchetti, la creazione di file di configurazione, l'esecuzione di comandi shell e così via. Gruppi di ricette correlate sono organizzati in libri di ricette, che contengono anche i file di supporto, ad esempio i modelli per la creazione dei file di configurazione.

AWS OpsWorks Stacks ha una serie di libri di cucina che supportano i livelli integrati. Puoi anche creare libri di ricette personalizzati contenenti ricette specifiche per eseguire attività personalizzate sulle istanze. Questo argomento fornisce una breve introduzione alle ricette e descrive come utilizzarle per configurare il database e le impostazioni di connessione dell'app. Per ulteriori informazioni su libri di ricette e ricette, consulta Libri di ricette e ricette o Personalizzazione degli stack AWS OpsWorks.

Le ricette in genere dipendono dagli attributi di Chef relativi ai dati di input:

  • Alcuni di questi attributi sono definiti da Chef e forniscono informazioni di base sull'istanza, ad esempio il sistema operativo.

  • AWS OpsWorks Stacks definisce un insieme di attributi che contengono informazioni sullo stack, come le configurazioni dei livelli, e sulle app distribuite, come l'app repository.

    Puoi aggiungere attributi personalizzati a questo set assegnando JSON personalizzato allo stack o alla distribuzione.

  • I libri di ricette possono inoltre definire attributi, che sono specifici del libro di ricette interessato.

    Gli attributi del libro di ricette phpapp sono definiti in attributes/default.rb.

Per un elenco completo degli attributi di Stacks, consulta e. AWS OpsWorks Attributi di configurazione e distribuzione dello stack: Linux Attributi dei libri di ricette predefiniti Per ulteriori informazioni, consulta Sostituzione degli attributi.

Gli attributi sono organizzati in una struttura gerarchica, che può essere rappresentata come un oggetto JSON.

Puoi incorporare questi dati in un'applicazione utilizzando la sintassi dei nodo di Chef, come la seguente:

[:deploy][:simplephpapp][:database][:username]

Il nodo deploy include un singolo nodo di app, simplephpapp, che contiene informazioni sul database dell'app, l'archivio Git e così via. L'esempio rappresenta il valore del nome utente del database, che restituisce root.

Configurazione del database

Le ricette di installazione integrate nel livello MySQL creano automaticamente un database per l'app denominata con il nome breve dell'app, quindi per questo esempio hai già un database chiamato simplephpapp. Tuttavia, devi completare la configurazione mediante la creazione di una tabella in cui l'app possa archiviare i dati. Puoi creare la tabella manualmente, ma un approccio migliore consiste nell'implementare una ricetta personalizzata per gestire l'attività e farla eseguire da Stacks per te. AWS OpsWorks Questa sezione descrive come la ricetta dbsetup.rb viene implementata. La procedura per fare in modo che AWS OpsWorks Stacks esegua la ricetta è descritta più avanti.

Per visualizzare la ricetta nell'archivio, passa a dbsetup.rb. L'esempio seguente mostra il codice di dbsetup.rb.

execute è una risorsa Chef che esegue un comando specificato. In questo caso, è un comando MySQL che crea una tabella. La direttiva not_if fa sì che il comando non venga eseguito se la tabella specificata esiste già. Per ulteriori informazioni sulle risorse Chef, consulta la pagina relativa alle informazioni su risorse e provider.

La ricetta inserisce i valori degli attributi nella stringa di comando, utilizzando la sintassi dei nodo descritta in precedenza. Ad esempio, il seguente consente inserisce il nome utente del database.

#{deploy[:database][:username]}

Analizziamo con maggiore dettaglio il codice:

  • Per ogni iterazione, deploy è impostato sul nodo dell'app corrente in modo che restituisca [:deploy][:app_name]. In questo esempio, restituisce [:deploy][:simplephpapp].

  • Utilizzando i valori degli attributi di distribuzione illustrati in precedenza, l'intero nodo restituisce root.

  • Puoi racchiudere il nodo con # {} per inserirlo in una stringa.

La maggior parte degli altri nodi vengono risolti in modo analogo. L'eccezione è #{node[:phpapp][:dbtable]}, che è definito dal file di attributi del libro di ricette personalizzato e restituisce il nome della tabella, ovvero urler. Il comando effettivo che viene eseguito sull'istanza MySQL è quindi:

"/usr/bin/mysql -uroot -pvjud1hw5v8 simplephpapp -e'CREATE TABLE urler( id INT UNSIGNED NOT NULL AUTO_INCREMENT, author VARCHAR(63) NOT NULL, message TEXT, PRIMARY KEY (id))' "

Questo comando crea una tabella denominata urler con i campi relativi a ID, autore e messaggio, utilizzando le credenziali e il nome di database recuperati dagli attributi di distribuzione.

Connessione dell'applicazione al database

Il secondo punto di interesse è l'applicazione, che richiede informazioni di connessione, ad esempio la password del database, per accedere alla tabella. SimplePHPApp dispone effettivamente solo di un file di lavoro, app.php; index.php si limita a caricare il file app.php.

app.php include db-connect.php, che gestisce la connessione al database, ma tale file non è presente nell'archivio. Non puoi creare db-connect.php in anticipo perché definisce il database in base all'istanza specifica. La ricetta appsetup.rb genera invece db-connect.php utilizzando i dati di connessione ricavati dagli attributi di distribuzione.

Per visualizzare la ricetta nell'archivio, passa a appsetup.rb. L'esempio seguente mostra il codice di appsetup.rb.

Ad esempiodbsetup.rb, esegue appsetup.rb iterazioni sulle app nel deploy nodo, semplicemente simplephpapp, di nuovo. Esegue un blocco di codice con una risorsa script e una risorsa template.

La script risorsa installa Composer, un gestore di dipendenze per applicazioni PHP. Inoltre esegue il comando install di Composer per installare le dipendenze per l'applicazione di esempio nella directory principale dell'app.

La risorsa template genera db-connect.php e lo inserisce in /srv/www/simplephpapp/current. Tieni presente quanto segue:

  • La ricetta utilizza un'istruzione condizionale per specificare il proprietario del file, che dipende dal sistema operativo dell'istanza.

  • La direttiva only_if indica a Chef per generare il modello solo se la directory specificata esiste.

Una risorsa template opera su un modello che ha essenzialmente lo stesso contenuto e la stessa struttura del file associato, ma include segnaposto per i diversi valori di dati. Il parametro source specifica il modello, db-connect.php.erb, che si trova nella directory templates/default del libro di ricette phpapp e contiene quanto segue:

Quando Chef elabora il modello, sostituisce i segnaposto <%= => con i valori delle variabili corrispondenti nella risorsa modello, che sono ricavati a loro volta dagli attributi di distribuzione. Il file generato sarà quindi: