Schritt 2.5: Bereitstellen einer App - 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.

Schritt 2.5: Bereitstellen einer App

Wichtig

Der AWS OpsWorks Stacks Service 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.

Bei der IIS-Installation wird ein Verzeichnis C:\inetpub\wwwroot für den Anwendungscode und die zugehörigen Dateien erstellt. Als nächstes installieren Sie eine App in diesem Verzeichnis. Für dieses Beispiel werden Sie eine statische HTML-Homepage, default.html, in C:\inetpub\wwwroot installieren. Dieser allgemeine Ansatz lässt sich einfach auf komplexere Szenarios wie ASP.NET-Anwendungen erweitern.

Sie können die Anwendungsdateien in Ihr Rezeptbuch aufnehmen und sie über install.rb in C:\inetpub\wwwroot kopieren. Beispiele für diese Vorgehensweise finden Sie unter Beispiel 6: Erstellen von Dateien. Dieser Ansatz ist allerdings nicht sonderlich flexibel oder effizient. Es empfiehlt sich daher in der Regel, die Bereitstellung von Rezeptbüchern und Anwendungen zu trennen.

Die bevorzugte Lösung besteht darin, ein separates Bereitstellungsrezept zu implementieren, das den Code der Anwendung und die zugehörigen Dateien aus einem Repository — einem beliebigen Repository, nicht nur dem Cookbook-Repository — abruft und es auf jeder IIS-Serverinstanz installiert. So wird die Bereitstellung von Rezeptbüchern und Anwendungen sauber getrennt, sodass Sie beim Aktualisieren von Anwendungen das Bereitstellungsrezept erneut ausführen können, ohne das Rezeptbuch aktualisieren zu müssen.

In diesem Thema wird gezeigt, wie Sie ein einfaches Bereitstellungsrezept implementieren, über das default.htm auf Ihrem IIS-Server bereitgestellt wird. Sie können diese Beispiel einfach auf komplexere Anwendungen übertragen.

Erstellen der Anwendung und Speichern in einem Repository

Sie können für Ihre Anwendungen ein beliebiges Repository verwenden. Der Einfachheit halber wird default.htm in diesem Beispiel in einem öffentlichen S3-Bucket gespeichert.

So erstellen Sie die Anwendung
  1. Erstellen Sie ein Verzeichnis namens iis-application in einem lokalen Verzeichnis auf Ihrem Computer.

  2. Fügen Sie eine Datei default.htm zu iis-application mit dem folgenden Inhalt hinzu:

    <!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
  3. Erstellen Sie einen S3-Bucket, laden Sie default.htm auf den Bucket hoch und notieren Sie sich die URL. Machen Sie die Datei der Einfachheit halber öffentlich.

    Anmerkung

    Dies ist eine äußerst einfache Anwendung, die Grundprinzipien lassen sich jedoch einfach auf Anwendungen für die Produktion ausweiten.

    • Bei komplexeren Anwendungen mit mehreren Dateien ist es in der Regel einfacher, ein ZIP-Archiv von iis-application zu erstellen und dieses auf Ihren S3-Bucket hochzuladen.

      Diese ZIP-Datei können Sie dann herunterladen und den Inhalt in das entsprechende Verzeichnis extrahieren. So müssen Sie weder mehrere Dateien herunterladen noch eine Verzeichnisstruktur nachbilden.

    • Bei Produktionsanwendungen sollten Sie Ihre Dateien privat halten. Ein Beispiel, wie Sie mit einem Rezept Dateien aus einem privaten S3-Bucket herunterladen, finden Sie unter Verwenden des SDK for Ruby auf einer AWS OpsWorks Stacks-Windows-Instanz.

    • Sie können Anwendungen in jedem geeigneten Repository speichern.

      Anwendungen werden üblicherweise über die öffentliche API eines Repositorys heruntergeladen. In diesem Beispiel wird die Amazon S3 S3-API verwendet. Wenn Sie Ihre Anwendung beispielsweise auf speichern GitHub, können Sie die GitHub API verwenden.

Implementieren eines Rezepts für die Bereitstellung der Anwendung

Fügen Sie ein Rezept namens deploy.rb dem Verzeichnis iis-cookbook recipes hinzu, mit folgendem Inhalt.

chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' #1 # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt' Aws.use_bundled_cert! #2 query = Chef::Search::Query.new app = query.search(:aws_opsworks_app, "type:other").first s3region = app[0][:environment][:S3REGION] s3bucket = app[0][:environment][:BUCKET] s3filename = app[0][:environment][:FILENAME] #3 s3_client = Aws::S3::Client.new(region: s3region) s3_client.get_object(bucket: s3bucket, key: s3filename, response_target: 'C:\inetpub\wwwroot\default.htm') end action :run end

In diesem Beispiel wird SDK for Ruby v2 verwendet, um die Datei herunterzuladen. AWS OpsWorks Stacks installiert dieses SDK jedoch nicht auf Windows-Instanzen, sodass das Rezept mit der chef_gemRessource beginnt, die diese Aufgabe erledigt.

Anmerkung

Die Ressource chef_gem installiert Gems in der Chef-eigenen Ruby-Version. Dies ist die Version, die in Rezepten verwendet wird. Wenn Sie ein Gem für eine systemweite Ruby-Version installieren möchten, verwenden Sie die Ressource gem_package.

Der Großteil des Rezepts ist eine ruby_blockRessource, die einen Block von Ruby-Code ausführt, der das SDK for Ruby zum Herunterladen verwendetdefault.htm. Der Code im ruby_block lässt sich in folgende Bereiche unterteilen, die den durchnummerierten Kommentaren im Codebeispiel entsprechen.

1: Angeben eines Zertifikat-Bundles

Amazon S3 verwendet SSL, sodass Sie ein entsprechendes Zertifikat benötigen, um Objekte aus einem S3-Bucket herunterzuladen. Das SDK for Ruby v2 enthält kein Zertifikatspaket, daher müssen Sie eines bereitstellen und das SDK for Ruby konfigurieren, um es verwenden zu können. AWS OpsWorks Stacks installiert ein Zertifikatspaket nicht direkt, aber es installiert Git, das ein Zertifikatspaket (curl-ca-bundle.crt) enthält. Der Einfachheit halber konfiguriert dieses Beispiel das SDK for Ruby so, dass es das Git-Zertifikatspaket für SSL verwendet. Sie können auch eigene Bundles installieren und das SDK entsprechend konfigurieren.

2: Abrufen der Repository-Daten

Um ein Objekt von Amazon S3 herunterzuladen, benötigen Sie die AWS-Region, den Bucket-Namen und den Schlüsselnamen. Wie nachfolgend beschrieben werden in diesem Beispiel diese Informationen bereitgestellt, indem eine Reihe von Umgebungsvariablen der Anwendung zugeordnet werden. Wenn Sie eine App bereitstellen, fügt AWS OpsWorks Stacks dem Knotenobjekt der Instance eine Reihe von Attributen hinzu. Diese Attribute bestehen aus einer Hash-Tabelle, die die Anwendungskonfiguration einschließlich der Umgebungsvariablen enthält. Die Anwendungsattribute für diese Anwendung im JSON-Format sehen etwa wie folgt aus.

{ "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3", "app_source": { "password": null, "revision": null, "ssh_key": null, "type": "other", "url": null, "user": null }, "attributes": { "auto_bundle_on_deploy": true, "aws_flow_ruby_settings": {}, "document_root": null, "rails_env": null }, "data_sources": [{"type": "None"}], "domains": ["iis_example_app"], "enable_ssl": false, "environment": { "S3REGION": "us-west-2", "BUCKET": "windows-example-app", "FILENAME": "default.htm" }, "name": "IIS-Example-App", "shortname": "iis_example_app", "ssl_configuration": { "certificate": null, "private_key": null, "chain": null }, "type": "other", "deploy": true }

Die Umgebungsvariablen der Anwendung werden im Attribut [:environment] gespeichert. Um diese abzurufen, verwenden Sie eine Chef-Suchanfrage, mit der Sie die Hash-Tabelle der Anwendung abrufen, die im Knoten aws_opsworks_app gespeichert ist. Diese Anwendung hat den Typ other, die Anfrage sucht also nach Anwendungen dieses Typs. Das Rezept nutzt die Tatsache, dass sich auf dieser Instance nur eine Anwendung befindet. Die gewünschte Hash-Tabelle ist also einfach app[0]. Der Einfachheit halber weist das Rezept dann die Region-, Bucket- und Dateinamen Variablen zu.

