Sdílet prostřednictvím


Nasazení aplikace v Javě s Open Liberty v Azure Container Apps

V tomto článku se dozvíte, jak spustit Open Liberty v Azure Container Apps. V tomto článku provedete následující aktivity:

  • Spusťte svoji aplikaci Java, Java EE, Jakarta EE nebo MicroProfile v modulu runtime Open Liberty.
  • Sestavte image Dockeru aplikace pomocí imagí kontejneru Liberty.
  • Nasaďte kontejnerizovanou aplikaci do Azure Container Apps.

Další informace o aplikaci Open Liberty naleznete na stránce projektu Open Liberty. Další informace o PRODUKTU IBM WebSphere Liberty naleznete na stránce produktu WebSphere Liberty.

Tento článek vám pomůže rychle se dostat k nasazení. Než půjdete do produkce, měli byste prozkoumat Tuning Liberty.

Pokud chcete poskytnout zpětnou vazbu nebo úzce spolupracovat na scénářích migrace s technickým týmem, který vyvíjí webSphere v řešeních Azure, vyplňte tento krátký průzkum o migraci WebSphere a uveďte své kontaktní informace. Tým programových manažerů, architektů a inženýrů se s vámi okamžitě spojí a zahájí úzkou spolupráci.

Požadavky

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
  • Připravte místní počítač s nainstalovaným operačním systémem Windows nebo Unix – například Ubuntu, macOS nebo Subsystém Windows pro Linux.
  • nainstalujte Azure CLI 2.62.0 nebo novější a spusťte příkazy Azure CLI.
  • Nainstalujte implementaci Java SE verze 17 – například sestavení OpenJDKMicrosoftu .
  • Nainstalujte Maven 3.9.8 nebo novější.
  • Ujistěte se, že je nainstalovaný Git .

Přihlášení k Azure

Přihlaste se ke svému předplatnému Azure pomocí příkazu az login a postupujte podle pokynů na obrazovce.

az login

Poznámka:

Většinu příkazů Azure CLI můžete spustit v PowerShellu stejně jako v Bash. Rozdíl existuje pouze při použití proměnných. V následujících částech je rozdíl v případě potřeby vyřešený na různých kartách.

Pokud máte k přihlašovacím údajům Azure přidružených více tenantů Azure, musíte určit, ke kterému tenantovi se chcete přihlásit. Tenanta můžete zadat pomocí možnosti --tenant , například az login --tenant contoso.onmicrosoft.com.

Pokud máte více předplatných v rámci jednoho tenanta, ujistěte se, že jste přihlášeni pomocí toho předplatného, které chcete použít, prostřednictvím az account set --subscription <subscription-id>.

Vytvoření skupiny zdrojů

Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure.

Vytvořte skupinu prostředků s názvem java-liberty-project pomocí příkazu az group create v umístění eastus2. Tato skupina prostředků se použije později k vytvoření instance služby Azure Container Registry (ACR) a instance Azure Container Apps.

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

Vytvoření instance ACR

K vytvoření instance ACR použijte příkaz az acr create. Následující příklad vytvoří instanci ACR s názvem youruniqueacrname. Ujistěte se, že youruniqueacrname je v rámci Azure jedinečný.

Poznámka:

Tento článek používá doporučený mechanismus ověřování bez hesla pro Container Registry. K získání uživatelského jména a hesla je stále možné použít uživatelské jméno a heslo s docker login po použití az acr credential show. Použití uživatelského jména a hesla je méně bezpečné než ověřování bez hesla.

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

Po krátké době by se měl zobrazit výstup JSON, který obsahuje následující řádky:

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

Dále pomocí následujícího příkazu načtěte přihlašovací server pro instanci container Registry. Tuto hodnotu budete potřebovat, když později nasadíte image aplikace do Azure Container Apps.

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

Vytvořit prostředí

