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
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
Melden Sie sich bei der an AWS Management Console und öffnen Sie die IAM Konsole unter https://console.aws.amazon.com/iam/
. -
Wählen Sie im Navigationsbereich Benutzer und gegebenenfalls Benutzer hinzufügen aus, um einen neuen Administratorbenutzer zu erstellen.
-
Wählen Sie auf der Seite Berechtigungen festlegen die Option Richtlinien direkt anhängen aus.
-
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.
-
Wählen Sie Weiter.
-
Wählen Sie Benutzer erstellen
-
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
-
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.
-
Erstellen Sie auf der Amazon S3 S3-Konsole
einen Bucket mit dem Namen cookbook_bucket
in der Region Standard und laden Sie ihn inmyfile.txt
den Bucket hoch.
Richten Sie das Rezeptbuch wie folgt ein.
So richten Sie das Rezeptbuch ein
-
Erstellen Sie ein Verzeichnis in
opsworks_cookbooks
namenss3bucket
und öffnen Sie es. -
Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben.
-
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:
-
Fügen Sie zwei Verzeichnisse zu
s3bucket
hinzu:recipes
undenvironments
. -
Erstellen Sie eine Umgebungsdatei
test.json
mit dem Namen des folgendendefault_attributes
Abschnittsaccess_key
und ersetzen Sie dabei diesecret_key
Werte und durch die entsprechenden Schlüssel für Ihren Benutzer. Speichern Sie die Datei im Verzeichnisenvironments
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
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_packagegem_package
installieren. chef_gem
ist nur für Gem-Pakete vorgesehen, die vom Chef-Client verwendet werden.
Das restliche Rezept besteht aus einer ruby_blockrequire '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.
-
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.
-
Er ruft die Verknüpfung
bucket.objects
desS3
-Objekts auf. Diese gibt einAws::S3::Object
-Objekt mit dem Namenmyfile
zurück, das die Dateimyfile.txt
darstellt. -
Mithilfe von
Dir.chdir
wird das Arbeitsverzeichnis auf/tmp
festgelegt. -
Er öffnet die Datei
myfile.txt
, schreibt den Inhalt vonmyfile
in diese Datei und schließt die Datei wieder.
So führen Sie das Rezept aus
-
Erstellen Sie eine Datei
default.rb
mit dem Beispielrezept und speichern Sie sie im Verzeichnisrecipes
. -
Führen Sie
kitchen converge
. -
Melden Sie sich mit
kitchen login
bei der Instance an und führen Siels /tmp
aus. Die Dateimyfile.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.