Utilizzo dell'SDK for Ruby AWS OpsWorks su un'istanza Stacks Linux - AWS OpsWorks

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 AWS OpsWorks su un'istanza Stacks Linux

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 AWS Support Team su AWS re:post o tramite Premium AWS Support.

Questo argomento descrive come utilizzare l'SDK for Ruby AWS OpsWorks su un'istanza Stacks Linux per scaricare un file da un bucket Amazon S3. AWS 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? o Come eliminare un bucket S3?.

Utilizzo dell'SDK per Ruby su un'istanza Vagrant 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'istanza Amazon EC2, hai un'opzione ancora migliore, un ruolo IAM.

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'istanza Amazon EC2 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 un'Utilizzo dell'SDK per Ruby su un'istanza Vagrantistanza Amazon EC2.

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

Il primo passaggio consiste nell'impostare il ruolo IAM. Questo esempio utilizza l'approccio più semplice, che consiste nell'utilizzare il ruolo Amazon EC2 creato da AWS OpsWorks Stacks quando crei il primo stack. È denominato aws-opsworks-ec2-role. Tuttavia, AWS OpsWorks Stacks non associa 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) 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, con un'aggiunta. Nella pagina Add Stack, verifica che il profilo predefinito dell'istanza IAM sia impostato su 2 ruoli. aws-opsworks-ec AWS 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. 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.

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

    name "s3bucket_ops" version "0.1.0"
  3. Creare una directory recipes in s3bucket_ops.

  4. 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
  5. Crea un .zip archivio di s3bucket_ops e caricalo in un bucket Amazon S3. Per semplicità, rendere pubblico l'archivio, 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.

Questa ricetta è simile a quella utilizzata dall'esempio precedente, con le seguenti eccezioni.

  • Poiché AWS 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 AWS OpsWorks Stacks e fare clic su Add Stack (Aggiungi stack).

  2. 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 chiavi Amazon EC2

    Se devi creare una coppia di chiavi Amazon EC2, consulta Amazon EC2 Key Pairs. La coppia di chiavi deve appartenere alla stessa regione AWS dell'istanza. L'esempio utilizza la regione predefinita degli Stati Uniti occidentali (Oregon).

  3. Fare clic su Add a layer (Aggiungi un livello) e aggiungere un livello personalizzato 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.

  4. Aggiungere un'istanza 24/7 con impostazioni predefinite al livello e avviarla.

Ora puoi installare ed eseguire la ricetta

Per eseguire la ricetta
  1. Modificare lo stack per abilitare i libri di ricette personalizzati 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.

  2. Eseguire il comando dello stack Update Custom Cookbooks (Aggiorna libri di ricette personalizzati), 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.

  3. Eseguire la ricetta utilizzando il comando dello stack Execute Recipes (Esegui ricette) con Recipes to execute (Ricette da eseguire) impostato su s3bucket_ops::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 AWS OpsWorks Stacks esegua le tue ricette automaticamente 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 per attivare gli eventi Deploy e Undeploy.

Dopo aver eseguito correttamente la ricetta, puoi verificarla.

Per verificare s3bucket_ops
  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) ...
  2. Utilizzare SSH per accedere all'istanza ed elencare i contenuti di /tmp.