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

Verwendung von SDK for Ruby auf einer Vagrant-Instanz

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 ein auf einer Vagrant-Instance ausgeführtes Rezept verwendet werden kann AWS SDK for Ruby, um eine Datei von Amazon S3 herunterzuladen. Bevor Sie beginnen, benötigen Sie zunächst eine Reihe von AWS Anmeldeinformationen — einen Zugriffsschlüssel und einen geheimen Zugriffsschlüssel —, die dem Rezept den Zugriff auf Amazon S3 ermöglichen.

Wichtig

Es wird ausdrücklich empfohlen, für diesen Zweck keine Root-Anmeldeinformationen zu verwenden. Erstellen Sie stattdessen einen Benutzer mit einer entsprechenden Richtlinie und geben Sie diese Anmeldeinformationen für das Rezept an.

Achte darauf, Zugangsdaten — auch nicht IAM Benutzeranmeldedaten — nicht an einem öffentlich zugänglichen Ort abzulegen, etwa indem du eine Datei mit den Zugangsdaten in ein öffentliches Repository oder ein Bitbucket-Repository hochlädst. GitHub Dadurch könnten Ihre Anmeldeinformationen offengelegt und die Sicherheit Ihres Kontos beeinträchtigt werden.

Rezepte, die auf einer EC2Amazon EC2 Instanz ausgeführt werden, können einen noch besseren Ansatz verwenden, nämlich eine Rolle, wie unter beschrieben. IAM Verwenden von SDK for Ruby auf einer AWS OpsWorks Stacks-Linux-Instance

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

Wenn Sie noch keinen geeigneten -Benutzer erstellt haben, erstellen Sie ihn wie nachfolgend beschrieben. Weitere Informationen finden Sie unter Was ist IAM.

Warnung

IAMBenutzer verfügen über langfristige Anmeldeinformationen, was ein Sicherheitsrisiko darstellt. Um dieses Risiko zu minimieren, empfehlen wir, diesen Benutzern nur die Berechtigungen zu gewähren, die sie für die Ausführung der Aufgabe benötigen, und diese Benutzer zu entfernen, wenn sie nicht mehr benötigt werden.

So erstellen Sie einen IAM-Benutzer
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die IAM Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im Navigationsbereich Benutzer und gegebenenfalls Benutzer hinzufügen aus, um einen neuen Administratorbenutzer zu erstellen.

  3. Wählen Sie auf der Seite Berechtigungen festlegen die Option Richtlinien direkt anhängen aus.

  4. Geben Sie S3 in das Suchfeld Permissions Policies ein, um die Amazon S3 S3-Richtlinien anzuzeigen.

    Wählen Sie AmazonS3. ReadOnlyAccess Wenn Sie möchten, können Sie eine Richtlinie angeben, die umfassendere Berechtigungen gewährt, z. B. AmazonS3 FullAccess. In der Regel werden jedoch nur die erforderlichen Berechtigungen erteilt. In diesem Fall soll das Rezept nur eine Datei herunterladen und benötigt daher nur Lesezugriff.

  5. Wählen Sie Weiter.

  6. Wählen Sie Benutzer erstellen

  7. Erstellen Sie als Nächstes Zugangsschlüssel für Ihren Benutzer. Weitere Informationen zum Erstellen von Zugriffsschlüsseln finden Sie im Benutzerhandbuch unter Verwaltung von Zugriffsschlüsseln für IAM IAM Benutzer.

Nun müssen Sie eine herunterzuladende Datei bereitstellen. In diesem Beispiel wird davon ausgegangen, dass Sie eine Datei myfile.txt in einem neu erstellten S3-Bucket cookbook_bucket speichern.

So stellen Sie eine Datei zum Herunterladen bereit
  1. Erstellen Sie eine Datei myfile.txt mit folgendem Text und speichern Sie sie auf Ihrem Computer.

    This is the file that you just downloaded from Amazon S3.
  2. Erstellen Sie auf der Amazon S3 S3-Konsole einen Bucket mit dem Namen cookbook_bucket in der Region Standard und laden Sie ihn in myfile.txt den Bucket hoch.

Richten Sie das Rezeptbuch wie folgt ein.

