Teilen über


Bereitstellen einer Java-Anwendung mit Open Liberty in Azure-Container-Apps

In diesem Artikel erfahren Sie, wie Sie Open Liberty in Azure-Container-Apps ausführen. Sie führen die folgenden Aktivitäten in diesem Artikel aus:

  • Führen Sie Ihre Java-, Java Enterprise Edition (EE-), Jakarta EE- oder MicroProfile-Anwendung auf der Open Liberty-Laufzeit aus.
  • Erstellen Sie das Docker-Image der Anwendung mithilfe von Liberty-Container-Bildern.
  • Stellen Sie die containerisierte Anwendung in Azure-Container-Apps bereit.

Weitere Informationen zu Open Liberty finden Sie auf der Open Liberty-Projektseite. Dieser Artikel soll Ihnen helfen, schnell zur Bereitstellung zu gelangen. Bevor Sie in die Produktion gehen, sollten Sie Tuning Liberty erkunden.

Wenn Sie Feedback geben oder eng an Ihren Migrationsszenarien mit dem Entwicklungsteam arbeiten möchten, das Java auf Azure-Lösungen entwickelt, füllen Sie diese kurze Umfrage zur Azure-Migration aus, und schließen Sie Ihre Kontaktinformationen ein. Das Team aus Programmmanagern, Architekten und Ingenieuren wird sich umgehend mit Ihnen in Verbindung setzen, um eine enge Zusammenarbeit zu initiieren.

Voraussetzungen

  • Ein Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.
  • Bereiten Sie einen lokalen Computer mit installiertem Windows- oder Unix-ähnlichen Betriebssystem vor , z. B. Ubuntu, macOS oder Windows Subsystem für Linux.
  • Installieren Sie die Azure CLI 2.62.0 oder höher, um Azure CLI-Befehle auszuführen.
    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu finden. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
  • Installieren Sie eine Java Standard Edition (SE)-Implementierung, Version 17 , z. B. Microsoft Build von OpenJDK.
  • Installieren Sie Maven 3.9.8 oder höher.
  • Sicherstellen, dass Git installiert ist

Anmelden bei Azure

Melden Sie sich mit dem az login Befehl bei Ihrem Azure-Abonnement an, und folgen Sie den Anweisungen auf dem Bildschirm.

az login

Hinweis

Sie können die meisten Azure CLI-Befehle in PowerShell wie in Bash ausführen. Es gibt nur einen Unterschied bei der Verwendung von Variablen. In den folgenden Abschnitten wird bei Bedarf in verschiedenen Registerkarten auf die Unterschiede eingegangen.

Wenn Sie mehrere Azure-Mandanten mit Ihren Anmeldeinformationen verknüpft haben, müssen Sie angeben, bei welchem Mandanten Sie sich anmelden möchten. Sie können den Mandanten mit der Option --tenant angeben, zum Beispiel az login --tenant contoso.onmicrosoft.com.

Wenn Sie mehrere Abonnements innerhalb eines einzigen Mandanten haben, stellen Sie sicher, dass Sie mit dem Abonnement angemeldet sind, das Sie verwenden möchten, indem Sie az account set --subscription <subscription-id> nutzen.

Erstellen einer Ressourcengruppe

Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden.

Erstellen Sie eine Ressourcengruppe namens java-liberty-project mithilfe des Befehls „az group create“ am Standort eastus2. Diese Ressourcengruppe wird später zum Erstellen der Azure Container Registry (ACR)-Instanz und der Azure Container Apps-Instanz verwendet.

export RESOURCE_GROUP_NAME=java-liberty-project
export LOCATION=eastus2
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

Erstellen einer ACR-Instanz

Verwenden Sie den az acr create Befehl, um die ACR-Instanz zu erstellen. Im folgenden Beispiel wird eine ACR-Instanz mit dem Namen youruniqueacrnameerstellt. Stellen Sie sicher, dass youruniqueacrname in Azure eindeutig ist.

Hinweis

In diesem Artikel wird der empfohlene kennwortlose Authentifizierungsmechanismus für die Containerregistrierung verwendet. Es ist immer noch möglich, einen Benutzernamen und ein Passwort mit docker login zu verwenden, nachdem Sie az acr credential show verwendet haben, um den Benutzernamen und das Passwort zu erhalten. Die Verwendung eines Benutzernamens und Kennworts ist weniger sicher als die kennwortlose Authentifizierung.

