Een Java-toepassing implementeren met Open Liberty in Azure Container Apps
In dit artikel leest u hoe u Open Liberty uitvoert in Azure Container Apps. In dit artikel voert u de volgende activiteiten uit:
- Voer uw Java-, Java EE-, Jakarta EE- of MicroProfile-toepassing uit op de Open Liberty-runtime.
- Bouw de Docker-image van de toepassing met behulp van Liberty-containerimages.
- Implementeer de container-gebaseerde toepassing naar Azure Container Apps.
Zie de projectpagina Open Libertyvoor meer informatie over Open Liberty. Zie de productpagina van WebSphere Libertyvoor meer informatie over IBM WebSphere Liberty.
Dit artikel is bedoeld om u snel te helpen bij de implementatie. Voordat u naar productie gaat, moet u Tuning Liberty verkennen.
Als u feedback wilt geven of nauw wilt samenwerken aan uw migratiescenario's met het technische team dat WebSphere op Azure-oplossingen ontwikkelt, vult u deze korte enquête over WebSphere-migratie in en neemt u uw contactgegevens op. Het team van programmamanagers, architecten en technici neemt onmiddellijk contact met u op om nauwe samenwerking te initiëren.
Voorwaarden
- Een Azure-abonnement. Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Bereid een lokale computer voor waarop Een Windows- of Unix-achtig besturingssysteem is geïnstalleerd, bijvoorbeeld Ubuntu, macOS of Windows-subsysteem voor Linux.
-
Installeer de Azure CLI 2.62.0 of hoger om Azure CLI-opdrachten uit te voeren.
- Meld u aan met Azure CLI met behulp van de opdracht
az login
. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Zie Aanmelden bij Azure met Azure CLI voor andere aanmeldingsopties. - Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Zie Extensies gebruiken en beheren met de Azure CLI voor meer informatie over extensies.
- Voer
az version
uit om de versie en afhankelijke bibliotheken te vinden die zijn geïnstalleerd. Voeraz upgrade
uit om een upgrade uit te voeren naar de nieuwste versie.
- Meld u aan met Azure CLI met behulp van de opdracht
- Installeer een Java SE-implementatieversie 17, bijvoorbeeld Microsoft-build van OpenJDK.
- Installeer Maven 3.9.8 of hoger.
- Zorg ervoor dat Git is geïnstalleerd.
Aanmelden bij Azure
Meld u aan bij uw Azure-abonnement met behulp van de opdracht az login
en volg de aanwijzingen op het scherm.
az login
Notitie
U kunt de meeste Azure CLI-opdrachten in PowerShell op dezelfde wijze uitvoeren als in Bash. Het verschil bestaat alleen wanneer u variabelen gebruikt. In de volgende secties wordt het verschil in verschillende tabbladen behandeld wanneer dat nodig is.
Als er meerdere Azure-tenants zijn gekoppeld aan uw Azure-referenties, moet u opgeven bij welke tenant u zich wilt aanmelden. U kunt de tenant opgeven met behulp van de optie --tenant
, bijvoorbeeld az login --tenant contoso.onmicrosoft.com
.
Als u meerdere abonnementen binnen één tenant hebt, moet u ervoor zorgen dat u bent aangemeld met degene die u wilt gebruiken met behulp van az account set --subscription <subscription-id>
.
Een brongroep maken
Een Azure-resourcegroep is een logische groep waarin Azure-resources worden geïmplementeerd en beheerd.
Maak een resourcegroep met de naam java-liberty-project
met behulp van de opdracht az group create
op de eastus2
locatie. Deze resourcegroep wordt later gebruikt voor het maken van het ACR-exemplaar (Azure Container Registry) en het Azure Container Apps-exemplaar.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
Een ACR-exemplaar maken
Gebruik de opdracht az acr create
om het ACR-exemplaar te maken. In het volgende voorbeeld wordt een ACR-exemplaar gemaakt met de naam youruniqueacrname
. Zorg ervoor dat youruniqueacrname
uniek is binnen Azure.
Notitie
In dit artikel wordt gebruikgemaakt van het aanbevolen verificatiemechanisme zonder wachtwoord voor Container Registry. Het is nog steeds mogelijk om een gebruikersnaam en wachtwoord te gebruiken met docker login
nadat u az acr credential show
hebt gebruikt om de gebruikersnaam en het wachtwoord op te halen. Het gebruik van een gebruikersnaam en wachtwoord is minder veilig dan verificatie zonder wachtwoord.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
Na korte tijd ziet u een JSON-uitvoer die de volgende regels bevat:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Gebruik vervolgens de volgende opdracht om de aanmeldingsserver voor het Container Registry-exemplaar op te halen. U hebt deze waarde nodig wanneer u de toepassingsinstallatiekopieën later implementeert in Azure Container Apps.
export ACR_LOGIN_SERVER=$(az acr show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
Een omgeving maken
Een omgeving in Azure Container Apps maakt een veilige grens rond een groep container-apps. Container Apps die in dezelfde omgeving zijn geïmplementeerd, worden geïmplementeerd in hetzelfde virtuele netwerk en schrijven logboeken naar dezelfde Log Analytics-werkruimte. Gebruik de opdracht az containerapp env create
om een omgeving te maken. In het volgende voorbeeld wordt een omgeving met de naam youracaenvname
gemaakt:
export ACA_ENV=youracaenvname
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_ENV
Als u wordt gevraagd om een extensie te installeren, beantwoordt u Y.
Na korte tijd ziet u een JSON-uitvoer die de volgende regels bevat:
"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",
Een individuele database maken in Azure SQL Database
In deze sectie maakt u één database in Azure SQL Database voor gebruik met uw app.
Gebruik eerst de volgende opdrachten om omgevingsvariabelen met betrekking tot databases in te stellen. Vervang <your-unique-sql-server-name>
door een unieke naam voor uw Azure SQL Database-server.
export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb
Gebruik vervolgens de volgende opdrachten om één database te maken in Azure SQL Database en de huidige aangemelde gebruiker in te stellen als Microsoft Entra-beheerder. Zie Quickstart: Een individuele database maken - Azure SQL Databasevoor meer informatie.
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
Gebruik vervolgens de volgende opdrachten om het lokale IP-adres toe te voegen aan de firewallregels van de Azure SQL Database-server, zodat uw lokale computer verbinding kan maken met de database voor later lokaal testen.
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
Notitie
U maakt een Azure SQL-server met SQL-verificatie uitgeschakeld voor beveiligingsoverwegingen. Alleen Microsoft Entra-id wordt gebruikt voor verificatie bij de server. Zie az sql server create
als u SQL-verificatie wilt inschakelen.
De applicatie-afbeelding configureren en bouwen
Als u uw Liberty-toepassing wilt implementeren en uitvoeren in Azure Container Apps, containeriseert u uw toepassing als een Docker-installatiekopieën met behulp van Open Liberty-containerinstallatiekopieën.
Volg de stappen in deze sectie om de voorbeeldtoepassing te implementeren in de Liberty Runtime. In deze stappen wordt Maven gebruikt.
De toepassing uitchecken
Gebruik de volgende opdrachten om de voorbeeldcode voor te bereiden voor deze handleiding. Het voorbeeld bevindt zich op GitHub.
git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
export BASE_DIR=$PWD
git checkout 20241118
Als u een bericht ziet inzake een detached HEAD
-status, kunt u dit bericht veilig negeren. Het betekent alleen dat je een tag hebt bekeken.
In dit artikel wordt java-app gebruikt. Dit is de bestandsstructuur van de belangrijke bestanden van de toepassing:
java-app
├─ src/main/
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
├─ pom-azure-identity.xml
De directory's java, resources en web-app bevatten de broncode van de voorbeeldtoepassing. De code declareert en gebruikt een gegevensbron met de naam jdbc/JavaEECafeDB
.
In de hoofdmap van de Java-app zijn er twee bestanden om het toepassingsimage te maken met Open Liberty of WebSphere Liberty.
In de map liberty/config wordt het server.xml-bestand gebruikt om de databaseverbinding voor het Open Liberty- en WebSphere Liberty-cluster te configureren. Het definieert een variabele azure.sql.connectionstring
die wordt gebruikt om verbinding te maken met de Azure SQL Database.
Het bestand pom.xml is het POM-bestand (Project Object Model) van Maven dat de configuratiegegevens voor het project bevat. Het bestand pom-azure-identity.xml declareert de azure-identity
afhankelijkheid, die wordt gebruikt voor verificatie bij Azure-services met behulp van Microsoft Entra-id.
Notitie
In dit voorbeeld wordt azure-identity
bibliotheek gebruikt voor verificatie bij Azure SQL Database met behulp van Microsoft Entra-verificatie. Dit wordt aanbevolen voor beveiligingsoverwegingen. Als u SQL-verificatie in uw Liberty-toepassing wilt gebruiken, raadpleegt u Relationele databaseverbindingen met JDBC-.
Het project bouwen
Gebruik de volgende opdrachten om de toepassing te bouwen:
cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
Als de build is geslaagd, ziet u uitvoer die lijkt op het volgende aan het einde van uw build.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------
Als u deze uitvoer niet ziet, kunt u het probleem oplossen voordat u doorgaat.
Uw project lokaal testen
U kunt nu de volgende stappen gebruiken om het project lokaal uit te voeren en te testen voordat u implementeert in Azure. Gebruik voor het gemak de liberty-maven-plugin
. Voor meer informatie over de liberty-maven-plugin
, zie Een webapplicatie bouwen met Maven. Voor uw toepassing kunt u iets soortgelijks doen met behulp van een ander mechanisme, zoals uw lokale IDE.
Notitie
Als u een serverloze database-implementatie hebt geselecteerd, controleert u of uw SQL-database de onderbrekingsmodus niet heeft geactiveerd. Een manier om de verificatie uit te voeren, is door u aan te melden bij de databasequery-editor, zoals beschreven in Quickstart: Query-editor (preview) van Azure Portal gebruiken om een query uit te voeren op Azure SQL Database.
Start de toepassing met behulp van
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
Controleer of de toepassing werkt zoals verwacht. Als dit lukt, ziet u een bericht dat lijkt op
[INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds.
in de opdrachtuitvoer. Ga naarhttp://localhost:9080/
in uw browser om te controleren of de toepassing toegankelijk is en of alle functies werken.Druk op Ctrl+C om te stoppen. Selecteer Y- als u wordt gevraagd de batchtaak te beëindigen.
Wanneer u klaar bent, verwijdert u de firewallregel waarmee uw lokale IP-adres toegang heeft tot de Azure SQL Database met behulp van de volgende opdracht:
az sql server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP
De image bouwen voor Azure Container Apps-deployment
U kunt nu het az acr build
commando uitvoeren om het image te bouwen, zoals getoond in het volgende voorbeeld:
cd $BASE_DIR/java-app
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
Het az acr build
-commando uploadt de artefacten die zijn opgegeven in het Dockerfile naar de Container Registry-instance, bouwt de image en slaat deze op in de Container Registry-instance.
De toepassing implementeren in Azure Container Apps
Gebruik de volgende opdrachten om een Azure Container Apps-exemplaar te maken om de app uit te voeren nadat u de installatiekopie uit de ACR hebt opgehaald. In dit voorbeeld wordt een Azure Container Apps-exemplaar gemaakt met de naam youracainstancename
:
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
Geslaagde uitvoer is een JSON-object met inbegrip van de eigenschap "type": "Microsoft.App/containerApps"
.
Verbind vervolgens de Azure SQL Database-server met de container-app met behulp van Service Connector met behulp van de volgende stappen:
In dit voorbeeld wordt Service Connector gebruikt om verbinding te maken met de database. Zie Wat is Service Connector? installeer de extensie zonder wachtwoord voor de Azure CLI met behulp van de volgende opdracht:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
Verbind de database met de container-app met een door het systeem toegewezen beheerde identiteit met behulp van de volgende opdracht:
az containerapp connection create sql \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACA_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $ACA_NAME \ --client-type java
Geslaagde uitvoer is een JSON-object met inbegrip van de eigenschap
"type": "microsoft.servicelinker/linkers"
.
Notitie
De serviceconnector maakt een geheim in de container-app die de waarde voor AZURE_SQL_CONNECTIONSTRING
bevat. Dit is een verbindingsreeks zonder wachtwoord voor de Azure SQL Database. Zie de voorbeeldwaarde uit de sectie Door de gebruiker toegewezen beheerde identiteit sectie van Azure SQL Database integreren met Service Connectorvoor meer informatie.
De toepassing testen
Gebruik de volgende opdracht om een volledig gekwalificeerde URL op te halen voor toegang tot de toepassing:
echo https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn \
--output tsv)
Als u de toepassing wilt openen en testen, opent u een webbrowser naar de URL. In de volgende schermopname ziet u de actieve toepassing:
Resources opschonen
Om Azure-kosten te voorkomen, moet u overbodige resources opschonen. Wanneer het cluster niet meer nodig is, gebruikt u de opdracht az group delete
om de resourcegroep, het containerregister, de container-apps, de databaseserver en alle gerelateerde resources te verwijderen.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Volgende stappen
Meer informatie vindt u in de verwijzingen die in deze handleiding worden gebruikt:
- Azure Container Apps
- Azure SQL Database integreren met Service Connector
- Verbinding maken met microsoft Entra-verificatie
- Open Liberty
- Open Liberty Server-configuratie
- Liberty Maven Plugin
- Open Liberty Container Images
- WebSphere Liberty-containerafbeeldingen
Als u opties wilt verkennen om WebSphere-producten uit te voeren in Azure, raadpleegt u Wat zijn oplossingen voor het uitvoeren van de WebSphere-producten in Azure?