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à.
Ottenimento diretto dei valori degli attributi
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 il AWS Support Squadra su AWS Re:post o tramite
Nota
Questo approccio funziona solo per gli stack Linux.
Simulazione degli attributi di configurazione e distribuzione dello stack su Vagrant mostra come ottenere i dati di configurazione e distribuzione dello stack utilizzando la sintassi del nodo per fare riferimento direttamente ad attributi particolari. Questo è talvolta l'approccio migliore. Tuttavia, molti attributi vengono definiti in raccolte o elenchi di cui i contenuti e i nomi possono variare da stack a stack e nel corso del tempo per un determinato stack. Ad esempio, l'attributo deploy
contiene un elenco di attributi di app denominati con il nome breve dell'app. Questo elenco, che include i nomi degli attributi dell'app, in genere varia da stack a stack e anche da distribuzione a distribuzione.
Spesso è quindi più utile, e talvolta anche necessario, ottenere i dati richiesti mediante l'enumerazione degli attributi in un elenco o una raccolta. Ad esempio, supponiamo che desideri conoscere gli indirizzi IP pubblici delle istanze del tuo stack. Questa informazione è nell'attributo ['opsworks']['layers']
, che è impostato su una tabella hash contenente un elemento per ogni livello dello stack, denominato con il nome breve del livello. Ogni elemento del livello è impostato su una tabella hash contenente gli attributi del livello, uno dei quali è ['instances']
. A sua volta, questo elemento è impostato su un'ulteriore tabella hash contenente un attributo per ognuna delle istanze del livello, denominate con il nome breve dell'istanza. Ogni attributo dell'istanza è impostato su ancora un'altra tabella hash che contiene gli attributi dell'istanza, incluso ['ip']
, che rappresenta l'indirizzo IP pubblico. Se hai problemi a visualizzarlo, la procedura seguente include un esempio in JSON formato.
Questo esempio mostra come ottenere dati dalla configurazione e dalla distribuzione dello stack JSON per i livelli di uno stack.
Per configurare il libro di ricette
-
Creare una directory in
opsworks_cookbooks
denominatalistip
e accedervi. -
Inizializzare e configurare Test Kitchen, come descritto in Esempio 1: installazione di pacchetti.
-
Aggiungere due directory a
listip
:recipes
edenvironments
. -
Crea una JSON versione modificata degli attributi di MyStack configurazione e distribuzione che contenga gli attributi pertinenti. Avrà un aspetto simile al seguente.
{ "opsworks": { "layers": { "php-app": { "name": "PHP App Server", "id": "efd36017-ec42-4423-b655-53e4d3710652", "instances": { "php-app1": { "ip": "192.0.2.0" } } }, "db-master": { "name": "MySQL", "id": "2d8e0b9a-0d29-43b7-8476-a9b2591a7251", "instances": { "db-master1": { "ip": "192.0.2.5" } } }, "lb": { "name": "HAProxy", "id": "d5c4dda9-2888-4b22-b1ea-6d44c7841193", "instances": { "lb1": { "ip": "192.0.2.10" } } } } } }
-
Crea un file di ambiente denominato
test.json
, incolla l'esempio JSON e salva il fileenvironments
nella cartella del libro di cucina.default_attributes
Il file dovrebbe avere il seguente aspetto (per brevità, la maggior parte dell'esempio JSON è rappresentata da un'ellissi).{ "default_attributes" : { "opsworks": { "layers": {
...
} } }, "chef_type" : "environment", "json_class" : "Chef::Environment" } -
Sostituire il testo in
.kitchen.yml
con il seguente.--- driver: name: vagrant provisioner: name: chef_zero environments_path: ./environment platforms: - name: ubuntu-12.04 suites: - name: listip provisioner: client_rb: environment: test run_list: - recipe[listip::default] attributes:
Dopo aver impostato il ricettario, puoi usare la seguente ricetta per registrare il livello. IDs
node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" end
La ricetta enumera i livelli in ['opsworks']['layers']
e registra il nome e l'ID di ogni livello.
Per eseguire la ricetta di registrazione degli ID di livello
-
Creare un file denominato
default.rb
con la ricetta di esempio e salvarlo nella directoryrecipes
. -
Esegui
kitchen converge
.
La parte pertinente dell'output deve essere simile a quanto riportato di seguito.
Recipe: listip::default * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193
Per visualizzare l'elenco degli indirizzi IP delle istanze, sarà necessario un ciclo nidificato come il seguente.
node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" layerdata['instances'].each do |instance, instancedata| log "Public IP: #{instancedata['ip']}" end end
Il ciclo interno esegue iterazioni sulle istanze di ciascun livello e registra gli indirizzi IP.
Per eseguire la ricetta di registrazione degli IP dell'istanza
-
Sostituire il codice in
default.rb
con la ricetta di esempio. -
Eseguire
kitchen converge
per eseguire la ricetta.
La parte pertinente dell'output deve essere simile a quanto riportato di seguito.
* log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[Public IP: 192.0.2.0] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.0] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.0 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[Public IP: 192.0.2.5] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.5] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.5 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193 * log[Public IP: 192.0.2.10] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.10] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.10
Al termine, eseguire kitchen destroy
; l'argomento successivo utilizza un nuovo libro di ricette.
Nota
Uno dei motivi più comuni per enumerare una JSON raccolta di configurazioni e distribuzioni dello stack consiste nell'ottenere dati per una particolare app distribuita, ad esempio la relativa directory di distribuzione. Per vedere un esempio, consulta Ricette di ditribuzione.