export REGISTRY_NAME=youruniqueacrname
az acr create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --sku Basic

Nach kurzer Zeit sollte eine JSON-Ausgabe angezeigt werden, die die folgenden Zeilen enthält:

"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",

Verwenden Sie als Nächstes den folgenden Befehl, um den Anmeldeserver für die Containerregistrierungsinstanz abzurufen. Sie benötigen diesen Wert, wenn Sie das Anwendungsimage später in den Azure-Container-Apps bereitstellen.

export ACR_LOGIN_SERVER=$(az acr show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv)

Erstellen einer Umgebung

Eine Umgebung in Azure Container Apps erstellt eine sichere Grenze um eine Gruppe von Container-Apps. Container-Apps, die in derselben Umgebung bereitgestellt werden, werden im selben virtuellen Netzwerk bereitgestellt und schreiben Protokolle in denselben Log Analytics-Arbeitsbereich. Verwenden Sie den az containerapp env create Befehl, um eine Umgebung zu erstellen. Im folgenden Beispiel wird eine Umgebung mit dem Namen youracaenvname erstellt:

export ACA_ENV=youracaenvname
az containerapp env create \
    --resource-group $RESOURCE_GROUP_NAME \
    --location $LOCATION \
    --name $ACA_ENV

Wenn Sie aufgefordert werden, eine Erweiterung zu installieren, antworten Sie mit Y.

Nach kurzer Zeit sollte eine JSON-Ausgabe angezeigt werden, die die folgenden Zeilen enthält:

"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",

Erstellen einer einzelnen Datenbank in der Azure SQL-Datenbank

In diesem Abschnitt erstellen Sie eine einzelne Datenbank in der Azure SQL-Datenbank für die Verwendung mit Ihrer App.

Verwenden Sie zunächst die folgenden Befehle, um datenbankbezogene Umgebungsvariablen festzulegen. Ersetzen Sie sie <your-unique-sql-server-name> durch einen eindeutigen Namen für Ihren Azure SQL-Datenbank-Server.

export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb

Verwenden Sie als Nächstes die folgenden Befehle, um eine einzelne Datenbank in azure SQL-Datenbank zu erstellen und den aktuellen angemeldeten Benutzer als Microsoft Entra-Administrator festzulegen. Weitere Informationen finden Sie in der Schnellstartanleitung: Erstellen einer einzelnen Datenbank – Azure SQL-Datenbank.

export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)

az sql server create \
    --name $SQL_SERVER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --enable-ad-only-auth \
    --external-admin-principal-type User \
    --external-admin-name $ENTRA_ADMIN_NAME \
    --external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name $DB_NAME \
    --edition GeneralPurpose \
    --compute-model Serverless \
    --family Gen5 \
    --capacity 2

Verwenden Sie dann die folgenden Befehle, um die lokale IP-Adresse zu den Firewallregeln des Azure SQL-Datenbankservers hinzuzufügen, damit Ihr lokaler Computer später eine Verbindung mit der Datenbank herstellen kann.

export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS

Hinweis

Sie erstellen einen Azure SQL-Server mit deaktivierter SQL-Authentifizierung für Sicherheitsaspekte. Nur Microsoft Entra-ID wird verwendet, um sich beim Server zu authentifizieren. Informationen zum Aktivieren der SQL-Authentifizierung finden Sie unter az sql server create.

Konfigurieren und Erstellen des Anwendungsimages

Um Ihre Liberty-Anwendung in Azure Container-Apps bereitzustellen und auszuführen, containern Sie Ihre Anwendung als Docker-Image mithilfe von Open Liberty-Containerimages.

Führen Sie die Schritte in diesem Abschnitt aus, um die Beispielanwendung in der Liberty-Laufzeit zu implementieren. In diesen Schritten wird Maven verwendet.

Auschecken der Anwendung

Verwenden Sie die folgenden Befehle, um den Beispielcode für dieses Handbuch vorzubereiten. Das Beispiel befindet sich auf GitHub.

git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
export BASE_DIR=$PWD
git checkout 20250327

Wenn eine Meldung darüber angezeigt wird, dass der Zustand detached HEAD lautet, kann diese Nachricht problemlos ignoriert werden. Sie bedeutet nur, dass Sie ein Tag ausgecheckt haben.

In diesem Artikel wird java-app verwendet. Dies ist die Dateistruktur der wichtigen Dateien der Anwendung:

