Dela via


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 du az upgrade.
  • 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-pluginSkapa 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.

  1. 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
    
  2. 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å till http://localhost:9080/ i webbläsaren för att kontrollera att programmet är tillgängligt och att alla funktioner fungerar.

  3. 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:

  1. 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
    
  2. 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:

Skärmbild som visar att Java Liberty-programmet har distribuerats i Azure Container Apps.

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:

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?