Prostředí v Azure Container Apps vytvoří zabezpečenou hranici kolem skupiny kontejnerových aplikací. KontejnerOvé aplikace nasazené do stejného prostředí se nasazují ve stejné virtuální síti a zapisují protokoly do stejného pracovního prostoru služby Log Analytics. K vytvoření prostředí použijte příkaz az containerapp env create. Následující příklad vytvoří prostředí s názvem youracaenvname:

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

Pokud se zobrazí výzva k instalaci rozšíření, odpovězte na Y.

Po krátké době by se měl zobrazit výstup JSON, který obsahuje následující řádky:

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

Vytvoření izolované databáze ve službě Azure SQL Database

V této části vytvoříte jednoúčelovou databázi ve službě Azure SQL Database pro použití s vaší aplikací.

Nejprve pomocí následujících příkazů nastavte proměnné prostředí související s databází. Nahraďte <your-unique-sql-server-name> jedinečným názvem vašeho serveru Azure SQL Database.

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

Dále pomocí následujících příkazů vytvořte v Azure SQL Database jednu databázi a nastavte aktuální přihlášeného uživatele jako správce Microsoft Entra. Další informace najdete v tématu Rychlý start: Vytvoření izolované databáze – 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

Potom pomocí následujících příkazů přidejte místní IP adresu do pravidel brány firewall serveru služby Azure SQL Database, aby se místní počítač mohl připojit k databázi pro pozdější testování.

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

Poznámka:

Z hlediska zabezpečení vytvoříte Azure SQL server s vypnutým SQL ověřováním. K ověření na serveru se používá pouze ID Microsoft Entra. Pokud potřebujete povolit ověřování SQL, přečtěte si az sql server create.

Konfigurace a sestavení image aplikace

Pokud chcete nasadit a spustit aplikaci Liberty ve službě Azure Container Apps, kontejnerizujte aplikaci jako image Dockeru pomocí open liberty container images.

Podle kroků v této části nasaďte ukázkovou aplikaci do modulu runtime Liberty. Tyto kroky používají Maven.

Podívejte se na aplikaci

Pomocí následujících příkazů připravte vzorový kód pro tuto příručku. Ukázka je na GitHubu.

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

Pokud se zobrazí zpráva o stavu detached HEAD , je tato zpráva bezpečná pro ignorování. Znamená to jen, že jste se podívali na značku.

Tento článek používá java-app. Tady je struktura souborů důležitých souborů aplikace:

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

Adresáře java, resources a webová aplikace obsahují zdrojový kód ukázkové aplikace. Kód deklaruje a používá zdroj dat s názvem jdbc/JavaEECafeDB.

V kořenovém adresáři aplikace v javě existují dva soubory pro vytvoření image aplikace s open Liberty nebo WebSphere Liberty.

V adresáři liberty/config se soubor server.xml používá ke konfiguraci připojení databáze pro cluster Open Liberty a WebSphere Liberty. Definuje proměnnou azure.sql.connectionstring, která se používá pro připojení ke službě Azure SQL Database.

Soubor pom.xml je soubor objektového modelu projektu Maven (POM), který obsahuje informace o konfiguraci projektu. Soubor pom-azure-identity.xml deklaruje závislost azure-identity, která se používá k ověřování ve službách Azure pomocí ID Microsoft Entra.

Poznámka:

Tato ukázka používá knihovnu azure-identity k ověřování ve službě Azure SQL Database pomocí ověřování Microsoft Entra, která se doporučuje pro aspekty zabezpečení. Pokud potřebujete v aplikaci Liberty použít ověřování pomocí SQL, podívejte se na téma Připojení k relační databázi pomocíJDBC.

Sestavení projektu

K sestavení aplikace použijte následující příkazy:

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

Pokud je sestavení úspěšné, měl by se na konci sestavení zobrazit výstup podobný následujícímu.

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

Pokud tento výstup nevidíte, před pokračováním problém vyřešte a vyřešte ho.

Místní testování projektu

Teď můžete pomocí následujících kroků spustit a otestovat projekt místně před nasazením do Azure. Pro usnadnění použití .liberty-maven-plugin Další informace o této liberty-maven-pluginfunkci najdete v tématu Vytvoření webové aplikace pomocí Mavenu. Pro vaši aplikaci můžete udělat něco podobného pomocí jakéhokoli jiného mechanismu, jako je místní integrované vývojové prostředí (IDE).

