Implementazione delle ricette per gli stack Chef 11.10 - 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à.

Implementazione delle ricette per gli stack Chef 11.10

Importante

Il AWS OpsWorks Stacks il 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 AWS Support Squadra su AWS Re:post o tramite AWS Supporto Premium.

Gli stack Chef 11.10 offrono i seguenti vantaggi rispetto agli stack Chef 11.4:

  • Le esecuzioni di Chef utilizzano Ruby 2.0.0. Pertanto, le ricette possono utilizzare la nuova sintassi Ruby.

  • Le ricette possono utilizzare i contenitori di dati e la ricerca di Chef.

    Gli stack Chef 11.10 possono utilizzare numerosi libri di ricette della community, senza alcuna modifica.

  • Puoi utilizzare Berkshelf per la gestione dei libri di ricette.

    Berkshelf offre maggiore flessibilità per quanto riguarda la gestione dei libri di ricette personalizzati e l'utilizzo dei libri di ricette della community in uno stack.

  • I libri di ricette devono dichiarare le dipendenze metadata.rb.

    Se il tuo libro di ricette dipende da un altro libro di ricette, devi includere tale dipendenza nel file metadata.rb del tuo libro di ricette. Ad esempio, se il tuo libro di ricette include una ricetta con un'istruzione come include_recipe anothercookbook::somerecipe, il file metadata.rb del libro di ricette include la riga seguente: depends "anothercookbook".

  • AWS OpsWorks Stacks installa un SQL client My sulle istanze di uno stack solo se lo stack include un livello My. SQL

  • AWS OpsWorks Stacks installa un client Ganglia sulle istanze di uno stack solo se lo stack include un livello Ganglia.

  • Se una distribuzione esegue bundle install e l'installazione ha esito negativo, anche la distribuzione avrà esito negativo.

Importante

Non riutilizzare i nomi di libri di ricette predefiniti per i libri di ricette personalizzati e per quelli della community. I libri di ricette personalizzati con lo stesso nome dei libri di ricette predefiniti potrebbero avere esito negativo. Per un elenco completo dei libri di cucina integrati disponibili con gli stack Chef 11.10, 11.4 e 0.9, consulta il repository opsworks-cookbooks su. GitHub

I libri di cucina con ASCII caratteri diversi da quelli eseguiti correttamente sugli stack Chef 0.9 e 11.4 potrebbero non riuscire su uno stack Chef 11.10. Il motivo è che gli stack Chef 11.10 usano Ruby 2.0.0 per l'esecuzione di Chef, che prevede una codifica molto più rigida rispetto a Ruby 1.8.7. Per garantire che tali libri di cucina vengano eseguiti correttamente sugli stack Chef 11.10, ogni file che utilizza caratteri diversi dai ASCII caratteri dovrebbe avere un commento nella parte superiore che fornisca un suggerimento sulla codifica. Ad esempio, per la codifica UTF -8, il commento sarebbe. # encoding: UTF-8 Per ulteriori informazioni sulla codifica di Ruby 2.0.0, consulta l'argomento relativo alla codifica di Ruby 2.0.0.

Installazione e precedenza dei libri di ricette

La procedura per l'installazione AWS OpsWorks I libri di cucina Stacks funzionano in modo leggermente diverso per Chef 11.10 stacks rispetto alle versioni precedenti di Chef. Per Chef 11.10 stacks, dopo AWS OpsWorks Stacks installa i libri di cucina integrati, personalizzati e Berkshelf, li unisce in una directory comune nel seguente ordine:

  1. Libri di ricette predefiniti.

  2. Libri di ricette di Berkshelf, se presenti.

  3. Libri di ricette personalizzati, se presenti.

Quando AWS OpsWorks Stacks esegue questa fusione, copia l'intero contenuto delle directory, comprese le ricette. Se sono presenti duplicati, vengono applicate le regole seguenti:

  • I contenuti dei libri di ricette di Berkshelf hanno la precedenza sui libri di ricette predefiniti.

  • I contenuti dei libri di ricette personalizzati hanno la precedenza sui libri di ricette di Berkshelf.

Per illustrare il funzionamento di questo processo, prendiamo in considerazione il seguente scenario, dove le tre directory di libri di ricette includono tutte un libro di ricette denominato mycookbook:

  • Libri di cucina integrati: mycookbook include un file di attributi denominatosomeattributes.rb, un file modello denominato e una ricetta sometemplate.erb denominata. somerecipe.rb

  • Libri di cucina Berkshelf: include e. mycookbook sometemplate.erb somerecipe.rb

  • Libri di cucina personalizzati: include. mycookbook somerecipe.rb

