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 Enterprise Edition (EE), Jakarta EE nebo MicroProfile v modulu runtime Open Liberty.
  • Sestavte obraz Dockeru aplikace pomocí obrazů kontejneru Liberty.
  • Nasaďte kontejnerizovanou aplikaci do Azure Container Apps.

Další informace o aplikaci Open Liberty naleznete na stránce projektu Open 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 vašich scénářích migrace s technickým týmem, který vyvíjí Javu v řešeních Azure, vyplňte tento krátký průzkum o migraci do Azure 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ř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. Pokud je potřeba, v následujících částech jsou rozdíly řešeny na různých záložká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
export LOCATION=eastus2
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

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 \
    --location $LOCATION \
    --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.

Konfigurujte a sestavte obraz 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 20250327

Pokud se zobrazí zpráva o stavu detached HEAD , je tato zpráva bezpečná pro ignorování. Znamená to jen, že jste zkontrolovali 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
├─ 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 java-app kořenovém adresáři je soubor Dockerfile, který vytvoří obraz aplikace s Open Liberty.

V adresáři liberty/config se soubor server.xml používá ke konfiguraci připojení databáze pro Open 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, nejprve problém odstraňte a poté jej vyřešte, než budete pokračovat.

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 pohodlí použijte 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. Otevřete azure Portal v prohlížeči a přejděte k instanci Azure Container Apps, kterou jste vytvořili v předchozím kroku.
  2. V navigačním podokně vyberte Nastavení>Konektor služby (náhled).
  3. Vyberte Vytvořit. Mělo by se zobrazit automaticky otevírané okno Vytvořit připojení.
  4. V podokně Basic jako typ služby vyberte SQL Database. Jako typ klienta vyberte Javu. U ostatních polí ponechte výchozí hodnoty a pak vyberte Další: Ověřování.
  5. V podokně Ověřování jako Typ ověřování vyberte Spravovaná identita přiřazená systémem a pak vyberte Další: Sítě.
  6. V podokně Sítě vyberte Další: Zkontrolovat a vytvořit.
  7. V podokně Zkontrolovat a vytvořit počkejte, až ověření projde, a pak vyberte Vytvořit v Cloud Shellu. Cloud Shell se otevře a potom spustí příkazy pro vytvoření připojení. Počkejte, až se příkazy dokončí, a zavřete Cloud Shell.

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 naleznete v ukázkové hodnotě z části uživatelsky přiřazená spravovaná identita v části Integrace služby Azure SQL Database se služebním konektorem.

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?