Distribuera ett Java-program med Open Liberty eller WebSphere Liberty i Azure Container Apps
Den här artikeln visar hur du kör Open Liberty eller WebSphere Liberty i Azure Container Apps. Du utför följande aktiviteter i den här artikeln:
- Kör ditt Java-, Java EE-, Jakarta EE- eller MicroProfile-program på Open Liberty- eller WebSphere Liberty-körningen.
- Skapa docker-avbildningen för programmet med hjälp av Liberty-containeravbildningar.
- Distribuera det containerbaserade programmet till Azure Container Apps.
Mer information om Open Liberty finns i open liberty-projektsidan. Mer information om IBM WebSphere Liberty finns i produktsidan WebSphere Liberty.
Den här artikeln är avsedd att hjälpa dig att snabbt komma till distributionen. Innan du går till produktion bör du utforska Tuning Liberty.
Om du är intresserad av att ge feedback eller arbeta nära dina migreringsscenarier med teknikteamet som utvecklar WebSphere på Azure-lösningar kan du fylla i den här korta undersökningen om WebSphere-migrering och inkludera din kontaktinformation. Teamet med programchefer, arkitekter och ingenjörer kommer snabbt att kontakta dig för att initiera ett nära samarbete.
Förutsättningar
- En Azure-prenumeration. Om du inte har en Azure-prenumeration kan du skapa ettkostnadsfritt konto innan du börjar.
- Förbered en lokal dator med antingen Windows- eller Unix-liknande operativsystem installerat , till exempel Ubuntu, macOS eller Windows podsistem za Linux.
-
Installera Azure CLI- 2.62.0 eller senare för att köra Azure CLI-kommandon.
- Logga in med Azure CLI med hjälp av kommandot
az login
. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Se Logga in på Azure med Azure CLI för andra inloggningsalternativ. - När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
- Kör
az version
för att hitta den version och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör duaz upgrade
.
- Logga in med Azure CLI med hjälp av kommandot
- Installera en Java SE-implementeringsversion 17 – till exempel Microsoft-version av OpenJDK.
- Installera Maven 3.9.8 eller senare.
- Kontrollera att Git är installerat.
Logga in på Azure
Logga in på din Azure-prenumeration med hjälp av kommandot az login
och följ anvisningarna på skärmen.
az login
Kommentar
Du kan köra de flesta Azure CLI-kommandon i PowerShell på samma sätt som i Bash. Skillnaden finns bara när du använder variabler. I följande avsnitt åtgärdas skillnaden på olika flikar när det behövs.
Om du har flera Azure-klienter associerade med dina Azure-autentiseringsuppgifter måste du ange vilken klientorganisation du vill logga in på. Du kan specificera hyresgästen med hjälp av alternativet --tenant
– till exempel az login --tenant contoso.onmicrosoft.com
.
Om du har flera prenumerationer hos en och samma hyresgäst, säkerställ att du är inloggad med den du tänker använda genom att använda az account set --subscription <subscription-id>
.
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras.
Skapa en resursgrupp med namnet java-liberty-project
med kommandot az group create
på den eastus2
platsen. Den här resursgruppen används senare för att skapa Azure Container Registry-instansen (ACR) och Azure Container Apps-instansen.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
Skapa en ACR-instans
Använd kommandot az acr create
för att skapa ACR-instansen. I följande exempel skapas en ACR-instans med namnet youruniqueacrname
. Kontrollera att youruniqueacrname
är unikt i Azure.
Kommentar
Den här artikeln använder den rekommenderade mekanismen för lösenordsfri autentisering för Container Registry. Det går fortfarande att använda ett användarnamn och lösenord med docker login
när du har använt az acr credential show
för att hämta användarnamnet och lösenordet. Att använda ett användarnamn och lösenord är mindre säkert än lösenordsfri autentisering.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
Efter en kort tid bör du se en JSON-utdata som innehåller följande rader:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Använd sedan följande kommando för att hämta inloggningsservern för Container Registry-instansen. Du behöver det här värdet när du distribuerar programavbildningen till Azure Container Apps senare.
export ACR_LOGIN_SERVER=$(az acr show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
Skapa en miljö
En miljö i Azure Container Apps skapar en säker gräns runt en grupp med containerappar. Container Apps som distribueras till samma miljö distribueras i samma virtuella nätverk och skriver loggar till samma Log Analytics-arbetsyta. Använd kommandot az containerapp env create
för att skapa en miljö. I följande exempel skapas en miljö med namnet youracaenvname
:
export ACA_ENV=youracaenvname
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_ENV
Om du uppmanas att installera ett tillägg svarar du Y.
Efter en kort tid bör du se en JSON-utdata som innehåller följande rader:
"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",
Skapa en enkel databas i Azure SQL Database
I det här avsnittet skapar du en enkel databas i Azure SQL Database för användning med din app.
Använd först följande kommandon för att ange databasrelaterade miljövariabler. Ersätt <your-unique-sql-server-name>
med ett unikt namn för din Azure SQL Database-server.
export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb
Använd sedan följande kommandon för att skapa en enkel databas i Azure SQL Database och ange den aktuella inloggade användaren som Microsoft Entra-administratör. Mer information finns i Snabbstart: Skapa en enkel databas – Azure SQL Database.
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
Använd sedan följande kommandon för att lägga till den lokala IP-adressen i Azure SQL Database-serverns brandväggsregler så att den lokala datorn kan ansluta till databasen för lokal testning senare.
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
Kommentar
Du skapar en Azure SQL-server med SQL-autentisering inaktiverad av säkerhetsskäl. Endast Microsoft Entra-ID används för att autentisera till servern. Om du behöver aktivera SQL-autentisering kan du läsa az sql server create
.
Konfigurera och skapa programbilden
Om du vill distribuera och köra ditt Liberty-program i Azure Container Apps kan du containerisera ditt program som en Docker-avbildning med hjälp av Open Liberty-containeravbildningar eller WebSphere Liberty-containeravbildningar.
Följ stegen i det här avsnittet för att distribuera exempelprogrammet på Liberty-körningen. De här stegen använder Maven.
Kolla in programmet
Använd följande kommandon för att förbereda exempelkoden för den här guiden. Exemplet finns på 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
Om du ser ett meddelande om att vara i detached HEAD
tillstånd är det här meddelandet säkert att ignorera. Det betyder bara att du kollade en etikett.
Den här artikeln använder java-app. Här är filstrukturen för programmets viktiga filer:
java-app
├─ src/main/
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ Dockerfile-wlp
├─ pom.xml
├─ pom-azure-identity.xml
Katalogerna java, resources och webapp innehåller källkoden för exempelprogrammet. Koden deklarerar och använder en datakälla med namnet jdbc/JavaEECafeDB
.
I java-app-rotkatalogen finns det två filer för att skapa programbilden med antingen Open Liberty eller WebSphere Liberty.
I katalogen liberty/config används server.xml-filen för att konfigurera databasanslutningen för Open Liberty- och WebSphere Liberty-klustret. Den definierar en variabel azure.sql.connectionstring
som används för att ansluta till Azure SQL Database.
Den pom.xml filen är maven-projektobjektmodellen (POM) som innehåller konfigurationsinformationen för projektet. Filen pom-azure-identity.xml deklarerar azure-identity
beroende, som används för att autentisera till Azure-tjänster med hjälp av Microsoft Entra-ID.
Kommentar
Det här exemplet använder azure-identity
-biblioteket för att autentisera till Azure SQL Database med hjälp av Microsoft Entra-autentisering, vilket rekommenderas för säkerhetsöverväganden. Om du behöver använda SQL-autentisering i ditt Liberty-program kan du läsa Relationsdatabasanslutningar med JDBC.
Bygga projektet
Använd följande kommandon för att skapa programmet:
cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
Om bygget lyckas bör du se utdata som liknar följande i slutet av bygget.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------
Om du inte ser dessa utdata kan du felsöka och lösa problemet innan du fortsätter.
Testa projektet lokalt
Du kan nu använda följande steg för att köra och testa projektet lokalt innan du distribuerar till Azure. För enkelhetens skull använder du liberty-maven-plugin
. Mer information om finns i liberty-maven-plugin
Skapa ett webbprogram med Maven. För ditt program kan du göra något liknande med någon annan mekanism, till exempel din lokala IDE.
Kommentar
Om du har valt en "serverlös" databasdistribution kontrollerar du att SQL-databasen inte har angett pausläge. Ett sätt att utföra verifieringen är att logga in på databasfrågeredigeraren enligt beskrivningen i snabbstart: Använd Frågeredigeraren för Azure-portalen (förhandsversion) för att fråga Azure SQL Database.
Starta programmet med .
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
Kontrollera att programmet fungerar som förväntat. Om det lyckas bör du se ett meddelande som liknar
[INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds.
i kommandoutdata. Gå tillhttp://localhost:9080/
i webbläsaren för att kontrollera att programmet är tillgängligt och att alla funktioner fungerar.Tryck på Ctrl+C för att stoppa. Välj Y- om du uppmanas att avsluta batchjobbet.
När du är klar tar du bort brandväggsregeln som gör att din lokala IP-adress kan komma åt Azure SQL Database med hjälp av följande kommando:
az sql server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP
Skapa avbildningen för distribution av Azure Container Apps
Du kan nu köra az acr build
kommandot för att skapa avbildningen, som du ser i följande exempel:
cd $BASE_DIR/java-app
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
Kommandot az acr build
överför artefakterna som anges i Dockerfile till Container Registry-instansen, skapar avbildningen och lagrar den i Container Registry-instansen.
Distribuera programmet till Azure Container Apps
Använd följande kommandon för att skapa en Azure Container Apps-instans för att köra appen när du har hämtat avbildningen från ACR. I det här exemplet skapas en Azure Container Apps-instans med namnet 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
Lyckade utdata är ett JSON-objekt inklusive egenskapen "type": "Microsoft.App/containerApps"
.
Anslut sedan Azure SQL Database-servern till containerappen med hjälp av Service Connector med hjälp av följande steg:
Det här exemplet använder Service Connector för att underlätta anslutningen till databasen. Mer information om Service Connector finns i Vad är Tjänstanslutning? Installera det lösenordslösa tillägget för Azure CLI med hjälp av följande kommando:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
Anslut databasen till containerappen med en systemtilldelad hanterad identitet med hjälp av följande kommando:
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
Lyckade utdata är ett JSON-objekt inklusive egenskapen
"type": "microsoft.servicelinker/linkers"
.
Kommentar
Service Connector skapar en hemlighet i containerappen som innehåller värdet för AZURE_SQL_CONNECTIONSTRING
, som är en lösenordsfri anslutningssträng till Azure SQL Database. Mer information finns i exempelvärdet från avsnittet Användartilldelad hanterad identitet i Integrera Azure SQL Database med Service Connector.
Testa programmet
Använd följande kommando för att hämta en fullständigt kvalificerad URL för att få åtkomst till programmet:
echo https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn \
--output tsv)
Om du vill komma åt och testa programmet öppnar du en webbläsare till URL:en. Följande skärmbild visar det program som körs:
Rensa resurser
För att undvika Azure-avgifter bör du rensa onödiga resurser. När klustret inte längre behövs använder du kommandot az group delete
för att ta bort resursgruppen, containerregistret, containerappar, databasservern och alla relaterade resurser.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Nästa steg
Du kan lära dig mer från de referenser som används i den här guiden:
- Azure Container Apps
- Integrera Azure SQL Database med Service Connector
- Anslut med Microsoft Entra-autentisering
- Öppna Liberty
- Öppna Liberty Server-konfiguration
- Plugin-programmet Liberty Maven
- Öppna Liberty Container Images
- WebSphere Liberty Container Images
Information om alternativ för att köra WebSphere-produkter i Azure finns i Vad är lösningar för att köra WebSphere-serien med produkter i Azure?