Poznámka:

Pokud jste vybrali nasazení databáze bez serveru, ověřte, že vaše databáze SQL nepřešla do režimu pozastavení. Jedním ze způsobů, jak provést ověření, je přihlásit se k editoru databázových dotazů, jak je popsáno v rychlém startu : Použití editoru dotazů na webu Azure Portal (Preview) k dotazování služby Azure SQL Database.

  1. Spusťte aplikaci pomocí 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. Ověřte, že aplikace funguje podle očekávání. V případě úspěchu by se ve výstupu příkazu měla zobrazit zpráva podobná [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds.. Přejděte do http://localhost:9080/ v prohlížeči a ověřte, že je aplikace přístupná a že fungují všechny funkce.

  3. Stisknutím kláves Ctrl+C zastavte. Pokud se zobrazí výzva k ukončení dávkové úlohy, vyberte Y.

Po dokončení odstraňte pravidlo brány firewall, které umožňuje vaší místní IP adrese přistupovat ke službě Azure SQL Database pomocí následujícího příkazu:

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

Sestavení image pro nasazení Azure Container Apps

Teď můžete spustit az acr build příkaz pro sestavení image, jak je znázorněno v následujícím příkladu:

cd $BASE_DIR/java-app

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

Příkaz az acr build nahraje artefakty zadané v souboru Dockerfile do instance Container Registry, sestaví image a uloží je v instanci Container Registry.

Nasazení aplikace do Azure Container Apps

Pomocí následujících příkazů vytvořte instanci Azure Container Apps, která spustí aplikaci po načtení image z ACR. Tento příklad vytvoří instanci Azure Container Apps s názvem 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

Úspěšný výstup je objekt JSON včetně vlastnosti "type": "Microsoft.App/containerApps".

Potom pomocí konektoru služby připojte server Služby Azure SQL Database k aplikaci kontejneru pomocí následujícího postupu:

  1. Tato ukázka používá konektor Service Connector k usnadnění připojení k databázi. Další informace o konektoru služby najdete v tématu Co je konektor služby? nainstalujte rozšíření bez hesla pro Azure CLI pomocí následujícího příkazu:

    az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
    
  2. Připojte databázi k aplikaci kontejneru pomocí spravované identity přiřazené systémem pomocí následujícího příkazu:

    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
    

    Úspěšný výstup je objekt JSON včetně vlastnosti "type": "microsoft.servicelinker/linkers".

Poznámka:

Konektor služby vytvoří v aplikaci kontejneru tajný klíč, který obsahuje hodnotu pro AZURE_SQL_CONNECTIONSTRING, což je připojovací řetězec bez hesla ke službě Azure SQL Database. Další informace najdete v ukázkové hodnotě z části uživatelsky přiřazené spravované identity oddílu Integrace služby Azure SQL Database s konektorem služby.

Testování aplikace

K získání plně kvalifikované adresy URL pro přístup k aplikaci použijte následující příkaz:

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

Pokud chcete získat přístup k aplikaci a otestovat ji, otevřete webový prohlížeč na adresu URL. Následující snímek obrazovky ukazuje spuštěnou aplikaci:

Snímek obrazovky znázorňující aplikaci Java liberty úspěšně nasazenou v Azure Container Apps

Vyčištění prostředků

Abyste se vyhnuli poplatkům za Azure, měli byste vyčistit nepotřebné prostředky. Pokud už cluster nepotřebujete, pomocí příkazu az group delete odeberte skupinu prostředků, registr kontejnerů, aplikace kontejnerů, databázový server a všechny související prostředky.

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

Další kroky

Další informace najdete v referenčních informacích použitých v tomto průvodci:

Pokud chcete prozkoumat možnosti spouštění produktů WebSphere v Azure, přečtěte si téma Co jsou řešení pro spuštění řady produktů WebSphere v Azure?