Verwenden von SDK for Ruby auf einer AWS OpsWorks Stacks-Linux-Instance - AWS OpsWorks

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 von SDK for Ruby auf einer AWS OpsWorks Stacks-Linux-Instance

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 oder über den AWS Premium-Support.

In diesem Thema wird beschrieben, wie Sie die SDK for Ruby on an AWS OpsWorks Stacks Linux-Instance verwenden, um eine Datei aus einem Amazon S3 S3-Bucket herunterzuladen. AWS OpsWorks Stacks installiert SDK for Ruby automatisch auf jeder Linux-Instance. Wenn Sie jedoch das Client-Objekt eines Dienstes erstellen, müssen Sie einen geeigneten Satz von AWS Anmeldeinformationen AWS::S3.new oder etwas Ähnliches für andere Dienste angeben.

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? oder Wie lösche ich einen S3 Bucket?.

Verwendung von SDK for Ruby auf einer Vagrant-Instanz 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 IAMRolle.

IAM-Rollen funktionieren ähnlich wie IAM-Benutzer. Ihr ist eine Richtlinie beigefügt, die Berechtigungen zur Nutzung der verschiedenen AWS Dienste gewährt. 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 Verwendung von SDK for Ruby auf einer Vagrant-Instanz auf einer EC2 Amazon-Instance auszuführen.

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

Zunächst müssen Sie die IAM-Rolle einrichten. In diesem Beispiel wird der einfachste Ansatz verwendet, nämlich die EC2 Amazon-Rolle zu verwenden, die AWS OpsWorks Stacks erstellt, wenn Sie Ihren ersten Stack erstellen. Sie heißt aws-opsworks-ec2-role. AWS 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) im IAMBenutzerhandbuch.

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 beschrieben ein, allerdings mit einem zusätzlichen Schritt. Vergewissern Sie sich auf der Seite „Stack hinzufügen“, dass das IAMStandard-Instanzprofil auf „aws-opsworks-ec2-Rollen“ eingestellt ist. AWS 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 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.

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

    name "s3bucket_ops" version "0.1.0"
  3. Erstellen Sie ein Verzeichnis recipes in s3bucket_ops.

  4. 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
  5. Erstellen Sie ein .zip Archiv von s3bucket_ops und laden Sie das Archiv in einen Amazon S3 S3-Bucket hoch. Der Einfachheit halber sollten Sie das Archiv veröffentlichen und dann die Archive URL für die spätere Verwendung aufzeichnen. 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.

Dieses Rezept ist dem im vorherigen Beispiel verwendeten ähnlich, allerdings mit folgenden Ausnahmen.

  • Da AWS OpsWorks Stacks das SDK für 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 AWS OpsWorks  Stacks-Konsole und klicken Sie auf Add Stack (Stack hinzufügen).

  2. 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 — Ruby SDK

    • SSHStandardschlüssel — Ein EC2 Amazon-Schlüsselpaar

    Wenn Sie ein EC2 Amazon-Schlüsselpaar erstellen müssen, finden Sie weitere Informationen unter EC2Amazon-Schlüsselpaare. Beachten Sie, dass das key pair zu derselben AWS Region gehören muss wie die Instance. Das Beispiel verwendet die Standardregion USA West (Oregon).

  3. Klicken Sie auf Add a layer (Layer hinzufügen) und fügen Sie dem Stack einen benutzerdefinierten Layer 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.

  4. Fügen Sie dem Layer eine 24/7-Instance mit den Standardeinstellungen hinzu und starten Sie sie.

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, und legen Sie folgende Einstellungen fest:

    • Repository-Typ — HTTP-Archiv

    • Repository URL — Das Archiv des KochbuchesURL, das 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.

  2. Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus, 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.

  3. Führen Sie das Rezept aus, indem Sie den Stack-Befehl Execute Recipes ausführen. Achten Sie darauf, dass bei Recipes to execute s3bucket_ops::default eingestellt ist. Durch diesen Befehl wird Chef mit der Option s3bucket_ops::default ausgeführt.

    Anmerkung

    In der Regel lassen Sie AWS OpsWorks Stacks Ihre Rezepte automatisch ausführen, 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.

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

So überprüfen Sie s3bucket_ops
  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) ...
  2. Verwenden Sie diese SSH Option, um sich bei der Instanz anzumelden und den Inhalt von aufzulisten. /tmp