java-app
├─ src/main/
│  ├─ liberty/config/
│  │  ├─ server.xml
│  ├─ java/
│  ├─ resources/
│  ├─ webapp/
├─ Dockerfile
├─ pom.xml
├─ pom-azure-identity.xml

Die Verzeichnisse java, resources und webapp enthalten den Quellcode der Beispielanwendung. Der Code deklariert und verwendet eine Datenquelle mit dem Namen jdbc/JavaEECafeDB.

Im Java-App-Stammverzeichnis gibt es eine Dockerfile-Datei, um das Anwendungsimage mit Open Liberty zu erstellen.

Im Verzeichnis "liberty/config " wird die server.xml Datei verwendet, um die Datenbankverbindung für die Open Liberty zu konfigurieren. Sie definiert eine Variableazure.sql.connectionstring, die zum Herstellen einer Verbindung mit dem Azure SQL-Datenbank verwendet wird.

Die datei pom.xml ist die Datei maven project object model (POM), die die Konfigurationsinformationen für das Projekt enthält. Die dateipom-azure-identity.xml deklariert die azure-identity Abhängigkeit, die zum Authentifizieren bei Azure-Diensten mithilfe der Microsoft Entra-ID verwendet wird.

Hinweis

In diesem Beispiel wird azure-identity die Bibliothek verwendet, um sich bei der Azure SQL-Datenbank mithilfe der Microsoft Entra-Authentifizierung zu authentifizieren, was für Sicherheitsaspekte empfohlen wird. Wenn Sie SQL-Authentifizierung in Ihrer Liberty-Anwendung verwenden müssen, lesen Sie Relationale Datenbankverbindungen mit JDBC.

Erstellen des Projekts

Verwenden Sie die folgenden Befehle, um die Anwendung zu erstellen:

cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources

Wenn der Build erfolgreich ist, sollten Sie am Ende Ihres Builds eine Ausgabe sehen, die der folgenden ähnelt.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------

Wenn diese Ausgabe nicht angezeigt wird, beheben Sie das Problem, bevor Sie fortfahren.

Lokales Testen Ihres Projekts

Sie können jetzt die folgenden Schritte verwenden, um das Projekt vor der Bereitstellung in Azure lokal auszuführen und zu testen. Verwenden Sie der Einfachheit halber liberty-maven-plugin. Weitere Informationen zu liberty-maven-plugin finden Sie unter Erstellen einer Webanwendung mit Maven. Für Ihre Anwendung können Sie ähnliche Aktionen mit jedem anderen Mechanismus ausführen, z. B. Ihrer lokalen IDE.

Hinweis

