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

Anmerkung

In diesem Beispiel wird davon ausgegangen, dass Sie das Beispiel Ausführen eines Rezepts auf einer Windows-Instance bereits durchgearbeitet haben. Falls Sie das noch nicht getan haben, holen Sie das nun nach. Insbesondere wird beschrieben, wie Sie den RDP Zugriff auf Ihre Instances aktivieren.

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

In diesem Thema wird beschrieben, wie Sie AWS SDK for Rubyauf einem AWS OpsWorks Stapelt eine Windows-Instanz, um eine Datei aus einem S3-Bucket herunterzuladen.

Wenn eine Ruby-Anwendung auf eine AWS Ressource zugreifen muss, müssen Sie ihr eine Reihe von AWS Anmeldeinformationen mit den entsprechenden Berechtigungen zur Verfügung stellen. Für Rezepte ist die beste Option zur Bereitstellung von AWS Anmeldeinformationen die Verwendung eines AWS Identity and Access Management (IAM) Rolle. Eine IAM Rolle funktioniert ähnlich wie ein IAM Benutzer, ihr ist eine Richtlinie angehängt, die Berechtigungen zur Verwendung der verschiedenen AWS Dienste. Sie weisen jedoch einer Amazon Elastic Compute Cloud (AmazonEC2) -Instance statt 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.

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 Windows-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 "s3download" version "0.1.0"
  3. Erstellen Sie ein Verzeichnis recipes in s3download.

  4. Erstellen Sie eine Datei default.rb mit dem folgenden Rezept und speichern Sie sie im Verzeichnis recipes. Ersetzen windows-cookbooks mit dem Namen des S3-Buckets, den Sie zum Speichern der herunterzuladenden Datei verwenden werden.

    Chef::Log.info("******Downloading an object from S3******") chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' Aws.use_bundled_cert! s3_client = Aws::S3::Client.new(region:'us-west-2') s3_client.get_object(bucket: 'windows-cookbooks', key: 'myfile.txt', response_target: '/chef/myfile.txt') end action :run end
  5. Erstellen Sie ein .zip-Archiv von s3download und laden Sie die Datei in einen S3-Bucket hoch. Machen Sie die Datei öffentlich und zeichnen Sie sie URL für die spätere Verwendung auf.

  6. Erstellen Sie eine Textdatei myfile.txt und laden Sie diese auf einen S3-Bucket hoch. Dies ist die Datei, die Ihr Rezept herunterladen soll, Sie können also einen beliebigen Bucket dafür verwenden.

Das Rezept führt die folgenden Aufgaben aus.

1: Installieren Sie das SDK für Ruby v2.

Das Beispiel verwendet SDK for Ruby, um das Objekt herunterzuladen. Jedoch AWS OpsWorks Stacks installiert dies nicht SDK auf Windows-Instanzen, daher verwendet der erste Teil des Rezepts eine chef_gemRessource, um diese Aufgabe zu erledigen. Diese Ressource wird verwendet, um Gems für Chef einschließlich Rezepten zu installieren.

2: Herunterladen der Datei.

Der dritte Teil des Rezepts verwendet eine ruby_blockRessource, um Ruby v2-Code auszuführenSDK, der myfile.txt aus einem S3-Bucket heruntergeladen wird, der in das /chef Verzeichnis der Instanz benannt windows-cookbooks ist. Ändern Sie windows-cookbooks in den Namen des Buckets, der myfile.txt enthält.

Anmerkung

Ein Rezept ist eine Ruby-Anwendung. Sie können daher Ruby-Code in den Text des Rezepts kopieren und müssen ihn nicht in einer ruby_block-Ressource speichern. Chef führt den Ruby-Code im Text des Rezepts jedoch vor anderen Ressourcen aus. Wenn Sie in diesem Beispiel den Download-Code in den Hauptteil des Rezepts einfügen, schlägt er fehl, da er von SDK for Ruby abhängt und die chef_gem Ressource, die das installiert, SDK noch nicht ausgeführt wurde. Der Code in der ruby_block Ressource wird ausgeführt, wenn die Ressource ausgeführt wird, und das passiert, nachdem die chef_gem Ressource SDK für Ruby installiert hat.

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.

Erstellen eines Stacks
  1. Öffnen Sie AWS OpsWorksStacks-Konsole und wähle Stack hinzufügen. Legen Sie die folgenden Einstellungen fest, übernehmen Sie für die restlichen Einstellungen die Standardwerte und wählen Sie Add Stack (Stack hinzufügen) aus.

    • Name — S3Download

    • Region — USA West (Oregon)

      Dieses Beispiel funktioniert in jeder Region, wir empfehlen jedoch, US West (Oregon) für Tutorials zu verwenden.

    • Standardbetriebssystem — Microsoft Windows Server 2012 R2

  2. Wählen Sie Add a layer (Layer hinzufügen) aus und fügen Sie dem Stack einen benutzerdefinierten Layer mit folgenden Einstellungen hinzu:

    • Name — S3Download

    • Kurzname — s3download

  3. Fügen Sie dem Layer „S3Download” 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-TypS3-Archiv.

    • Repository URL — Das Archiv des KochbuchesURL, das Sie zuvor aufgenommen haben.

    Übernehmen Sie für die übrigen Einstellungen die Standardwerte und wählen Sie Save aus, um die Stack-Konfiguration zu aktualisieren und zu speichern.

  2. Führen Sie den Stack-Befehl „Update Custom Cookbooks” aus, um die aktuelle Version Ihres benutzerdefinierten Rezeptbuchs auf den Online-Instances des Stacks 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 s3download::default eingestellt ist. Durch diesen Befehl wird Chef mit der Option s3download::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 s3download
  1. Werfen Sie zunächst einen Blick in das Chef-Protokoll. Der Stack sollte über eine Instance "s3download1" verfügen. Wählen Sie auf der Seite Instances die Option show in der Spalte Log der Instance aus, um das Chef-Protokoll anzuzeigen. Blättern Sie nach unten zu Ihrem Protokolleintrag.

    ... [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0] [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache. [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3****** [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3) [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) ...
  2. Verwenden Sie diese RDP Option, um sich bei der Instanz anzumelden und den Inhalt von zu überprüfen. c:\chef