So richten Sie das Rezeptbuch ein
  1. Erstellen Sie ein Verzeichnis in opsworks_cookbooks namens s3bucket und öffnen Sie es.

  2. Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben.

  3. Ersetzen Sie den Text in .kitchen.yml durch folgenden.

    --- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-14.04 suites: - name: s3bucket provisioner: solo_rb: environment: test run_list: - recipe[s3bucket::default] attributes:
  4. Fügen Sie zwei Verzeichnisse zu s3bucket hinzu: recipes und environments.

  5. Erstellen Sie eine Umgebungsdatei test.json mit dem Namen des folgenden default_attributes Abschnitts access_key und ersetzen Sie dabei die secret_key Werte und durch die entsprechenden Schlüssel für Ihren Benutzer. Speichern Sie die Datei im Verzeichnis environments des Rezeptbuchs.

    { "default_attributes" : { "cookbooks_101" : { "access_key": "AKIAIOSFODNN7EXAMPLE", "secret_key" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }

Es gibt mehrere Möglichkeiten, einem Rezept, das auf einer Instance ausgeführt wird, Anmeldeinformationen bereitzustellen. Achten Sie bei der Wahl der richtigen Methode darauf, dass die Schlüssel nicht versehentlich offengelegt werden und somit die Sicherheit Ihres Kontos gefährden. Es wird daher davon ausgeladen, konkrete Schlüsselwerte im Code zu verwenden. In diesem Beispiel werden die Schlüsselwerte stattdessen im Knotenobjekt gespeichert. So kann das Rezept mithilfe der Kontensyntax darauf verweisen, statt die tatsächlichen Werte offenzulegen. Greifen Sie nicht mit Root-Berechtigungen auf das Knotenobjekt zu, um das Risiko, die Schlüssel offenzulegen, möglichst gering zu halten. Weitere Informationen finden Sie unter Bewährte Methoden für die Verwaltung von AWS Zugriffsschlüsseln.

Anmerkung

Im Beispiel werden verschachtelte Attribute mit dem ersten Element cookbooks_101 verwendet. So sind Namensüberschneidungen unwahrscheinlicher, wenn weitere access_key- oder secret_key-Attribute im Knotenobjekt vorhanden sind.

Das folgende Rezept lädt myfile.text aus dem Bucket cookbook_bucket herunter.

gem_package "aws-sdk ~> 3" do action :install end ruby_block "download-object" do block do require 'aws-sdk' s3 = Aws::S3::Client.new( :access_key_id => "#{node['cookbooks_101']['access_key']}", :secret_access_key => "#{node['cookbooks_101']['secret_key']}") myfile = s3.bucket['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.write(myfile.read) f.close end end action :run end

Im ersten Teil des Rezepts wird das Paket SDK for Ruby installiert, bei dem es sich um ein Gem-Paket handelt. Die Ressource gem_package installiert Gems, die von Rezepten oder anderen Anwendungen verwendet werden.

Anmerkung

Auf Ihrer Instance laufen in der Regel zwei unterschiedliche Versionen von Ruby. Eine davon ist eine Dedicated Instance, die vom Chef-Client verwendet wird. Die andere wird von Anwendungen und Rezepten auf der Instance verwendet. Dies ist ein wichtiger Faktor bei der Installation von Gem-Paketen, da es hierfür zwei Ressourcen gibt, gem_package und chef_gem. Wenn Anwendungen oder Rezepte das das Gem-Paket verwenden, müssen Sie es mit gem_package installieren. chef_gem ist nur für Gem-Pakete vorgesehen, die vom Chef-Client verwendet werden.

Das restliche Rezept besteht aus einer ruby_block-Ressource, die Ruby-Code zum Herunterladen der Datei enthält. Möglicherweise gehen Sie davon aus, dass Sie den Code direkt in das Rezept schreiben können, da es sich bei dem Rezept ja um eine Ruby-Anwendung handelt. Chef kompiliert den gesamten Code jedoch vor dem Ausführen von Ressourcen. Wenn Sie den Beispielcode direkt im Rezept speichern, versucht Ruby, die require 'aws-sdk'-Anweisung aufzulösen, bevor die Ressource gem_package ausgeführt wird. Da SDK for Ruby noch nicht installiert wurde, schlägt die Kompilierung fehl.

Der Code in einer ruby_block-Ressource wird hingegen erst dann kompiliert, wenn diese Ressource ausgeführt wird. In diesem Beispiel wird die ruby_block Ressource ausgeführt, nachdem die gem_package Ressource die Installation von SDK for Ruby abgeschlossen hat, sodass der Code erfolgreich ausgeführt wird.

Der Code im ruby_block funktioniert folgendermaßen.

  1. Er erstellt ein neues Aws::S3-Objekt, das die Service-Schnittstelle bereitstellt.

    Der Zugriffsschlüssel und der geheime Schlüssel werden über die im Knotenobjekt gespeicherten Werte referenziert.

  2. Er ruft die Verknüpfung bucket.objects des S3-Objekts auf. Diese gibt ein Aws::S3::Object-Objekt mit dem Namen myfile zurück, das die Datei myfile.txt darstellt.

  3. Mithilfe von Dir.chdir wird das Arbeitsverzeichnis auf /tmp festgelegt.

  4. Er öffnet die Datei myfile.txt, schreibt den Inhalt von myfile in diese Datei und schließt die Datei wieder.

So führen Sie das Rezept aus
  1. Erstellen Sie eine Datei default.rb mit dem Beispielrezept und speichern Sie sie im Verzeichnis recipes.

  2. Führen Sie kitchen converge.

  3. Melden Sie sich mit kitchen login bei der Instance an und führen Sie ls /tmp aus. Die Datei myfile.txt sollte zusammen mit einigen Test Kitchen-Dateien und -Verzeichnissen angezeigt werden.

    vagrant@s3bucket-ubuntu-1204:~$ ls /tmp install.sh kitchen myfile.txt stderr

    Sie können den Inhalt der Datei auch überprüfen, indem Sie cat /tmp/myfile.txt ausführen.

Wenn Sie fertig sind, führen Sie kitchen destroy aus, um die Instance zu beenden.