AWS OpsWorks Riferimento Stacks Data Bag - 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à.

AWS OpsWorks Riferimento Stacks Data Bag

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.

AWS OpsWorks Stacks espone un'ampia varietà di impostazioni alle ricette come contenuto del data bag di Chef. In questo documento di riferimento viene specificato il contenuto dei contenitori di dati.

Un contenitore di dati è un concetto Chef. Si tratta di una variabile globale che viene archiviata sotto forma di dati JSON su un'istanza. I dati JSON sono accessibili da Chef. Ad esempio, un data bag può memorizzare variabili globali come l'URL di origine di un'app, il nome host dell'istanza e l'identificatore VPC dello stack associato. AWS OpsWorks Stacks archivia i propri data bag nelle istanze di ogni stack. Nelle istanze Linux, AWS OpsWorks Stacks archivia i sacchetti di dati nella directory. /var/chef/runs/run-ID/data_bags Sulle istanze Windows, archivia i contenitori di dati nella directory drive:\chef\runs\run-id\data_bags. In entrambi i casi, run-ID è un ID univoco che AWS OpsWorks Stacks assegna a ogni esecuzione di Chef su un'istanza. Queste directory includono un set di contenitori di dati (sottodirectory). Ogni contenitore di dati include zero o più elementi di contenitori di dati, ovvero file in formato JSON che includono i gruppi di contenuti dei contenitori di dati.

Nota

AWS OpsWorks Stacks non supporta sacchetti di dati crittografati. Per archiviare i dati riservati in forma crittografata, ad esempio le password o i certificati, ti consigliamo di archiviarli in un bucket S3 privato. Potrai quindi creare una ricetta personalizzata che utilizza l'SDK Amazon per Ruby per recuperare i dati. Per vedere un esempio, consulta Utilizzo dell'SDK for Ruby.

Il contenuto dei contenitori di dati può includere gli elementi seguenti:

  • Contenuto stringa che segue una sintassi Ruby standard e può utilizzare virgolette singole o doppie, sebbene le stringhe contenenti determinati caratteri speciali debbano avere virgolette doppie. Per ulteriori informazioni, consulta il sito della documentazione di Ruby.

  • Contenuto booleano, ovvero true o false (senza virgolette).

  • Contenuto numerico, che può corrispondere a numeri interi o decimali, ad esempio 4 o 2.5 (senza virgolette).

  • Contenuto elenco, nella forma di valori separati da virgola e racchiusi tra parentesi quadre (senza virgolette), ad esempio [ '80', '443' ]

  • Gli oggetti JSON, che includono contenuto aggiuntivo dei contenitori di dati, ad esempio "my-app": {"elastic_ip": null,...}.

Le ricette Chef possono accedere a contenitori di dati, elementi di contenitori di dati e contenuto di contenitori di dati tramite la ricerca Chef oppure direttamente. Di seguito viene descritto come utilizzare entrambi gli approcci di accesso (sebbene la ricerca Chef sia da preferire).

Per accedere a un data bag tramite Chef search, usa il metodo di ricerca, specificando l'indice di ricerca desiderato. AWS OpsWorks Stacks fornisce i seguenti indici di ricerca:

Una volta noto il nome dell'indice di ricerca, puoi accedere al contenuto del contenitore di dati per tale indice di ricerca. Ad esempio, il seguente codice ricetta utilizza l'indice di ricerca aws_opsworks_app per ottenere il contenuto del primo elemento del contenitore di dati (il primo file JSON) nel contenitore di dati aws_opsworks_app (la directory aws_opsworks_app). Il codice, quindi, scrive due messaggi nel log di Chef, uno con il contenuto del contenitore di dati del nome breve dell'app (una stringa nel file JSON) e l'altro con il contenuto del contenitore di dati dell'URL di origine dell'app (un'altra stringa nel file JSON):

app = search("aws_opsworks_app").first Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")

Dove ['shortname'] e ['app_source']['url'] specificano il contenuto del contenitore di dati seguente nel file JSON corrispondente:

{ ... "shortname": "mylinuxdemoapp", ... "app_source": { ... "url": "https://s3.amazonaws.com/opsworks-demo-assets/opsworks-linux-demo-nodejs.tar.gz", }, ... }

Per ottenere un elenco del contenuto dei contenitori di dati che puoi cercare, consulta gli argomenti di riferimento in questa sezione.

Puoi anche eseguire l'iterazione di un set di elementi di un contenitore di dati. Ad esempio, il codice ricetta seguente è simile all'esempio precedente in quanto esegue l'iterazione di ogni elemento del contenitore di dati quando sono presenti più elementi:

search("aws_opsworks_app").each do |app| Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") end

Se sei a conoscenza dell'esistenza di contenuto nel contenitore di dati specifico, puoi trovare l'elemento del contenitore di dati corrispondente con la sintassi seguente:

search("search_index", "key:value").first

Ad esempio, il codice ricetta seguente utilizza l'indice di ricerca aws_opsworks_app per trovare l'elemento del contenitore di dati che contiene il nome breve mylinuxdemoapp dell'app. Quindi, utilizza i contenuti dell'elemento del contenitore di dati per scrivere un messaggio nel log di Chef con l'URL di origine e il nome breve dell'app corrispondente:

app = search("aws_opsworks_app", "shortname:mylinuxdemoapp").first Chef::Log.info("********** For the app with the short name '#{app['shortname']}', the app's URL is '#{app['app_source']['url']}' **********")

Solo per l'indice di ricerca aws_opsworks_instance, puoi specificare self:true per rappresentare l'istanza su cui viene eseguita la ricetta. Il seguente codice di ricetta utilizza il contenuto dell'elemento del data bag corrispondente per scrivere un messaggio nel registro Chef con l'ID e il sistema operativo generati da Stacks dell'istanza corrispondente: AWS OpsWorks

instance = search("aws_opsworks_instance", "self:true").first Chef::Log.info("********** For instance '#{instance['instance_id']}', the instance's operating system is '#{instance['os']}' **********")

Puoi accedere direttamente ai contenitori di dati, agli elementi dei contenitori di dati e al contenuto dei contenitori di dati senza dover necessariamente utilizzare la ricerca Chef. A tale scopo, utilizza i metodi data_bag e data_bag_item per accedere, rispettivamente, ai contenitori di dati e agli elementi dei contenitori di dati. Ad esempio, il seguente codice ricetta esegue la stessa operazione degli esempi precedenti, ad eccezione del fatto che accede direttamente a un singolo elemento del contenitore di dati, quindi a più elementi del contenitore di dati, se ve ne sono più di uno:

# Syntax: data_bag_item("the data bag name", "the file name in the data bag without the file extension") app = data_bag_item("aws_opsworks_app", "mylinuxdemoapp") Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") data_bag("aws_opsworks_app").each do |data_bag_item| app = data_bag_item("aws_opsworks_app", data_bag_item) Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********") Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********") end

Di questi due approcci, ti consigliamo di usare la ricerca Chef. Tutti gli esempi correlati in questa guida dimostrano questo approccio.