Il libro di ricette unito contiene i seguenti elementi:

  • someattributes.rb dal libro di ricette predefinito.

  • sometemplate.erb dal libro di ricette di Berkshelf.

  • somerecipe.rb dal libro di ricette personalizzato.

Importante

Non devi personalizzare lo stack Chef 11.10 mediante la copia dell'intero libro di ricette predefinito nel tuo archivio e quindi mediante la modifica di alcune sue parti. In questo modo, sostituisci l'intero libro di ricette predefinito, comprese le ricette. Se AWS OpsWorks Stacks aggiorna quel ricettario, il tuo stack non trarrà vantaggio da quegli aggiornamenti a meno che non aggiorni manualmente la tua copia privata. Per ulteriori informazioni su come personalizzare gli stack, consulta Personalizzazione AWS OpsWorks Stack.

Puoi utilizzare il metodo search di Chef nelle ricette per eseguire query sui dati dello stack. Usi la stessa sintassi che utilizzeresti per il server Chef, ma AWS OpsWorks Stacks ottiene i dati dall'oggetto nodo locale invece di interrogare un server Chef. Questi dati includono:

Gli attributi di configurazione e distribuzione dello stack contengono la maggior parte delle informazioni che in genere le ricette recuperano mediante la ricerca, compresi dati quali, ad esempio, nomi host e indirizzi IP per ogni istanza online nello stack. AWS OpsWorks Stacks aggiorna questi attributi per ogni evento del ciclo di vita, il che garantisce che riflettano accuratamente lo stato attuale dello stack. Ciò significa che spesso nello stack puoi utilizzare le ricette della community che dipendono dalla funzionalità di ricerca, senza alcuna modifica. Il metodo di ricerca restituisce i dati appropriati, derivati dagli attributi di configurazione e distribuzione dello stack, anziché da un server.

La limitazione principale di AWS OpsWorks La ricerca degli stack gestisce solo i dati nell'oggetto del nodo locale, in particolare la configurazione dello stack e gli attributi di distribuzione. Per questo motivo, i seguenti tipi di dati potrebbero non essere disponibili tramite la ricerca:

  • Attributi definiti localmente su altre istanze.

    Se una ricetta definisce un attributo localmente, tali informazioni non vengono riportate al AWS OpsWorks Servizio Stacks, quindi non è possibile accedere a tali dati da altre istanze utilizzando la ricerca.

  • Attributi deploy personalizzati

    Puoi specificare qualcosa di personalizzato JSON quando distribuisci un'app e gli attributi corrispondenti vengono installati nelle istanze dello stack per tale distribuzione. Tuttavia, se esegui la distribuzione solo sulle istanze selezionate, gli attributi vengono installati solo su tali istanze. Le query per questi JSON attributi personalizzati avranno esito negativo su tutte le altre istanze. Inoltre, gli attributi personalizzati sono inclusi nella configurazione e nella distribuzione dello stack JSON solo per quella particolare distribuzione. Tali dati sono accessibili solo finché il successivo evento del ciclo di vita non installa un nuovo set di attributi di configurazione e distribuzione dello stack. Tieni presente che se specifichi custom JSON per lo stack, gli attributi vengono installati su ogni istanza per ogni evento del ciclo di vita e sono sempre accessibili tramite la ricerca.

  • Dati Ohai da altre istanze.

    Lo strumento Ohai di Chef recupera una serie di dati di sistema su un'istanza e aggiunge tali dati all'oggetto nodo. Questi dati vengono archiviati localmente e non vengono riportati al AWS OpsWorks Servizio Stacks, quindi la ricerca non può accedere ai dati Ohai da altre istanze. Tuttavia, alcuni di questi dati potrebbero essere inclusi negli attributi di configurazione e distribuzione dello stack.

  • Istanze offline.

    Gli attributi di configurazione e distribuzione dello stack contengono i dati solo per le istanze online.

Il seguente estratto della ricetta mostra come ottenere l'indirizzo IP privato dell'istanza di un PHP layer utilizzando la ricerca.

appserver = search(:node, "role:php-app").first Chef::Log.info("The private IP is '#{appserver[:private_ip]}'")
Nota