Weitere Informationen zur Verwendung der Chef-Suche finden Sie unter Abrufen von Attributwerten mit der Chef-Suche.

3: Herunterladen der Datei

Im dritten Teil des Rezepts wird ein S3-Client-Objekt erstellt und mit der Methode get_object die Datei default.htm in das Verzeichnis C:\inetpub\wwwroot der Instance heruntergeladen.

Anmerkung

Ein Rezept ist eine Ruby-Anwendung, der Ruby-Code muss sich also nicht unbedingt in einem ruby_block befinden. Der Code im Text des Rezepts wird jedoch zuerst ausgeführt. Danach werden die Ressourcen der Reihe nach abgearbeitet. Wenn Sie in diesem Beispiel den Download-Code in den Rezepttext einfügen, schlägt dies fehl, da die chef_gem Ressource das SDK for Ruby noch nicht installiert hätte. Der Code in der ruby_block Ressource wird ausgeführt, wenn die Ressource ausgeführt wird, nachdem die chef_gem Ressource das SDK for Ruby installiert hat.

Aktualisieren der Rezeptbücher der Instance

AWS OpsWorks Stacks installiert automatisch benutzerdefinierte Kochbücher auf neuen Instanzen. Sie arbeiten jedoch mit einer bestehenden Instance und müssen Ihr Rezeptbuch daher manuell aktualisieren.

So aktualisieren Sie die Rezeptbücher der Instance
  1. Erstellen Sie ein .zip-Archiv von iis-cookbook und laden Sie es in den S3-Bucket hoch.

    Das vorhandene Rezeptbuch wird dadurch überschrieben. Die URL bleibt jedoch dieselbe, Sie müssen die Stack-Konfiguration also nicht aktualisieren.

  2. Wenn Ihre Instance nicht online ist, starten Sie sie neu.

  3. Wenn die Instance online ist, wählen Sie im Navigationsbereich Stack und dann Run Command (Befehl ausführen) aus.

  4. Wählen Sie für Command (Befehl) Update Custom Cookbooks (Benutzerdefinierte Rezeptbücher aktualisieren) aus. Mit diesem Befehl installieren Sie das aktualisierte Rezeptbuch auf der Instance.

  5. Wählen Sie Update Custom Cookbooks (Benutzerdefinierte Rezeptbücher aktualisieren) aus. Die Ausführung dieses Befehls kann einige Minuten dauern.

Hinzufügen des Rezepts zum benutzerdefinierten IIS-Layer

Wie auch bei install.rb ist die bevorzugte Methode für die Bereitstellung, deploy.rb dem entsprechenden Lebenszyklusereignis zuzuweisen. Rezepte zur Bereitstellung werden normalerweise dem Ereignis "Bereitstellung" zugewiesen und zusammenfassend als Bereitstellungsrezepte bezeichnet. Allein durch die Zuweisung zum Ereignis "Bereitstellung" wird das Ereignis noch nicht ausgelöst. Stattdessen geschieht Folgendes:

  • Bei neuen Instanzen führt AWS OpsWorks Stacks die Deploy-Rezepte automatisch aus, nachdem die Setup-Rezepte abgeschlossen sind, sodass neue Instanzen automatisch über die aktuelle Anwendungsversion verfügen.

  • Bei Online-Instances verwenden Sie einen Bereitstellungsbefehl, um neue oder aktualisierte Anwendungen manuell zu installieren.

    Über diesen Befehl wird ein Bereitstellungsereignis auf den Instances des Stack ausgelöst, das wiederum die Bereitstellungsrezepte ausführt.

So weisen Sie deploy.rb dem Ereignis "Bereitstellung" des Layers zu
  1. Wählen Sie im Navigationsbereich Layers (Ebenen) und dann Recipes (Rezepte) unter Layer IISExample (Ebene IISExample) aus.

  2. Fügen Sie unter Custom Chef Recipes (Benutzerdefinierte Chef-Rezepte) die Zeichenfolge iis-cookbook::deploy dem Rezeptfeld Deploy (Bereitstellen) hinzu und wählen Sie + aus, um der Ebene das Rezept hinzuzufügen.

  3. Wählen Sie Save (Speichern) aus, um die neue Konfiguration zu speichern. Die benutzerdefinierten Bereitstellungsrezepte sollten nun iis-cookbook::deploy enthalten.

