

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

# Ricette
<a name="workingcookbook-installingcustom-components-recipes"></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).

Le ricette sono applicazioni Ruby che definiscono una configurazione di sistema. Esse installano pacchetti, creano file di configurazione dai modelli, eseguono comandi shell, creano file e directory e così via. [In genere, gli OpsWorks Stacks eseguono le ricette automaticamente quando si verifica un [evento del ciclo](workingcookbook-events.md) di vita sull'istanza, ma è anche possibile eseguirle in modo esplicito in qualsiasi momento utilizzando il comando Execute Recipes stack.](workingcookbook-executing.md) Per ulteriori informazioni, consulta [About Recipes (Informazioni sulle ricette)](http://docs.chef.io/recipes.html).

Un ricetta in genere consiste in gran parte in una serie di *risorse*, ciascuna delle quali rappresenta lo stato desiderato di un aspetto del sistema. Ogni risorsa include una serie di attributi che definiscono lo stato desiderato e specificano l'operazione da compiere. Chef associa ogni risorsa a un *provider* appropriato che compie l'operazione. Per ulteriori informazioni, consulta [Resources and Providers Reference (Riferimenti risorse e provider)](https://docs.chef.io/resource.html).

Una risorsa `package` aiuta a gestire pacchetti software sulle istanze Linux. L'esempio seguente installa il pacchetto Apache.

```
...
package 'apache2' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    package_name 'httpd'
  when 'debian','ubuntu'
    package_name 'apache2'
  end
  action :install
end
...
```

Chef utilizza il provider di pacchetto appropriato per la piattaforma. Gli attributi di risorsa hanno spesso solo assegnato un valore, ma è possibile utilizzare le operazioni logiche Ruby per eseguire incarichi condizionali. L'esempio utilizza un operatore `case` che utilizza `node[:platform]` per identificare il sistema operativo dell'istanza e imposta l'attributo `package_name` di conseguenza. È possibile inserire gli attributi in una ricetta utilizzando la sintassi standard di nodo Chef e Chef la sostituisce con il valore associato. È possibile utilizzare qualsiasi attributo nell'oggetto nodo, non solo gli attributi del libro di ricette.

Dopo aver determinato il nome di pacchetto appropriato, il segmento di codice termina con un'azione `install` che installa il pacchetto. Altre azioni per questa risorsa includono `upgrade` e `remove`. Per ulteriori informazioni, consulta [package](https://docs.chef.io/chef/resources.html#id150).

Spesso è utile dividere attività di installazione e configurazione complesse in una o più sottoattività, ognuna implementata come una ricetta separata e farle eseguire alla ricetta primaria al momento opportuno. L'esempio seguente mostra la riga di codice che segue l'esempio precedente:

```
include_recipe 'apache2::service'
```

Per fare in modo che una ricetta esegua una ricetta figlia, utilizzare la parola chiave `include_recipe` seguita dal nome della ricetta. Le ricette vengono identificate utilizzando la sintassi Chef standard `CookbookName::RecipeName`, dove `RecipeName` omette l'estensione `.rb`.

**Nota**  
Una dichiarazione `include_recipe` esegue in modo efficace la ricetta in quel punto della ricetta primaria. Tuttavia, ciò che effettivamente accade è che Chef sostituisce ogni dichiarazione `include_recipe` con il codice della ricetta specificato prima di eseguire la ricetta primaria.

Una risorsa `directory` rappresenta una directory, come per esempio quella che conterrà i file di un pacchetto. La seguente risorsa `default.rb` crea una directory di log Linux.

```
directory node[:apache][:log_dir] do
    mode 0755
    action :create
end
```

La directory di log è definita in uno dei file di attributo del libro di ricette. La risorsa specifica la modalità di directory come 0755 e utilizza un'operazione `create` per creare la directory. Per ulteriori informazioni, consulta [directory](https://docs.chef.io/chef/resources.html#directory). È anche possibile utilizzare questa risorsa con le istanze Windows.

La risorsa `execute` rappresenta i comandi, come per esempio comandi shell o script. L'esempio seguente genera file module.load.

```
execute 'generate-module-list' do
  if node[:kernel][:machine] == 'x86_64'
    libdir = 'lib64'
  else
    libdir = 'lib'
  end
  command "/usr/local/bin/apache2_module_conf_generate.pl /usr/#{libdir}/httpd/modules /etc/httpd/mods-available"
  action :run
end
```

La risorsa prima determina la tipologia di CPU. `[:kernel][:machine]` è un altro degli attributi automatici che Chef genera per rappresentare varie proprietà di sistema, in questo caso la tipologia di CPU. Poi specifica il comando, uno script Perl e utilizza un'operazione `run` per eseguire lo script, che genera il file module.load. Per ulteriori informazioni, consulta [execute](https://docs.chef.io/chef/resources.html#execute).

Una `template` risorsa rappresenta un file, in genere un file di configurazione, che deve essere generato da uno dei file modello del libro di cucina. L'esempio seguente crea un file di configurazione `httpd.conf` dal modello `apache2.conf.erb` che è stato illustrato in [Modelli](workingcookbook-installingcustom-components-templates.md).

```
template 'apache2.conf' do
  case node[:platform]
  when 'centos','redhat','fedora','amazon'
    path "#{node[:apache][:dir]}/conf/httpd.conf"
  when 'debian','ubuntu'
    path "#{node[:apache][:dir]}/apache2.conf"
  end
  source 'apache2.conf.erb'
  owner 'root'
  group 'root'
  mode 0644
  notifies :restart, resources(:service => 'apache2')
end
```

La risorsa determina il nome e la posizione del file generato in base al sistema operativo dell'istanza. Poi specifica `apache2.conf.erb` come modello da utilizzare per generare il file e imposta il proprietario, il gruppo e la modalità del file. Esegue l'operazione `notify` per notificare la risorsa `service` che rappresenta il server Apache per riavviare il server. Per ulteriori informazioni, consulta [template](https://docs.chef.io/chef/resources.html#template).