Quando AWS OpsWorks Stacks aggiunge gli attributi di configurazione e distribuzione dello stack all'oggetto nodo, in realtà crea due set di attributi di livello, ciascuno con gli stessi dati. Un set si trova nel layers namespace, ed è così AWS OpsWorks Stacks memorizza i dati. L'altro set si trova nello spazio dei nomi role namespace, che è il modo in cui il server Chef archivia i dati equivalenti. Lo scopo del role namespace è consentire l'esecuzione del codice di ricerca implementato per il server Chef su un AWS OpsWorks Istanza Stacks. Se stai scrivendo codice specifico per AWS OpsWorks Stacks, è possibile utilizzare uno dei due layers:php-app o role:php-app l'esempio precedente e restituire search lo stesso risultato.

Utilizzo di contenitori di dati

Puoi utilizzare il metodo data_bag_item di Chef nelle ricette per eseguire query sulle informazioni incluse nei contenitori di dati. Usi la stessa sintassi che utilizzeresti per il server Chef, ma AWS OpsWorks Stacks ottiene i dati dagli attributi di configurazione e distribuzione dello stack dell'istanza. Tuttavia, AWS OpsWorks Stacks attualmente non supporta gli ambienti Chef, quindi ritorna node.chef_environment _default sempre.

Si crea un data bag utilizzando custom JSON per aggiungere uno o più attributi all'[:opsworks][:data_bags]attributo. L'esempio seguente mostra il formato generale per la creazione di un data bag in formato personalizzatoJSON.

Nota

Non puoi creare un contenitore di dati mediante la sua aggiunta nell'archivio di libri di ricette. È necessario utilizzare customJSON.

