Bereitstellen einer Webanwendung auf Amazon EC2

LEITFADEN „ERSTE SCHRITTE“

Modul 2: Automatisieren der Konfiguration

In diesem Modul lernen Sie die Verwendung von Benutzerdaten zur Konfiguration einer EC2-Instance und zur Installation von Softwarepaketen auf der EC2-Instance.

Einführung

Wenn Sie eine Instance in Amazon EC2 starten, haben Sie die Möglichkeit, ihr Benutzerdaten zu übergeben, die zur Durchführung allgemeiner automatischer Konfigurationsaufgaben und sogar zur Ausführung von Skripten nach dem Start der Instance verwendet werden können. Sie werden diese Funktion nutzen, um Ihre Anwendungsbereitstellung zu vereinfachen, indem Sie angeben, welche Software beim ersten Start installiert und konfiguriert werden soll, und die Beispielanwendung in die Instance kopieren. In diesem Modul wird beschrieben, wie die Benutzerdaten erstellt und der im vorherigen Modul erstellten EC2-Instance hinzugefügt werden.

Lerninhalte

  • So werden die Benutzerdaten zur EC2-Instance hinzugefügt
  • Erstellen der Benutzerdaten zur Installation und Konfiguration aller erforderlichen Pakete auf dem Betriebssystem
  • Bereitstellen Ihrer Webanwendung durch Kopieren der Daten in die Instance

 Veranschlagte Zeit

5 Minuten

 Voraussetzungen für das Modul

  • AWS-Konto mit Administratorzugriff**
  • Empfohlener Browser: aktuelle Version von Chrome oder Firefox

[**] Innerhalb der letzten 24 Stunden erstellte Konten haben möglicherweise noch keinen Zugriff auf alle für dieses Tutorial erforderlichen Services.

Implementierung

Hinzufügen von Benutzerdaten zu Ihrer EC2-Instance

Die Beispielwebanwendung, die im Ordner SampleApp gehostet wird, ist eine Python-Anwendung, die Sie bereitstellen werden. Sie erfordert zum Ausführen Nginx und uWSGI. Um diese Komponenten zu installieren, sind mehrere Schritte erforderlich. Zuerst müssen Sie alle Betriebssystempakete installieren, nginx und uwsgi konfigurieren, sicherstellen, dass sie laufen, und die Beispielanwendung in die Instance kopieren. Eine Skriptdatei, die all diese Einrichtungsschritte konfiguriert, ist in SampleApp/configure_amz_linux_sample_app.sh bereitgestellt. Bitte schauen Sie sich die Schritte darin an, wenn Sie mehr darüber wissen möchten, wie die Instance konfiguriert wird.

Um die Webanwendung bereitzustellen, müssen Sie dem CDK Code hinzufügen, der die Konfigurationsdateien und Skripte sowie die Beispiel-App nach S3 kopiert. Sie werden die Konfigurationsskripte konfigurieren. Fügen Sie dazu den folgenden Code in ec2-cdk-stack.ts unterhalb des vorherigen Codes ein:

// Use an asset to allow uploading files to S3, and then download it to the EC2 instance as part of the user data

    // --- Sample App ---
    // Upload the sample app  to S3
    const sampleAppAsset = new s3assets.Asset(this, "SampleAppAsset", {
      path: path.join(__dirname, "../../SampleApp"),
    });

    // Allow EC2 instance to read the file
    sampleAppAsset.grantRead(role);

    // Download the file from S3, and store the full location and filename as a variable
    const sampleAppFilePath = ec2Instance.userData.addS3DownloadCommand({
      bucket: sampleAppAsset.bucket,
      bucketKey: sampleAppAsset.s3ObjectKey,
    });

    // --- Sample App ---

    // --- Configuration Script ---
    // Upload the configuration file to S3
    const configScriptAsset = new s3assets.Asset(this, "ConfigScriptAsset", {
      path: path.join(__dirname, "../../SampleApp/configure_amz_linux_sample_app.sh"),
    });

    // Allow EC2 instance to read the file
    configScriptAsset.grantRead(ec2Instance.role);

    // Download the file from S3, and store the full location and filename as a variable
    const configScriptFilePath = ec2Instance.userData.addS3DownloadCommand({
      bucket: configScriptAsset.bucket,
      bucketKey: configScriptAsset.s3ObjectKey,
    });

    // Add a line to the user data to executy the downloaded file
    ec2Instance.userData.addExecuteFileCommand({
      filePath: configScriptFilePath,
      arguments: sampleAppFilePath,
    });

    // --- Configuration Script ---

Alle Schritte werden dem Benutzerdatenskript Ihrer Instance hinzugefügt und beim ersten Hochfahren der Instance ausgeführt. Es gibt noch einen weiteren Schritt, bevor Sie alles bereitstellen können: das Hinzufügen von Ausgaben zum CDK-Stack, um die SSH-Verbindung zur Instance zu erleichtern. In der obigen Infrastruktur haben Sie einen SSH-Schlüssel erstellt, der in AWS Secret Manager gespeichert ist. Um ihn auf Ihre Workstation herunterzuladen, müssen Sie ihn abrufen. Sie benötigen außerdem die öffentliche IP-Adresse der Instance und den auszuführenden SSH-Befehl. 

Fügen Sie den folgenden Code in den unteren Stack ein:

// Create outputs for connecting

    // Output the public IP address of the EC2 instance
    new cdk.CfnOutput(this, "IP Address", {
      value: ec2Instance.instancePublicIp,
    });

    // Command to download the SSH key
    new cdk.CfnOutput(this, "Download Key Command", {
      value:
        "aws secretsmanager get-secret-value --secret-id ec2-ssh-key/cdk-keypair/private --query SecretString --output text > cdk-key.pem && chmod 400 cdk-key.pem",
    });

    // Command to access the EC2 instance using SSH
    new cdk.CfnOutput(this, "ssh command", {
      value:
        "ssh -i cdk-key.pem -o IdentitiesOnly=yes ec2-user@" +
        ec2Instance.instancePublicIp,
    });

Diese drei Ausgaben zeigen Ihnen Folgendes:

  • Wie Sie den SSH-Schlüssel für den Zugriff auf die Instance herunterladen
  • Die öffentliche IP-Adresse der Instance
  • Einen SSH-Befehl für den Zugriff auf die Instance.

Sie sind nun bereit, den Stack bereitzustellen.

Fazit

In diesem Modul haben Sie gelernt, wie Sie einer EC2-Instance Benutzerdaten hinzufügen, um sie beim ersten Start zu konfigurieren. Sie haben damit alle Abhängigkeiten installiert, nginx und uwsgi konfiguriert und die Beispielanwendung bereitgestellt. Im nächsten Modul werden Sie den Stack und die Beispielanwendung bereitstellen.

Nächstes Thema: Bereitstellen des CDK-Stacks

Lassen Sie uns wissen, wie wir abgeschnitten haben.