Verwenden von SDK for Ruby auf einem AWS OpsWorks Stapelt die Linux-Instanz - 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 einem AWS OpsWorks Stapelt die Linux-Instanz

Wichtig

Das Tool AWS OpsWorks Stacks Der Dienst hat am 26. Mai 2024 das Ende seiner Nutzungsdauer 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 AWS Support Team ein AWS Re:post oder durch AWS Premium-Support.

Dieses Thema beschreibt, wie Sie SDK for Ruby auf einem AWS OpsWorks Stapelt eine Linux-Instance, um eine Datei aus einem Amazon S3 S3-Bucket herunterzuladen. AWS OpsWorks Stacks installiert das SDK für 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?.

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

Eine IAM Rolle funktioniert ähnlich wie ein 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 Verwenden 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 Sie müssen sich keine Gedanken darüber machen AWS OpsWorks Stapel. Alle AWS OpsWorks Auf Linux-Stacks-Instanzen ist standardmäßig das SDK für Ruby installiert. Der Einfachheit halber verwendet das Beispiel daher eine AWS 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 AWS OpsWorks Stacks wird erstellt, wenn Sie Ihren ersten Stack erstellen. Sie heißt aws-opsworks-ec2-role. Jedoch AWS OpsWorks Stacks fügt dieser Rolle 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.

  • Weil AWS OpsWorks Stacks hat das SDK für Ruby bereits installiert, die chef_gem Ressource wurde 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 AWS OpsWorks Stacks-Konsole und klicken Sie auf 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

    Informationen zum Erstellen eines EC2 Amazon-Schlüsselpaars finden Sie 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 haben Sie AWS OpsWorks Stacks führen Ihre Rezepte automatisch aus, 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