

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

# Utilizzo di un libro di ricette esterno su un'istanza Linux: Berkshelf
<a name="cookbooks-101-opsworks-berkshelf"></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).

**Nota**  
Berkshelf è disponibile solo per gli stack Linux Chef 11.10.

Prima di avviare l'implementazione di un libro di ricette, consulta la pagina relativa ai [libri di ricette della community](https://github.com/opscode-cookbooks), che contiene i libri di ricette creati dai membri della community Chef per un'ampia gamma di scopi. Molti di questi libri di cucina possono essere utilizzati con OpsWorks Stacks senza modifiche, quindi potresti sfruttarli per alcune delle tue attività invece di implementare tutto il codice da solo.

Per usare un libro di ricette esterno su un'istanza, devi installarlo e gestire eventuali dipendenze. L'approccio preferito consiste nell'implementare un libro di ricette che supporta un gestore delle dipendenze denominato Berkshelf. Berkshelf funziona su istanze Amazon, incluse EC2 le istanze OpsWorks Stacks, ma è anche progettato per funzionare con Test Kitchen e Vagrant. Tuttavia, l'utilizzo su Vagrant è leggermente diverso rispetto a OpsWorks Stacks, quindi questo argomento include esempi per entrambe le piattaforme. Per ulteriori informazioni su come usare Berkshelf, consulta [Berkshelf](http://berkshelf.com/).

**Topics**
+ [Utilizzo di Berkshelf con Test Kitchen e Vagrant](#cookbooks-101-opsworks-berkshelf-vagrant)
+ [Usare Berkshelf con Stacks OpsWorks](#opsworks-berkshelf-opsworks)

## Utilizzo di Berkshelf con Test Kitchen e Vagrant
<a name="cookbooks-101-opsworks-berkshelf-vagrant"></a>

 Questo esempio illustra come utilizzare Berkshelf per installare il libro di ricette della community getting-started ed eseguirne la ricetta, che consente di installare un breve file di testo nella tua directory principale sull'istanza.

**Per installare Berkshelf e inizializzare un libro di ricette**

1. Installare il pacchetto Berkshelf nella workstation, come descritto di seguito.

   ```
   gem install berkshelf
   ```

   A seconda della workstation, questo comando può richiedere `sudo` oppure è possibile anche utilizzare un gestore di ambiente Ruby come [RVM](https://rvm.io/). Per verificare che Berkshelf sia stato installato correttamente, eseguire `berks --version`.

1. Il libro di ricette per questo argomento è denominato external\$1cookbook. È possibile utilizzare Berkshelf per creare un libro di ricette inizializzato anziché ricorrere all'approccio manuale degli argomenti precedenti. Per farlo, accedere alla directory `opsworks_cookbooks` ed eseguire il comando seguente.

   ```
   berks cookbook external_cookbook
   ```

   Il comando crea la directory `external_cookbook` e diverse sottodirectory standard di Chef e Test Kitchen, incluse `recipes` e `test`. Inoltre, crea versioni predefinite di numerosi file standard, inclusi i seguenti:
   + `metadata.rb`
   + I file di configurazione per Vagrant, Test Kitchen e Berkshelf
   + Una ricetta `default.rb` vuota nella directory `recipes`
**Nota**  
Non è necessario eseguire `kitchen init`, il comando `berks cookbook` gestisce tali attività.

1. Esegui `kitchen converge`. Il libro di ricette appena creato non fa niente di interessante per il momento, ma converge.

**Nota**  
Inoltre puoi usare `berks init` per inizializzare un libro di ricette esistente al fine di utilizzare Berkshelf.

Per usare Berkshelf allo scopo di gestire le dipendenze esterne di un libro di ricette, la directory radice del libro di ricette deve contenere un `Berksfile`, ovvero un file di configurazione che specifica come Berkshelf dovrebbe gestire le dipendenze. Quando hai utilizzato `berks cookbook` per creare il libro di ricette `external_cookbook`, è stato creato un `Berksfile` con i seguenti contenuti.

```
source "https://supermarket.chef.io"
metadata
```

Il file include le dichiarazioni seguenti:
+ `source`— L'URL di una fonte di libri di cucina.

  Un Berksfile può avere un qualsiasi numero di dichiarazioni `source`, ciascuna delle quali specifica un'origine predefinita per i libri di ricette dipendenti. Se non specifichi esplicitamente un'origine del libro di ricette, Berkshelf cerca nei repository predefiniti un libro di ricette con lo stesso nome. Il Berksfile predefinito include un singolo attributo `source` che specifica il repository del libro di ricette della community. Questo repository contiene il libro di ricette getting-started, che ti consente di lasciare la riga invariata.
+ `metadata`— Indica a Berkshelf di includere le dipendenze dei libri di cucina dichiarate nel file del libro di cucina. `metadata.rb`

  Inoltre puoi dichiarare un libro di ricette dipendente nel Berksfile includendo un attributo `cookbook`, come illustrato in seguito.

Esistono due modi per dichiarare una dipendenza del libro di ricette:
+ Includendo una dichiarazione `cookbook` nel Berksfile.

  Questo è l'approccio usato da Stacks. OpsWorks Ad esempio per specificare il libro di ricette getting-started utilizzato in questo esempio, includi `cookbook "getting-started"` nel Berksfile. Berkshelf cercherà quindi nei repository predefiniti un libro di ricette con tale nome. Puoi inoltre utilizzare `cookbook` per specificare in modo esplicito un'origine del libro di ricette, nonché una determinata versione. Per ulteriori informazioni, consulta [Berkshelf](http://berkshelf.com/).
+ Includendo una dichiarazione `metadata` nel Berksfile e dichiarando la dipendenza in `metadata.rb`.

  Questa dichiarazione indica a Berkshelf di includere le dipendenze del libro di ricette dichiarate in `metadata.rb`. Ad esempio, per dichiarare una dipendenza getting-started, aggiungere una dichiarazione `depends 'getting-started'` al file `metadata.rb` del libro di ricette.

Questo esempio utilizza il primo approccio, per garantire la coerenza con OpsWorks Stacks.

**Per installare il libro di ricette getting-started**

1. Modificare il Berksfile predefinito per sostituire la dichiarazione `metadata` con una dichiarazione `cookbook` per `getting-started`. I contenuti devono essere simili ai seguenti.

   ```
   source "https://supermarket.chef.io"
   
   cookbook 'getting-started'
   ```

1. Eseguire `berks install`, che scarica il libro di ricette getting-started dal repository del libro di ricette della community alla directory Berkshelf della workstation, generalmente `~/.berkshelf`. Spesso questa directory si chiama semplicemente *il Berkshelf*. Cercare nella directory `cookbooks` del Berkshelf la directory per il libro di ricette getting-started, che avrà un nome simile a `getting-started-0.4.0`.

1. Sostituire `external_cookbook::default` nell'elenco di esecuzione `.kitchen.yml` con `getting-started::default`. In questo esempio non viene eseguita alcuna ricetta da external\$1cookbook. È fondamentalmente solo un modo per utilizzare il libro di ricette getting-started. Adesso il file `.kitchen.yml` avrà un aspetto simile al seguente.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: default
       run_list:
         - recipe[getting-started::default]
       attributes:
   ```

1. Eseguire `kitchen converge` e utilizzare `kitchen login` per accedere all'istanza. La directory di accesso deve contenere un file denominato `chef-getting-started.txt` con elementi simili ai seguenti:

   ```
   Welcome to Chef!
   
   This is Chef version 11.12.8.
   Running on ubuntu.
   Version 12.04.
   ```

   Test Kitchen installa libri di ricette nella directory `/tmp/kitchen/cookbooks` dell'istanza. Se si elencano i contenuti di tale directory, verranno visualizzati due libri di ricette: external\$1cookbook e getting-started.

1. Eseguire `kitchen destroy` per arrestare l'istanza. L'esempio successivo utilizza un' OpsWorks istanza Stacks.

## Usare Berkshelf con Stacks OpsWorks
<a name="opsworks-berkshelf-opsworks"></a>

OpsWorks Stacks supporta opzionalmente gli stack Berkshelf for Chef 11.10. Per usare Berkshelf con il tuo stack, devi procedere come descritto di seguito.
+ Abilita Berkshelf per lo stack.

  OpsWorks Stacks gestisce quindi i dettagli dell'installazione di Berkshelf sulle istanze dello stack.
+ Aggiungi un Berksfile alla directory radice del repository del libro di ricette.

  Il Berksfile deve contenere le dichiarazioni `source` e `cookbook` per tutti i libri di ricette dipendenti.

Quando OpsWorks Stacks installa il tuo repository di libri di cucina personalizzato su un'istanza, utilizza Berkshelf per installare i libri di cucina dipendenti dichiarati nel Berksfile del repository. Per ulteriori informazioni, consulta [Utilizzo di Berkshelf](workingcookbook-chef11-10.md#workingcookbook-chef11-10-berkshelf).

Questo esempio mostra come utilizzare Berkshelf per installare il ricettario della community per iniziare su un'istanza Stacks. OpsWorks Inoltre, installa una versione del libro di ricette personalizzato createfile, che crea un file in una directory specificata. Per ulteriori informazioni sul funzionamento di createfile, consulta [Installazione di un file da un libro di ricette](cookbooks-101-basics-files.md#cookbooks-101-basics-files-cookbook_file).

**Nota**  
Se è la prima volta che installi un ricettario personalizzato su uno OpsWorks stack Stacks, dovresti prima seguire l'esempio. [Esecuzione di una ricetta su un'istanza Linux](cookbooks-101-opsworks-opsworks-instance.md)

Inizia creando uno stack, come descritto brevemente di seguito. Per ulteriori informazioni, consulta [Creare un nuovo stack](workingstacks-creating.md).

**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 —** BerksTest
   + **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:** BerksTest
   + **Nome abbreviato**: berkstest

   Puoi effettivamente usare qualsiasi tipo di livello per questo esempio. Tuttavia, l'esempio non richiede nessuno dei pacchetti che vengono installati da altri tipi di livelli, pertanto un livello personalizzato è l'approccio più semplice.

1. [Aggiungi un'istanza 24 ore su 24, 7 giorni su 7](workinginstances-add.md) al BerksTest layer con le impostazioni predefinite, ma non avviarla ancora.

Con OpsWorks Stacks, i libri di cucina devono trovarsi in un archivio remoto con una struttura di directory standard. Quindi fornisci le informazioni di download a OpsWorks Stacks, che scarica automaticamente il repository su ciascuna istanza dello stack all'avvio. Per semplicità, il repository di questo esempio è un archivio Amazon S3 pubblico, OpsWorks ma Stacks supporta anche archivi HTTP, repository Git e repository Subversion. Per ulteriori informazioni, consulta [Repository dei libri di ricette](workingcookbook-installingcustom-repo.md).

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

**Per creare il repository del libro di ricette**

1. Nella directory `opsworks_cookbooks` creare una directory denominata `berkstest_cookbooks`. Se lo si preferisce, è possibile creare questa directory ovunque si ritiene che possa essere utile, perché verrà caricata in un repository.

1. Aggiungere un file denominato Berksfile a `berkstest_cookbooks` con i contenuti seguenti. 

   ```
   source "https://supermarket.chef.io"
   
   cookbook 'getting-started'
   ```

   Questo file dichiara la dipendenza del libro di ricette getting-started e indica a Berkshelf di scaricarlo dal sito del libro di ricette della community.

1. Aggiungere una directory `createfile` a `berkstest_cookbooks` contenente quanto segue.
   + Un file `metadata.rb` con i seguenti contenuti.

     ```
     name "createfile"
     version "0.1.0"
     ```
   + Una directory `files/default` con un file `example_data.json` che include il contenuto seguente.

     ```
     {
       "my_name" : "myname",
       "your_name" : "yourname",
       "a_number" : 42,
       "a_boolean" : true
     }
     ```

     Il nome e il contenuto del file sono arbitrari. La ricetta semplicemente copia il file nel percorso specificato.
   + Una directory `recipes` contenente un file `default.rb` con il codice ricetta seguente.

     ```
     directory "/srv/www/shared" do
       mode 0755
       owner 'root'
       group 'root'
       recursive true
       action :create
     end
     
     cookbook_file "/srv/www/shared/example_data.json" do
       source "example_data.json"
       mode 0644
       action :create_if_missing
     end
     ```

     Questa ricetta crea `/srv/www/shared` e copia `example_data.json` in tale directory dalla directory `files` del libro di ricette.

1. Crea un `.zip` archivio di`berkstest_cookbooks`, [carica l'archivio in un bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html), [rendi l'archivio pubblico](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) e registra l'URL dell'archivio.

Adesso puoi installare i libri di ricette ed eseguire la ricetta.

**Per installare i libri di ricette ed eseguire le ricette**

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

   Le prime due impostazioni forniscono a OpsWorks Stacks le informazioni necessarie per scaricare l'archivio dei libri di cucina nelle tue istanze. L'ultima impostazione abilita il supporto di Berkshelf, che scarica il libro di ricette getting-started nell'istanza. Accettare i valori predefiniti per altre impostazioni e fare clic su **Save (Salva)** per aggiornare la configurazione dello stack. 

1. Modifica il BerksTest layer per [aggiungere le seguenti ricette all'evento Setup lifecycle del layer](workingcookbook-assigningcustom.md).
   + `getting-started::default`
   + `createfile::default`

1. [Avviare](workinginstances-starting.md) l'istanza. L'evento Setup si verifica al termine dell'avvio dell'istanza. OpsWorks Stacks installa quindi il repository di libri di cucina, utilizza Berkshelf per scaricare il ricettario introduttivo ed esegue la configurazione del layer e distribuisce le ricette, tra cui and. `getting-started::default` `createfile::default`

1. Una volta che l'istanza è online, [utilizzare SSH per accedere](workinginstances-ssh.md). Verrà visualizzato un codice analogo al seguente
   + `/srv/www/shared` deve contenere `example_data.json`.
   + `/root` deve contenere `chef-getting-started.txt`.

     OpsWorks Stacks esegue le ricette come root, quindi Getting-Started installa il file nella directory anziché nella directory home. `/root`