Hinzufügen einer Anwendung

Die letzte Aufgabe besteht darin, dem Stack eine App hinzuzufügen, die Ihre Anwendung in der AWS OpsWorks Stacks-Umgebung repräsentiert. Eine App enthält Metadaten wie den Anzeigenamen der Anwendung sowie die Daten, die Sie zum Herunterladen der App aus dem Repository benötigen.

So fügen Sie dem Stack die App hinzu
  1. Wählen Sie im Navigationsbereich Apps (Anwendungen) und dann Add an app (Anwendung hinzufügen) aus.

  2. Konfigurieren Sie die App mit den folgenden Einstellungen.

    • Name — ich IIS-Example-App

    • Repository-TypAndere

    • Umgebungsvariablen — Fügen Sie die folgenden drei Umgebungsvariablen hinzu:

      • S3REGION— Die Region des Buckets (in diesem Fallus-west-1).

      • BUCKET— Der Bucket-Name, z. windows-example-app B.

      • FILENAME— Der Dateiname:default.htm.

  3. Akzeptieren Sie Standardwerte für die übrigen Einstellungen und wählen Sie dann Add App (Anwendung hinzufügen) aus, um dem Stack die Anwendung hinzuzufügen.

Anmerkung

In diesem Beispiel werden die Download-Daten über Umgebungsvariablen bereitgestellt. Ein alternativer Ansatz besteht darin, einen S3-Archive-Repository-Typ zu verwenden und die URL der Datei anzugeben. AWS OpsWorks Stacks fügt die Informationen zusammen mit optionalen Daten wie Ihren AWS-Anmeldeinformationen zum app_source Attribut der App hinzu. Ihr Bereitstellungsrezept muss daraufhin die URL aus den App-Attributen abrufen und daraus die Region, den Bucket-Namen und den Dateinamen extrahieren.

Bereitstellen der App und Öffnen der Anwendung

AWS OpsWorks Stacks stellt Apps automatisch für neue Instances bereit, nicht jedoch für Online-Instances. Da Ihre Instance bereits online ist, müssen Sie die App manuell bereitstellen.

So stellen Sie die App bereit
  1. Wählen Sie im Navigationsbereich Apps (Anwendungen) und dann in der Spalte Actions (Aktionen) der Anwendung deploy (Bereitstellen) aus.

  2. Command (Befehl) muss auf Deploy (Bereitstellen) eingestellt sein. Wählen Sie Deploy (Bereitstellen) rechts unten auf der Seite Deploy App (App bereitstellen). Die Ausführung dieses Befehls kann einige Minuten dauern.

    Nachdem die Bereitstellung abgeschlossen wurde, kehren Sie zur Seite Apps zurück. Die Anzeige Status zeigt in grüner Schrift successful (Erfolgreich) an und neben dem Namen der Anwendung wird die erfolgreiche Bereitstellung durch ein grünes Häkchen dargestellt.

Anmerkung

Windows-Apps haben grundsätzlich den App-Typ Other (Sonstige). Durch die Bereitstellung der App geschieht daher Folgendes:

  • Die Anwendungsdaten werden wie zuvor beschrieben den Stack-Konfigurations- und Bereitstellungsattributen hinzugefügt.

  • Es wird ein Bereitstellungsereignis auf den Instances des Stacks ausgelöst, durch das Ihre benutzerdefinierten Bereitstellungsrezepte ausgeführt werden.

Anmerkung

Weitere Informationen zur Fehlerbehebung bei fehlgeschlagenen Bereitstellungen oder Anwendungen finden Sie unter Debuggen von Rezepten.

Die App ist jetzt installiert. Um sie zu öffnen, wählen Sie Instances (Instances) im Navigationsbereich und dann die öffentliche IP-Adresse der Instance aus. Es wird eine HTTP-Anfrage an die Instance gesendet und es wird in etwa Folgendes in Ihrem Browser angezeigt.