

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à.

# Esecuzione di una ricetta su un' OpsWorks istanza Stacks Linux
<a name="cookbooks-101-opsworks-opsworks-instance"></a>

**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 Supporto AWS Team su [AWS re:post](https://repost.aws/) o tramite Premium [AWS Support](https://aws.amazon.com/support).

Test Kitchen e Vagrant forniscono un modo semplice ed efficiente per implementare i libri di cucina, ma per verificare che le ricette di un libro di cucina funzionino correttamente in produzione, devi eseguirle su un'istanza Stacks. OpsWorks In questo argomento viene descritto come installare un libro di ricette personalizzato in un'istanza Linux OpsWorks Stacks ed eseguire una semplice ricetta. L'argomento fornisce inoltre alcuni suggerimenti per correggere in modo efficiente i bug della ricetta.

Per informazioni su come eseguire ricette su istanze Windows, consulta [Esecuzione di una ricetta su un'istanza Windows](cookbooks-101-opsworks-opsworks-windows.md).

**Topics**
+ [Creazione ed esecuzione della ricetta](#opsworks-opsworks-instance-create)
+ [Esecuzione automatica della ricetta](#cookbooks-101-opsworks-opsworks-instance-events)
+ [Risoluzione dei problemi e correzione delle ricette](#cookbooks-101-opsworks-opsworks-instance-bugs)

## Creazione ed esecuzione della ricetta
<a name="opsworks-opsworks-instance-create"></a>

In primo luogo, devi creare uno stack. Di seguito viene brevemente descritto come creare uno stack per questo esempio. Per ulteriori informazioni, consulta [Creare un nuovo stack](workingstacks-creating.md).

**Per creare uno stack**

1. Aprire la [console OpsWorks Stacks](https://console.aws.amazon.com/opsworks/) e fare clic su **Add Stack (Aggiungi stack)**.

1. Specificare le impostazioni seguenti, accettare i valori predefiniti di altre impostazioni e fare clic su **Add Stack (Aggiungi stack)**.
   + **Nome —** OpsTest
   + **Chiave SSH predefinita**: una coppia di EC2 chiavi Amazon

   Se devi creare una coppia di EC2 chiavi Amazon, consulta [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). La coppia di chiavi deve appartenere alla stessa regione AWS dell'istanza. L'esempio utilizza la regione predefinita degli Stati Uniti occidentali (Oregon).

1. Fare clic su **Add a layer (Aggiungi un livello)** e [aggiungere un livello personalizzato](workinglayers-custom.md) allo stack con le impostazioni seguenti.
   + **Nome:** OpsTest
   + **Nome abbreviato**: opstest

   Per gli stack Linux sarà appropriato qualunque tipo di livello, tuttavia l'esempio non richiede nessuno dei pacchetti che vengono installati da altri tipi di livello, pertanto un livello personalizzato è l'approccio più semplice.

1. [Aggiungere un'istanza 24/7](workinginstances-add.md) con impostazioni predefinite al livello e [avviarla](workinginstances-starting.md).

Durante l'avvio dell'istanza, che in genere richiede diversi minuti, puoi creare il ricettario. Questo esempio utilizza una versione leggermente modificata della ricetta da [Logica condizionale](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-conditional), che crea una directory dati il cui nome dipende dalla piattaforma.

**Per configurare il libro di ricette**

1. Creare una directory in `opsworks_cookbooks` denominata `opstest` e accedervi.

1. Creare un file `metadata.rb` con il seguente contenuto e salvarlo in `opstest`.

   ```
   name "opstest"
   version "0.1.0"
   ```

1. Creare una directory `recipes` in `opstest`.

1. Creare un file `default.rb` con la seguente ricetta e salvarlo nella directory `recipes`.

   ```
   Chef::Log.info("******Creating a data directory.******")
   
   data_dir = value_for_platform(
     "centos" => { "default" => "/srv/www/shared" },
     "ubuntu" => { "default" => "/srv/www/data" },
     "default" => "/srv/www/config"
   )
   
   directory data_dir do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

   La ricetta registra un messaggio, ma lo fa chiamando `Chef::Log.info`. Non stai usando Test Kitchen per questo esempio, quindi il metodo non è molto utile. `log` `Chef::Log.info`inserisce il messaggio nel registro di Chef, che puoi leggere al termine dell'esecuzione di Chef. OpsWorks Stacks fornisce un modo semplice per visualizzare questi registri, come descritto più avanti.
**Nota**  
I log di Chef in genere contengono una notevole quantità di informazioni di routine, relativamente poco interessanti. I caratteri "\$1" che racchiudono il testo del messaggio ne semplificano l'identificazione.

1. Creare un archivio `.zip` di `opsworks_cookbooks`. Per installare il tuo ricettario su un'istanza di OpsWorks Stacks, devi archiviarlo in un repository e fornire a OpsWorks Stacks le informazioni necessarie per scaricare il ricettario sull'istanza. I libri di ricette possono essere archiviati in uno qualsiasi dei diversi tipi di repository supportati. Questo esempio memorizza un file di archivio contenente i libri di cucina in un bucket Amazon S3. Per ulteriori informazioni sui repository dei libri di ricette, consulta [Repository dei libri di ricette](workingcookbook-installingcustom-repo.md).
**Nota**  
Per semplicità, questo esempio archivia l'intera directory `opsworks_cookbooks`. Tuttavia, significa che OpsWorks Stacks scaricherà tutti i libri di cucina presenti nell'`opsworks_cookbooks`istanza, anche se ne utilizzerai solo uno. Per installare solo il libro di ricette di esempio, crea un'altra directory padre in cui sposterai `opstest`. Quindi crea un archivio `.zip` della directory padre e utilizzalo al posto di `opsworks_cookbooks.zip`.   
I contenuti distribuiti ai bucket Amazon S3 potrebbero contenere informazioni dei clienti. Per ulteriori informazioni sulla rimozione di dati sensibili, vedi [Come svuotare un bucket S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) o [Come eliminare un bucket S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

1. [Carica l'archivio in un bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html), [rendilo pubblico](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) e registra l'URL dell'archivio.

Adesso puoi installare il libro di ricette ed eseguire la ricetta.

**Per eseguire la ricetta**

1. [Modificare lo stack per abilitare i libri di ricette personalizzati](workingcookbook-installingcustom-enable.md) e specificare le impostazioni seguenti.
   + **Tipo di repository****: S3 Archive**
   + URL **del repository: l'URL** dell'archivio del libro di cucina che hai registrato in precedenza

   Utilizzare i valori predefiniti per altre impostazioni e fare clic su **Save (Salva)** per aggiornare la configurazione dello stack.

1. [Eseguire il comando dello stack Update Custom Cookbooks (Aggiorna libri di ricette personalizzati)](workingstacks-commands.md), che installa la versione corrente dei libri di ricette personalizzati nelle istanze dello stack. Se è presente una versione precedente dei libri di cucina, verrà sovrascritta da questo comando.

1. Eseguire la ricetta utilizzando il comando dello stack **Execute Recipes (Esegui ricette)** con **Recipes to execute (Ricette da eseguire)** impostato su **opstest::default**. Questo comando avvia un'esecuzione di Chef, con un elenco di esecuzione costituito da `opstest::default`.

Dopo aver eseguito correttamente la ricetta, puoi verificarla.

**Per verificare opstest**

1. Il primo passaggio consiste nell'esaminare il [log di Chef](troubleshoot-debug-log.md). Fare clic su **show (mostra)** nella colonna **Log (Registro)** dell'istanza opstest1 per visualizzare il registro. Scorrere e visualizzare il messaggio di log verso il basso.

   ```
   ...
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache.
   [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache.
   [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.******
   [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3)
   ...
   ```

1. [Utilizzare SSH per accedere all'istanza](workinginstances-ssh.md) ed elencare i contenuti di `/srv/www/`.

Se hai seguito tutti i passaggi, vedrai `/srv/www/config` piuttosto che la directory `/srv/www/shared` prevista. Nella sezione seguente vengono fornite alcune linee guida per la risoluzione rapida di tali bug.

## Esecuzione automatica della ricetta
<a name="cookbooks-101-opsworks-opsworks-instance-events"></a>

Il comando **Execute Recipes (Esegui ricette)** è un metodo utile per testare ricette personalizzate. Per tale motivo viene utilizzato nella maggior parte degli esempi. Tuttavia, in pratica di solito esegui le ricette in momenti standard del ciclo di vita di un'istanza, ad esempio dopo il termine dell'avvio dell'istanza o quando distribuisci un'app. OpsWorks Stacks semplifica l'esecuzione di ricette sull'istanza supportando una serie di [eventi del ciclo di vita](workingcookbook-events.md) per ogni livello: Setup, Configure, Deploy, Undeploy e Shutdown. Puoi fare in modo che OpsWorks Stacks esegua automaticamente una ricetta sulle istanze di un layer assegnando la ricetta all'evento del ciclo di vita appropriato.

In genere, è opportuno creare le directory non appena terminata la procedura di avvio di un'istanza, che corrisponde all'evento Setup. Di seguito viene mostrato come eseguire la ricetta di esempio al momento dell'installazione, utilizzando lo stesso stack creato in precedenza nell'esempio. Puoi utilizzare la stessa procedura per gli altri eventi.

**Per eseguire automaticamente una ricetta al momento della configurazione**

1. **Scegli **Livelli** nel pannello di navigazione, quindi scegli l'icona a forma di matita accanto al link Ricette del OpsTest livello.**

1. Aggiungere **opstest::default** alle ricette **Setup (Installazione)** del livello, fare clic su **\$1** per aggiungerlo al livello e scegliere **Save (Salva)** per salvare la configurazione.

1. Scegliere **Instances (Istanze)**, aggiungere un'altra istanza a un livello e avviarla.

   L'istanza deve essere denominata `opstest2`. Al termine dell'avvio, OpsWorks Stacks verrà eseguito. `opstest::default`

1. Una volta che l'istanza `opstest2` è online, verificare che `/srv/www/shared` sia presente.

**Nota**  
Se hai assegnato ricette agli eventi Setup, Configure o Deploy, puoi eseguirle anche manualmente utilizzando un [comando dello stack](workingstacks-commands.md) (Setup e Configure) o un [comando di distribuzione](workingapps-deploying.md) (Deploy) per attivare l'evento. Se hai più ricette assegnate a un evento, questi comandi le eseguono tutte.

## Risoluzione dei problemi e correzione delle ricette
<a name="cookbooks-101-opsworks-opsworks-instance-bugs"></a>

Se non ottieni i risultati previsti o le tue ricette non vengono eseguite correttamente, il processo di risoluzione dei problemi inizia generalmente con l'esame del log di Chef. Contiene una descrizione dettagliata dell'esecuzione e include eventuali messaggi di log inline delle tue ricette. I log sono particolarmente utili se la tua ricetta semplicemente non riesce. In questo caso, i log di Chef registrano l'errore, inclusa una traccia di stack. 

Se la ricetta ha esito positivo, come nell'esempio, il log di Chef spesso non si rivela molto utile. In questo caso, puoi individuare il problema solo esaminando più attentamente la ricetta, in particolare le prime righe:

```
Chef::Log.info("******Creating a data directory.******")

data_dir = value_for_platform(
  "centos" => { "default" => "/srv/www/shared" },
  "ubuntu" => { "default" => "/srv/www/data" },
  "default" => "/srv/www/config"
)
...
```

CentOS è un'alternativa ragionevole per Amazon Linux quando testi ricette su Vagrant, tuttavia attualmente le ricette sono in esecuzione su un'istanza Amazon Linux effettiva. Il valore della piattaforma per Amazon Linux è `amazon`, che non è incluso nella chiamata `value_for_platform`, pertanto la ricetta crea `/srv/www/config` per impostazione predefinita. Per ulteriori informazioni sulla risoluzione dei problemi, consulta [Guida al debugging e alla risoluzione dei problemi](troubleshoot.md).

Ora che hai identificato il problema, devi aggiornare la ricetta e verificare la correzione. Puoi tornare ai file sorgente originali, aggiornare`default.rb`, caricare un nuovo archivio su Amazon S3 e così via. Tuttavia, tale processo può risultare lungo e noioso. Di seguito viene mostrato un approccio molto più veloce, particolarmente utile per i bug delle ricette semplici, come quella nell'esempio, che consiste nel modificare la ricetta sull'istanza. 

**Per modificare una ricetta su un'istanza**

1. Utilizzare SSH per accedere all'istanza ed eseguire `sudo su` per innalzare di livello i privilegi. Per accedere alle directory dei libri di ricette, sono necessari privilegi root.

1. OpsWorks Stacks memorizza il tuo libro di cucina in`/opt/aws/opsworks/current/site-cookbooks`, quindi vai a. `/opt/aws/opsworks/current/site-cookbooks/opstest/recipes`
**Nota**  
OpsWorks Stacks memorizza anche una copia dei tuoi libri di cucina in. `/opt/aws/opsworks/current/merged-cookbooks` Non modificare tale libro di ricette. Quando esegui la ricetta, OpsWorks Stacks copia il ricettario da `.../site-cookbooks` a`.../merged-cookbooks`, quindi tutte le modifiche apportate verranno sovrascritte. `.../merged-cookbooks`

1. Utilizzare un editor di testo sull'istanza per modificare `default.rb` e sostituire `centos` con `amazon`. La ricetta dovrebbe essere simile alla seguente.

   ```
   Chef::Log.info("******Creating a data directory.******")
   
   data_dir = value_for_platform(
     "amazon" => { "default" => "/srv/www/shared" },
     "ubuntu" => { "default" => "/srv/www/data" },
     "default" => "/srv/www/config"
   )
   ...
   ```

Per verificare la correzione, esegui la ricetta utilizzando di nuovo il comando dello stack **Execute Recipe (Esegui ricetta)**. L'istanza deve avere una directory `/srv/www/shared`. Se devi apportare ulteriori modifiche a una ricetta, puoi eseguire **Execute Recipe (Esegui ricetta)** in qualsiasi momento. Non è necessario arrestare e riavviare l'istanza a ogni esecuzione del comando. Una volta che la ricetta funzionerà correttamente, non dimenticare di aggiornare il codice nel libro di ricette.

**Nota**  
Se hai assegnato la tua ricetta a un evento del ciclo di vita in modo che OpsWorks Stacks la esegua automaticamente, puoi sempre utilizzare **Execute Recipe per eseguire** nuovamente la ricetta. Puoi anche eseguire nuovamente la ricetta tutte le volte che vuoi senza riavviare l'istanza utilizzando la console Stacks per attivare manualmente l'evento appropriato. OpsWorks Tuttavia, questo approccio esegue tutte le ricette dell'evento. Ecco un promemoria:  
Utilizza un [comando dello stack](workingstacks-commands.md) per attivare gli eventi Setup o Configure.
Utilizza un [comando di distribuzione](workingapps-deploying.md) per attivare gli eventi Deploy o Undeploy.