{ "opsworks": { "data_bags": { "bag_name1": { "item_name1: { "key1" : “value1”, "key2" : “value2”, ... } }, "bag_name2": { "item_name1": { "key1" : “value1”, "key2" : “value2”, ... } }, ... } } }

In genere si specifica custom JSON per lo stack, che installa gli attributi personalizzati su ogni istanza per ogni evento successivo del ciclo di vita. È inoltre possibile specificare l'opzione personalizzata JSON quando si distribuisce un'app, ma tali attributi vengono installati solo per tale distribuzione e potrebbero essere installati solo su un set selezionato di istanze. Per ulteriori informazioni, consulta Distribuzione di app.

Il seguente JSON esempio personalizzato crea una borsa di dati denominata. myapp Include un elemento, mysql, con due coppie chiave-valore.

{ "opsworks": { "data_bags": { "myapp": { "mysql": { "username": "default-user", "password": "default-pass" } } } } }

Per utilizzare i dati nella ricetta, puoi eseguire una chiamata a data_bag_item e passare i nomi del contenitore di dati e dei valori, come illustrato nel seguente segmento.

mything = data_bag_item("myapp", "mysql") Chef::Log.info("The username is '#{mything['username']}' ")

Per modificare i dati nel data bag, basta modificare quello personalizzato JSON e questo verrà installato sulle istanze dello stack per il prossimo evento del ciclo di vita.

Utilizzo di Berkshelf

Con gli stack Chef 0.9 e Chef 11.4 puoi installare solo un archivio di libri di ricette personalizzati. Con gli stack Chef 11.10 puoi utilizzare Berkshelf per gestire i libri di ricette e le relative dipendenze. Berkshelf ti consente inoltre di installare libri di ricette da più archivi. Per ulteriori informazioni, consulta Creazione di pacchetti di dipendenze di libri di ricette a livello locale. In particolare, con Berkshelf, puoi installare AWS OpsWorks Libri di cucina della community compatibili con Stacks direttamente dai rispettivi repository invece di doverli copiare nel tuo archivio di libri di cucina personalizzato. Le versioni di Berkshelf supportate dipendono dal sistema operativo. Per ulteriori informazioni, consulta AWS OpsWorks Sistemi operativi impilati.

Per usare Berkshelf, devi abilitarlo in modo esplicito, come descritto in Installazione di libri di ricette personalizzati. Devi quindi includere un file Berksfile nella directory principale dell'archivio di libri di ricette, in cui specifichi i libri di ricette da installare.

Per specificare una fonte esterna per libri di cucina in un Berksfile, includi un attributo source nella parte superiore del file che specifica l'archivio predefinito. URL Berkshelf cercherà i libri di cucina nel codice sorgente a meno che tu non specifichi esplicitamente un repository. URLs Devi quindi includere una riga per ogni libro di ricette che vuoi installare usando il formato seguente:

cookbook 'cookbook_name', ['>= cookbook_version'], [cookbook_options]

I campi dopo cookbook indicano il libro di ricette specifico.

  • cookbook_name — (Obbligatorio) Specificate il nome del libro di cucina.

    Se non includi altri campi, Berkshelf installa il ricettario dalla fonte specificata. URLs

  • cookbook_version — (Facoltativo) Specifica la versione o le versioni del libro di cucina.

    Puoi utilizzare un prefisso, ad esempio = o >=, per specificare una determinata versione o un intervallo di versioni accettabili. Se non specifichi una versione, Berkshelf installa la più versione recente.

  • cookbook_options — (Facoltativo) L'ultimo campo è un hash contenente una o più coppie chiave-valore che specificano opzioni come la posizione del repository.

    Ad esempio, puoi includere una chiave git per designare un determinato archivio Git e una chiave tag per designare un determinato ramo dell'archivio. Il metodo migliore per essere sicuro di installare il libro di ricette desiderato è specificare il ramo dell'archivio.

Importante

Non dichiarare i libri di ricette includendo una riga metadata nel file Berksfile e dichiarando le dipendenze del libro di ricette in metadata.rb. Per garantirne il corretto funzionamento, entrambi i file devono trovarsi nella stessa directory. Con AWS OpsWorks Stacks, il Berksfile deve trovarsi nella directory principale del repository, ma metadata.rb i file devono trovarsi nelle rispettive directory dei libri di cucina. È consigliabile invece dichiarare in modo esplicito i libri di ricette esterni nel file Berksfile.

Di seguito è riportato un esempio di file Berksfile che mostra diversi modi per specificare i libri di ricette. Per ulteriori informazioni su come creare un file Berksfile, consulta Berkshelf.

source "https://supermarket.chef.io" cookbook 'apt' cookbook 'bluepill', '>= 2.3.1' cookbook 'ark', git: 'git://github.com/opscode-cookbooks/ark.git' cookbook 'build-essential', '>= 1.4.2', git: 'git://github.com/opscode-cookbooks/build-essential.git', tag: 'v1.4.2'

Questo file installa i seguenti di libri di ricette:

  • La versione più recente di apt dall'archivio di libri di ricette della community.

  • La versione più recente di bluepill dai libri di ricette della community, purché la relativa versione sia 2.3.1 o successive.

  • La versione più recente di ark da un archivio specificato.

    Questo URL esempio si riferisce a un archivio di libri di cucina pubblico di una comunità attiva GitHub, ma è possibile installare libri di cucina da altri repository, inclusi archivi privati. Per ulteriori informazioni, consulta Berkshelf.

  • Il libro di ricette build-essential dal ramo v1.4.2 dell'archivio specificato.

Un archivio di libri di ricette personalizzati può contenere libri di ricette personalizzati e un file Berksfile. In tal caso, AWS OpsWorks Stacks installa entrambi i set di libri di cucina, il che significa che un'istanza può avere fino a tre repository di libri di cucina.

  • I libri di ricette predefiniti vengono installati in /opt/aws/opsworks/current/cookbooks.

  • Se l'archivio di libri di ricette personalizzati contiene libri di ricette, essi vengono installati in /opt/aws/opsworks/current/site-cookbooks.

  • Se hai abilitato Berkshelf e l'archivio di libri di ricette personalizzati include un file Berksfile, i libri di ricette specificati vengono installati in /opt/aws/opsworks/current/berkshelf-cookbooks.

I libri di ricette predefiniti e i libri di ricette personalizzati vengono installati su ogni istanza durante la configurazione e successivamente non vengono aggiornati a meno che tu non esegua manualmente il comando Update Custom Cookbooks (Aggiorna libri di ricette personalizzati) a livello di stack. AWS OpsWorks Stacks viene eseguito berks install per ogni esecuzione di Chef, quindi i tuoi libri di cucina Berkshelf vengono aggiornati per ogni evento del ciclo di vita, secondo le seguenti regole:

  • Se l'archivio include una nuova versione del libro di ricette, questa operazione aggiorna il libro di ricette dall'archivio.

  • In caso contrario, questa operazione aggiorna i libri di ricette di Berkshelf da una cache locale.

Nota

L'operazione sovrascrive i libri di ricette di Berkshelf. Pertanto, se hai modificato le copie locali dei libri di ricette, le modifiche verranno sovrascritte. Per ulteriori informazioni, consulta Berkshelf.

Puoi anche aggiornare i libri di ricette di Berkshelf eseguendo il comando Update Custom Cookbooks (Aggiorna libri di ricette personalizzati) a livello di stack. Questa operazione aggiorna sia i libri di ricette di Berkshelf che quelli personalizzati.