

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 dell'SDK for Ruby OpsWorks su un'istanza Stacks Linux
<a name="cookbooks-101-opsworks-s3-opsworks"></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).

Questo argomento descrive come utilizzare l'SDK for Ruby OpsWorks su un'istanza Stacks Linux per scaricare un file da un bucket Amazon S3. OpsWorks Stacks installa automaticamente l'SDK for Ruby su ogni istanza Linux. Tuttavia, al momento della creazione di un oggetto client del servizio, devi fornire un set di credenziali di AWS idoneo `AWS::S3.new` o l'equivalente per altri servizi.

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

 [Utilizzo dell'SDK per Ruby su un'istanza Vagrant](cookbooks-101-opsworks-s3-vagrant.md) mostra come mitigare il rischio di esposizione delle tue credenziali archiviando le credenziali nell'oggetto nodo e facendo riferimento agli attributi nel codice della tua ricetta. Quando esegui ricette su un' EC2istanza Amazon, hai un'opzione ancora migliore, un [ruolo IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

Un ruolo IAM funziona in modo molto simile a un utente IAM. Ha una policy collegata che concede autorizzazioni per l'utilizzo di vari servizi AWS. Tuttavia, assegni un ruolo a un' EC2istanza Amazon anziché a un individuo. Le applicazioni in esecuzione su tale istanza possono quindi acquisire le autorizzazioni concesse dalla policy collegata. Con un ruolo, le credenziali non compaiono mai nel codice, neanche indirettamente. Questo argomento descrive come utilizzare un ruolo IAM per eseguire la ricetta da [Utilizzo dell'SDK per Ruby su un'istanza Vagrant](cookbooks-101-opsworks-s3-vagrant.md) un' EC2 istanza Amazon.

Puoi eseguire questa ricetta con Test Kitchen utilizzando il driver kitchen-ec2, come descritto in [Esempio 9: utilizzo di Amazon EC2 Instances](cookbooks-101-basics-ec2.md). Tuttavia, l'installazione dell'SDK for Ruby EC2 sulle istanze Amazon è piuttosto complicata e non è qualcosa di cui devi preoccuparti per Stacks. OpsWorks Tutte le istanze OpsWorks Stacks Linux hanno l'SDK for Ruby installato per impostazione predefinita. Per semplicità, l'esempio utilizza quindi un'istanza Stacks. OpsWorks 

Il primo passaggio consiste nell'impostare il ruolo IAM. Questo esempio utilizza l'approccio più semplice, che consiste nell'utilizzare il EC2 ruolo Amazon creato da OpsWorks Stacks quando crei il primo stack. È denominato `aws-opsworks-ec2-role`. Tuttavia, OpsWorks Stacks non assegna una policy a quel ruolo, quindi per impostazione predefinita non concede autorizzazioni.

È necessario allegare la `AmazonS3ReadOnlyAccess` politica al `aws-opsworks-ec2-role` ruolo per concedere le autorizzazioni appropriate. Per ulteriori informazioni su come allegare una policy a un ruolo, consulta [Adding IAM identity permissions (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) nella *IAM* User Guide.

Specifica il ruolo durante la creazione o l'aggiornamento di uno stack. Configura uno stack con un livello personalizzato, come descritto in [Esecuzione di una ricetta su un'istanza Linux](cookbooks-101-opsworks-opsworks-instance.md), con un'aggiunta. **Nella pagina **Add Stack**, verifica che il **profilo predefinito dell'istanza IAM** sia impostato su 2 ruoli. aws-opsworks-ec** OpsWorks Stacks assegnerà quindi quel ruolo a tutte le istanze dello stack.

La procedura per la configurazione del libro di ricette è simile a quella utilizzata da [Esecuzione di una ricetta su un'istanza Linux](cookbooks-101-opsworks-opsworks-instance.md). Di seguito è riportato un breve riepilogo. Per i dettagli, fai riferimento a tale esempio.

**Per configurare il libro di ricette**

1. Creare una directory denominata `s3bucket_ops` e accedervi.

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

   ```
   name "s3bucket_ops"
   version "0.1.0"
   ```

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

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

   ```
   Chef::Log.info("******Downloading a file from Amazon S3.******")
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk'
   
       s3 = AWS::S3.new
   
       myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt']
       Dir.chdir("/tmp")
       File.open("myfile.txt", "w") do |f|
         f.syswrite(myfile.read)
         f.close
       end
     end
     action :run
   end
   ```

1. Crea un `.zip` archivio di `s3bucket_ops` e caricalo in un bucket Amazon S3. Per semplicità, [rendere pubblico l'archivio](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html), quindi registrare l'URL dell'archivio per utilizzarlo in futuro. Puoi anche archiviare i tuoi libri di cucina in un archivio privato di Amazon S3 o in diversi altri tipi di repository. Per ulteriori informazioni, consulta [Repository dei libri di ricette](workingcookbook-installingcustom-repo.md).

Questa ricetta è simile a quella utilizzata dall'esempio precedente, con le seguenti eccezioni.
+ Poiché OpsWorks Stacks ha già installato l'SDK for Ruby, la risorsa è stata `chef_gem` eliminata.
+ La ricetta non passa credenziali ad `AWS::S3.new`.

  Le credenziali sono assegnate automaticamente all'applicazione in base al ruolo dell'istanza.
+ La ricetta impiega `Chef::Log.info` per aggiungere un messaggio al log di Chef.

Crea uno stack per questo esempio nel modo seguente. Puoi anche utilizzare uno stack Windows esistente. È sufficiente aggiornare i libri di ricette, come descritto di seguito.

**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: RubySDK**
   + **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:** S3Download
   + **Nome breve**: s3download

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

Ora puoi installare 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****: Http Archive**
   + URL del **repository: l'URL** di 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 **s3bucket\$1ops::default**. Questo comando avvia un'esecuzione di Chef, con un elenco di esecuzione costituito da `s3bucket_ops::default`.
**Nota**  
In genere, fai in modo che OpsWorks Stacks [esegua le tue ricette automaticamente](workingcookbook-assigningcustom.md) assegnandole all'evento del ciclo di vita appropriato. Puoi eseguire tali ricette attivando manualmente l'evento e Puoi utilizzare un comando dello stack per attivare gli eventi Setup e Configure e un [comando di distribuzione](workingapps-deploying.md) per attivare gli eventi Deploy e Undeploy.

Dopo aver eseguito correttamente la ricetta, puoi verificarla.

**Per verificare s3bucket\$1ops**

1. Il primo passaggio consiste nell'esaminare il log di Chef. Lo stack deve disporre di un'istanza denominata opstest1. Nella pagina **Instances (Istanze)** fare clic su **show (mostra)** nella colonna **Log** dell'istanza per visualizzare il log di Chef. Scorrere verso il basso per trovare il messaggio di log.

   ```
   ...
   [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: ******Downloading a file from Amazon S3.******
   [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 `/tmp`.