Wenn Sie eine Datenbankbereitstellung ohne Server ausgewählt haben, stellen Sie sicher, dass Ihre SQL-Datenbank nicht in den Pausenmodus wechselt. Eine Möglichkeit zum Durchführen der Überprüfung besteht darin, sich beim Datenbankabfrage-Editor anzumelden, wie in der Schnellstartanleitung beschrieben: Verwenden Sie den Azure Portal-Abfrage-Editor (Vorschau), um Azure SQL-Datenbank abzufragen.

  1. Starten Sie die Anwendung mithilfe von liberty:run.

    cd $BASE_DIR/java-app
    
    # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by the configuration variable azure.sql.connectionstring in server.xml.
    export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault"
    mvn liberty:run
    
  2. Überprüfen Sie, dass die Anwendung wie erwartet funktioniert. Bei erfolgreicher Ausführung sollte eine Meldung wie [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds. in der Befehlsausgabe angezeigt werden. Wechseln Sie zu http://localhost:9080/ in Ihrem Browser, um zu überprüfen, ob die Anwendung erreichbar ist und alle Funktionen funktionieren.

  3. Drücken Sie STRG+C, um zu beenden. Wählen Sie Y aus, wenn Sie aufgefordert werden, den Batchauftrag zu beenden.

Wenn Sie fertig sind, löschen Sie die Firewallregel, mit der Ihre lokale IP-Adresse auf die Azure SQL-Datenbank zugreifen kann, indem Sie den folgenden Befehl verwenden:

az sql server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --server $SQL_SERVER_NAME \
    --name AllowLocalIP

Erstellen des Images für die Bereitstellung von Azure-Container-Apps

Sie können nun den az acr build-Befehl ausführen, um das Image, wie im folgenden Beispiel dargestellt, zu erstellen:

cd $BASE_DIR/java-app

az acr build \
    --registry ${REGISTRY_NAME} \
    --image javaee-cafe:v1 \
    .

Mit az acr build dem Befehl werden die in der Dockerfile-Datei angegebenen Artefakte in die Containerregistrierungsinstanz hochgeladen, das Image erstellt und in der Containerregistrierungsinstanz gespeichert.

Bereitstellen der Anwendung in Azure Container Apps

Verwenden Sie die folgenden Befehle, um eine Azure Container Apps-Instanz zu erstellen, um die App nach dem Abrufen des Images aus dem ACR auszuführen. In diesem Beispiel wird eine Azure Container Apps-Instanz mit dem Namen youracainstancename erstellt.

export ACA_NAME=youracainstancename
az containerapp create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
    --environment $ACA_ENV \
    --registry-server $ACR_LOGIN_SERVER \
    --registry-identity system \
    --target-port 9080 \
    --ingress 'external' \
    --min-replicas 1

Die erfolgreiche Ausgabe ist ein JSON-Objekt, einschließlich der Eigenschaft "type": "Microsoft.App/containerApps".

Verbinden Sie dann den Azure SQL-Datenbankserver mithilfe von Service Connector mit der Container-App, indem Sie die folgenden Schritte ausführen:

  1. Öffnen Sie das Azure-Portal in Ihrem Browser, und navigieren Sie zur Azure-Container-Apps-Instanz, die Sie im vorherigen Schritt erstellt haben.
  2. Wählen Sie im Navigationsbereich Einstellungen>Service Connector (Vorschau) aus.
  3. Klicken Sie auf Erstellen. Das Popupfenster "Verbindung erstellen" sollte angezeigt werden.
  4. Wählen Sie im Bereich Grundlegend für DiensttypSQL-Datenbank aus. Wählen Sie für den ClienttypJava aus. Behalten Sie andere Felder bei ihren Standardwerten bei, und wählen Sie dann "Weiter: Authentifizierung" aus.
  5. Wählen Sie im Authentifizierungsbereich für den Authentifizierungstyp die vom System zugewiesene verwaltete Identität und dann "Weiter: Netzwerk" aus.
  6. Wählen Sie im Netzwerkbereich"Weiter: Überprüfen + erstellen" aus.
  7. Warten Sie im Bereich "Überprüfen und Erstellen ", bis die Überprüfung erfolgreich ist, und wählen Sie dann "Auf Cloud Shell erstellen" aus. Die Cloud Shell wird geöffnet und führt dann die Befehle aus, um die Verbindung zu erstellen. Warten Sie, bis die Befehle abgeschlossen sind, und schließen Sie dann die Cloud Shell.

Hinweis

Der Service Connector erstellt ein Geheimnis in der Container-App, das den Wert für AZURE_SQL_CONNECTIONSTRING enthält, der eine passwortfreie Verbindungszeichenfolge zur Azure SQL-Datenbank ist. Weitere Informationen finden Sie im Beispielwert aus dem Abschnitt " Vom Benutzer zugewiesene verwaltete Identität " der Integration von Azure SQL-Datenbank in Service Connector.

Testen der Anwendung

Verwenden Sie den folgenden Befehl, um eine vollqualifizierte URL für den Zugriff auf die Anwendung abzurufen:

echo https://$(az containerapp show \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $ACA_NAME \
    --query properties.configuration.ingress.fqdn \
    --output tsv)

Um auf die Anwendung zuzugreifen und sie zu testen, öffnen Sie einen Webbrowser mit der URL. Der folgende Screenshot zeigt die ausgeführte Anwendung:

Screenshot der Java Liberty-Anwendung, die erfolgreich in Azure-Container-Apps bereitgestellt wurde.

Bereinigen von Ressourcen

Zum Vermeiden von Azure-Gebühren sollten Sie nicht benötigte Ressourcen bereinigen. Wenn der Cluster nicht mehr benötigt wird, verwenden Sie den az group delete Befehl, um die Ressourcengruppe, containerregistrierung, Container-Apps, Datenbankserver und alle zugehörigen Ressourcen zu entfernen.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Nächste Schritte

Weitere Informationen zu den in diesem Handbuch verwendeten Verweisen finden Sie hier:

Informationen zu Optionen zum Ausführen von WebSphere-Produkten auf Azure finden Sie unter Welche Lösungen gibt es zum Ausführen der WebSphere-Produktfamilie auf Azure?