

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden des SDK for Ruby auf einer OpsWorks Stacks-Linux-Instance
<a name="cookbooks-101-opsworks-s3-opsworks"></a>

**Wichtig**  
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden deaktiviert. Wir empfehlen Kunden dringend, ihre Workloads so bald wie möglich auf andere Lösungen zu migrieren. Wenn Sie Fragen zur Migration haben, wenden Sie sich an das AWS Support Team auf [AWS re:POST](https://repost.aws/) oder über den [AWS Premium-Support](https://aws.amazon.com/support).

In diesem Thema wird beschrieben, wie Sie das SDK for Ruby auf einer OpsWorks Stacks-Linux-Instance verwenden, um eine Datei aus einem Amazon S3 S3-Bucket herunterzuladen. OpsWorks Stacks installiert das SDK for Ruby automatisch auf jeder Linux-Instanz. Wenn Sie jedoch das Client-Objekt eines Services erstellen, müssen Sie geeignete AWS-Anmeldeinformationen `AWS::S3.new` oder entsprechende Anmeldeinformationen für andere Services bereitstellen.

Inhalte, die an Amazon-S3-Buckets geliefert werden, können Kundeninhalte enthalten. Weitere Informationen zum Entfernen sensibler Daten finden Sie unter [Wie entleere ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) oder [Wie lösche ich einen S3 Bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

 [Verwenden des SDK for Ruby auf einer Vagrant-Instance](cookbooks-101-opsworks-s3-vagrant.md) zeigt, wie Sie Anmeldeinformationen im Knotenobjekt speichern und im Rezeptcode auf die Attribute verweisen, um das Risiko zu minimieren, dass Anmeldeinformationen offengelegt werden. Wenn Sie Rezepte auf einer EC2 Amazon-Instance ausführen, haben Sie eine noch bessere Option, eine [IAM-Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

Eine IAM-Rolle funktioniert ähnlich wie ein IAM-Benutzer. Sie verfügen über eine angehängte Richtlinie, die die Berechtigungen für verschiedene AWS-Services enthält. Sie weisen jedoch einer EC2 Amazon-Instance und nicht einer Einzelperson eine Rolle zu. Anwendungen, die auf einer Instance ausgeführt werden, erhalten die Berechtigungen über die angehängte Richtlinie. Bei der Verwendung von Rollen sind die Anmeldeinformationen weder direkt noch indirekt im Code enthalten. In diesem Thema wird beschrieben, wie Sie eine IAM-Rolle verwenden können, um das Rezept [Verwenden des SDK for Ruby auf einer Vagrant-Instance](cookbooks-101-opsworks-s3-vagrant.md) auf einer EC2 Amazon-Instance auszuführen.

Sie können dieses Rezept wie in [Beispiel 9: Verwenden von EC2 Amazon-Instances](cookbooks-101-basics-ec2.md) beschrieben mit dem kitchen-ec2-Treiber in Test Kitchen ausführen. Die Installation des SDK for Ruby auf EC2 Amazon-Instances ist jedoch etwas kompliziert und nichts, womit Sie sich für OpsWorks Stacks befassen müssen. Auf allen OpsWorks Stacks Linux-Instanzen ist das SDK for Ruby standardmäßig installiert. Der Einfachheit halber verwendet das Beispiel daher eine OpsWorks Stacks-Instanz. 

Der erste Schritt besteht darin, die IAM-Rolle einzurichten. In diesem Beispiel wird der einfachste Ansatz verwendet, nämlich die EC2 Amazon-Rolle zu verwenden, die OpsWorks Stacks erstellt, wenn Sie Ihren ersten Stack erstellen. Sie heißt `aws-opsworks-ec2-role`. OpsWorks Stacks fügt dieser Rolle jedoch keine Richtlinie hinzu und gewährt daher standardmäßig keine Berechtigungen.

Sie müssen die `AmazonS3ReadOnlyAccess` Richtlinie an die `aws-opsworks-ec2-role` Rolle anhängen, um die entsprechenden Berechtigungen zu gewähren. Weitere Informationen zum Anhängen einer Richtlinie an eine Rolle finden Sie unter [Hinzufügen von IAM-Identitätsberechtigungen (Konsole)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) im *IAM-Benutzerhandbuch*.

Sie legen die Rolle beim Erstellen oder Aktualisieren eines Stacks fest. Richten Sie einen Stack mit einem benutzerdefinierten Layer wie in [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) beschrieben ein, allerdings mit einem zusätzlichen Schritt. **Vergewissern **Sie sich auf der Seite „Stack hinzufügen**“, dass das **Standard-IAM-Instanzprofil auf 2 Rollen** festgelegt ist. aws-opsworks-ec** OpsWorks Stacks weist diese Rolle dann allen Instanzen des Stacks zu.

Beim Einrichten des Rezeptbuchs gehen Sie nahezu genauso vor wie unter [Ausführen eines Rezepts auf einer Linux-Instance](cookbooks-101-opsworks-opsworks-instance.md) beschrieben. Nachfolgend finden Sie eine kurze Zusammenfassung. Eine ausführliche Erklärung finden Sie im genannten Beispiel.

**So richten Sie das Rezeptbuch ein**

1. Erstellen Sie ein Verzeichnis `s3bucket_ops` und öffnen Sie es.

1. Erstellen Sie eine Datei `metadata.rb` mit dem folgenden Inhalt und speichern Sie sie unter `s3bucket_ops`.

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

1. Erstellen Sie ein Verzeichnis `recipes` in `s3bucket_ops`.

1. Erstellen Sie eine Datei `default.rb` mit dem folgenden Rezept und speichern Sie sie im Verzeichnis `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. Erstellen Sie ein `.zip` Archiv von `s3bucket_ops` und laden Sie das Archiv in einen Amazon S3 S3-Bucket hoch. Der Einfachheit halber [veröffentlichen Sie das Archiv](https://docs.aws.amazon.com/AmazonS3/latest/UG/EditingPermissionsonanObject.html) und notieren Sie sich die entsprechende URL. Sie können Ihre Kochbücher auch in einem privaten Amazon S3 S3-Archiv oder in verschiedenen anderen Repository-Typen speichern. Weitere Informationen finden Sie unter [Rezeptbuch-Repositorys](workingcookbook-installingcustom-repo.md).

Dieses Rezept ist dem im vorherigen Beispiel verwendeten ähnlich, allerdings mit folgenden Ausnahmen.
+ Da OpsWorks Stacks das SDK for Ruby bereits installiert hat, wurde die `chef_gem` Ressource gelöscht.
+ Das Rezept übergibt keine Anmeldeinformationen an `AWS::S3.new`.

  Die Anmeldeinformationen werden der Anwendung anhand der Rolle der Instance automatisch zugewiesen.
+ Das Rezept verwendet `Chef::Log.info`, um dem Chef-Protokoll eine Meldung hinzuzufügen.

Erstellen Sie wie folgt einen Stack für dieses Beispiel. Sie können auch einen vorhandenen Windows-Stack verwenden. Aktualisieren Sie dafür einfach wie nachfolgend beschrieben die Rezeptbücher.

**So erstellen Sie einen -Stack**

1. Öffnen Sie die [OpsWorks  Stacks-Konsole](https://console.aws.amazon.com/opsworks/) und klicken Sie auf **Add Stack (Stack hinzufügen)**.

1. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und klicken Sie auf **Add Stack (Stack hinzufügen)**.
   + **Name — RubySDK**
   + **Standard-SSH-Schlüssel** — Ein EC2 Amazon-Schlüsselpaar

   Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter [ EC2 Amazon-Schlüsselpaare](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html). Das Schlüsselpaar muss sich in derselben AWS-Region befinden wie die Instance. Das Beispiel verwendet die Standardregion USA West (Oregon).

1. Klicken Sie auf **Add a layer (Layer hinzufügen)** und [fügen Sie dem Stack einen benutzerdefinierten Layer](workinglayers-custom.md) mit folgenden Einstellungen hinzu.
   + **Name** — S3Download
   + **Kurzname** — s3download

   Für Linux-Stacks können Sie einen beliebigen Layer-Typ verwenden. In diesem Beispiel werden jedoch keine der durch die anderen Layer-Typen installierten Pakete benötigt, daher ist es am einfachsten, einen benutzerdefinierten Layer zu verwenden.

1. Fügen Sie dem Layer [eine 24/7-Instance](workinginstances-add.md) mit den Standardeinstellungen hinzu und [starten Sie sie](workinginstances-starting.md).

Jetzt können Sie das Rezept installieren und ausführen.

**So führen Sie das Rezept aus**

1. [Bearbeiten Sie den Stack, um benutzerdefinierte Rezeptbücher zu aktivieren](workingcookbook-installingcustom-enable.md), und legen Sie folgende Einstellungen fest:
   + **Repository-Typ** **— HTTP-Archiv**
   + **Repository-URL** — Die Archiv-URL des Kochbuches, die Sie zuvor aufgenommen haben.

   Verwenden Sie für die übrigen Einstellungen die Standardwerte und klicken Sie auf **Save (Speichern)**, um die Stack-Konfiguration zu aktualisieren und zu speichern.

1. [Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus](workingstacks-commands.md), um die aktuelle Version Ihrer benutzerdefinierten Rezeptbücher auf den Stack-Instances zu installieren. Wenn bereits eine ältere Version der Rezeptbücher installiert ist, werden diese überschrieben.

1. Führen Sie das Rezept aus, indem Sie den Stack-Befehl **Execute Recipes** ausführen. Achten Sie darauf, dass bei **Recipes to execute** **s3bucket\$1ops::default** eingestellt ist. Durch diesen Befehl wird Chef mit der Option `s3bucket_ops::default` ausgeführt.
**Anmerkung**  
Normalerweise lassen Sie OpsWorks Stacks [Ihre Rezepte automatisch ausführen](workingcookbook-assigningcustom.md), indem Sie sie dem entsprechenden Lebenszyklusereignis zuweisen. Sie können diese Rezepte auch durch manuelles Auslösen des Ereignisses ausführen. Verwenden Sie für Einrichtungs- und Konfigurationsereignisse einen Stack-Befehl und für Bereitstellungsereignisse und für Ereignisse zum Aufheben der Bereitstellung einen [Bereitstellungsbefehl](workingapps-deploying.md).

Nachdem das Rezept erfolgreich ausgeführt wurde, können Sie es überprüfen.

**So überprüfen Sie s3bucket\$1ops**

1. Werfen Sie zunächst einen Blick in das Chef-Protokoll. Der Stack sollte über eine Instance "opstest1" verfügen. Klicken Sie auf der Seite **Instances** auf **show** in der Spalte **Log** der Instance, um das Chef-Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrem Protokolleintrag.

   ```
   ...
   [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. [Melden Sie sich über SSH bei der Instance an](workinginstances-ssh.md) und rufen Sie den Inhalt des Verzeichnisses `/tmp` auf.