Sdílet prostřednictvím


Kurz: Připojení k databázi PostgreSQL z kontejnerové aplikace Java Quarkus bez tajných kódů pomocí spravované identity

Azure Container Apps poskytuje spravovanou identitu pro vaši aplikaci, což je řešení pro zabezpečení přístupu ke službě Azure Database for PostgreSQL a dalším službám Azure. Spravované identity v Container Apps usnadňují zabezpečení vaší aplikace odstraněním tajných kódů z vaší aplikace, jako jsou přihlašovací údaje v proměnných prostředí.

Tento kurz vás provede procesem sestavování, konfigurace, nasazování a škálování aplikací kontejnerů Java v Azure. Na konci tohoto kurzu budete mít aplikaci Quarkus , která ukládá data do databáze PostgreSQL se spravovanou identitou spuštěnou ve službě Container Apps.

Co se naučíte:

  • Nakonfigurujte aplikaci Quarkus pro ověření pomocí ID Microsoft Entra s databází PostgreSQL.
  • Vytvořte registr kontejneru Azure a nasdílíte do něj image aplikace v Javě.
  • Vytvoření kontejnerové aplikace v Azure
  • Vytvořte databázi PostgreSQL v Azure.
  • Připojte se k databázi PostgreSQL se spravovanou identitou pomocí konektoru služby.

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

1. Požadavky

2. Vytvoření registru kontejneru

Vytvořte skupinu prostředků pomocí příkazu az group create. Skupina prostředků Azure je logický kontejner, ve kterém se nasazují a spravují prostředky Azure.

Následující příklad vytvoří skupinu prostředků pojmenovanou myResourceGroup v oblasti Azure USA – východ.

az group create --name myResourceGroup --location eastus

Pomocí příkazu az acr create vytvořte instanci registru kontejneru Azure. Název registru musí být v rámci Azure jedinečný, musí obsahovat 5 až 50 alfanumerických znaků. Všechna písmena musí být zadána v malých písmenech. V následujícím příkladu mycontainerregistry007 se používá. Aktualizujte název na jedinečnou hodnotu.

az acr create \
    --resource-group myResourceGroup \
    --name mycontainerregistry007 \
    --sku Basic

3. Naklonujte ukázkovou aplikaci a připravte image kontejneru.

V tomto kurzu se používá ukázková aplikace seznamu ovoce s webovým uživatelským rozhraním, které volá rozhraní REST API Quarkus, které je podporováno službou Azure Database for PostgreSQL. Kód aplikace je k dispozici na GitHubu. Další informace o psaní aplikací v Javě pomocí Quarkus a PostgreSQL najdete v příručce Quarkus Hibernate ORM with Panache Guide a Průvodce zdroji dat Quarkus.

Spuštěním následujících příkazů v terminálu naklonujte ukázkové úložiště a nastavte prostředí ukázkové aplikace.

git clone https://github.com/quarkusio/quarkus-quickstarts
cd quarkus-quickstarts/hibernate-orm-panache-quickstart

Úprava projektu

  1. Přidejte požadované závislosti do souboru kusovníku projektu.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-providers-jdbc-postgresql</artifactId>
        <version>1.0.0-beta.1</version>
    </dependency>
    
  2. Nakonfigurujte vlastnosti aplikace Quarkus.

    Konfigurace Quarkus se nachází v souboru src/main/resources/application.properties . Otevřete tento soubor v editoru a sledujte několik výchozích vlastností. Vlastnosti s předponou %prod jsou používány pouze v případě, že je aplikace sestavena a nasazena, například při nasazení do služby Aplikace Azure Service. Když se aplikace spustí místně, %prod vlastnosti se ignorují. %dev Podobně se vlastnosti používají v živém kódování a vývojovém režimu Quarkus a %test vlastnosti se používají během průběžného testování.

    Odstraňte existující obsah v souboru application.properties a nahraďte ho následujícím kódem a nakonfigurujte databázi pro vývojové, testovací a produkční režimy:

    quarkus.package.type=uber-jar
    
    quarkus.hibernate-orm.database.generation=drop-and-create
    quarkus.datasource.db-kind=postgresql
    quarkus.datasource.jdbc.max-size=8
    quarkus.datasource.jdbc.min-size=2
    quarkus.hibernate-orm.log.sql=true
    quarkus.hibernate-orm.sql-load-script=import.sql
    quarkus.datasource.jdbc.acquisition-timeout = 10
    
    %dev.quarkus.datasource.username=${AZURE_CLIENT_NAME}
    %dev.quarkus.datasource.jdbc.url=jdbc:postgresql://${DBHOST}.postgres.database.azure.com:5432/${DBNAME}?\
    authenticationPluginClassName=com.azure.identity.providers.postgresql.AzureIdentityPostgresqlAuthenticationPlugin\
    &sslmode=require\
    &azure.clientId=${AZURE_CLIENT_ID}\
    &azure.clientSecret=${AZURE_CLIENT_SECRET}\
    &azure.tenantId=${AZURE_TENANT_ID}
    
    %prod.quarkus.datasource.username=${AZURE_MI_NAME}
    %prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${DBHOST}.postgres.database.azure.com:5432/${DBNAME}?\
    authenticationPluginClassName=com.azure.identity.providers.postgresql.AzureIdentityPostgresqlAuthenticationPlugin\
    &sslmode=require
    
    %dev.quarkus.class-loading.parent-first-artifacts=com.azure:azure-core::jar,\
    com.azure:azure-core-http-netty::jar,\
    io.projectreactor.netty:reactor-netty-core::jar,\
    io.projectreactor.netty:reactor-netty-http::jar,\
    io.netty:netty-resolver-dns::jar,\
    io.netty:netty-codec::jar,\
    io.netty:netty-codec-http::jar,\
    io.netty:netty-codec-http2::jar,\
    io.netty:netty-handler::jar,\
    io.netty:netty-resolver::jar,\
    io.netty:netty-common::jar,\
    io.netty:netty-transport::jar,\
    io.netty:netty-buffer::jar,\
    com.azure:azure-identity::jar,\
    com.azure:azure-identity-providers-core::jar,\
    com.azure:azure-identity-providers-jdbc-postgresql::jar,\
    com.fasterxml.jackson.core:jackson-core::jar,\
    com.fasterxml.jackson.core:jackson-annotations::jar,\
    com.fasterxml.jackson.core:jackson-databind::jar,\
    com.fasterxml.jackson.dataformat:jackson-dataformat-xml::jar,\
    com.fasterxml.jackson.datatype:jackson-datatype-jsr310::jar,\
    org.reactivestreams:reactive-streams::jar,\
    io.projectreactor:reactor-core::jar,\
    com.microsoft.azure:msal4j::jar,\
    com.microsoft.azure:msal4j-persistence-extension::jar,\
    org.codehaus.woodstox:stax2-api::jar,\
    com.fasterxml.woodstox:woodstox-core::jar,\
    com.nimbusds:oauth2-oidc-sdk::jar,\
    com.nimbusds:content-type::jar,\
    com.nimbusds:nimbus-jose-jwt::jar,\
    net.minidev:json-smart::jar,\
    net.minidev:accessors-smart::jar,\
    io.netty:netty-transport-native-unix-common::jar
    

Sestavení a nasdílení image Dockeru do registru kontejneru

  1. Sestavte image kontejneru.

    Spuštěním následujícího příkazu sestavte image aplikace Quarkus. Musíte ho označit plně kvalifikovaným názvem přihlašovacího serveru registru. Název přihlašovacího serveru je ve formátu <název>_registru.azurecr.io (musí to být všechna malá písmena), například mycontainerregistry007.azurecr.io. Nahraďte název vlastním názvem registru.

    mvnw quarkus:add-extension -Dextensions="container-image-jib"
    mvnw clean package -Pnative -Dquarkus.native.container-build=true -Dquarkus.container-image.build=true -Dquarkus.container-image.registry=mycontainerregistry007 -Dquarkus.container-image.name=quarkus-postgres-passwordless-app -Dquarkus.container-image.tag=v1
    
  2. Přihlaste se k registru.

    Před nasdílením imagí kontejneru se musíte přihlásit k registru. K tomu použijte příkaz [az acr login][az-acr-login]. Při přihlašování pomocí Azure CLI zadejte pouze název prostředku registru. Nepoužívejte plně kvalifikovaný název přihlašovacího serveru.

    az acr login --name <registry-name>
    

    Příkaz po dokončení vrátí zprávu Login Succeeded (Přihlášení bylo úspěšné).

  3. Nahrajte image do registru.

    Pomocí [docker push][docker-push] odešlete image do instance registru. Nahraďte mycontainerregistry007 názvem přihlašovacího serveru vaší instance registru. Tento příklad vytvoří quarkus-postgres-passwordless-app úložiště obsahující quarkus-postgres-passwordless-app:v1 image.

    docker push mycontainerregistry007/quarkus-postgres-passwordless-app:v1
    

4. Vytvoření kontejnerové aplikace v Azure

  1. Spuštěním následujícího příkazu vytvořte instanci Container Apps. Nezapomeňte nahradit hodnotu proměnných prostředí skutečným názvem a umístěním, které chcete použít.

    RESOURCE_GROUP="myResourceGroup"
    LOCATION="eastus"
    CONTAINERAPPS_ENVIRONMENT="my-environment"
    
    az containerapp env create \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINERAPPS_ENVIRONMENT \
        --location $LOCATION
    
  2. Spuštěním následujícího příkazu vytvořte aplikaci kontejneru s imagí aplikace. Nahraďte zástupné symboly vašimi hodnotami. Podrobnosti o účtu správce registru kontejneru najdete v tématu Ověřování pomocí registru kontejnerů Azure.

    CONTAINER_IMAGE_NAME=quarkus-postgres-passwordless-app:v1
    REGISTRY_SERVER=mycontainerregistry007
    REGISTRY_USERNAME=<REGISTRY_USERNAME>
    REGISTRY_PASSWORD=<REGISTRY_PASSWORD>
    
    az containerapp create \
        --resource-group $RESOURCE_GROUP \
        --name my-container-app \
        --image $CONTAINER_IMAGE_NAME \
        --environment $CONTAINERAPPS_ENVIRONMENT \
        --registry-server $REGISTRY_SERVER \
        --registry-username $REGISTRY_USERNAME \
        --registry-password $REGISTRY_PASSWORD
    

5. Vytvoření a připojení databáze PostgreSQL s připojením identit

Dále vytvořte databázi PostgreSQL a nakonfigurujte aplikaci kontejneru tak, aby se připojila k databázi PostgreSQL se spravovanou identitou přiřazenou systémem. Aplikace Quarkus se připojí k této databázi a při spuštění uloží její data a zachová stav aplikace bez ohledu na to, kde aplikaci spouštíte.

  1. Vytvořte databázovou službu.

    DB_SERVER_NAME='msdocs-quarkus-postgres-webapp-db'
    ADMIN_USERNAME='demoadmin'
    ADMIN_PASSWORD='<admin-password>'
    
    az postgres flexible-server create \
        --resource-group $RESOURCE_GROUP \
        --name $DB_SERVER_NAME \
        --location $LOCATION \
        --admin-user $DB_USERNAME \
        --admin-password $DB_PASSWORD \
        --sku-name GP_Gen5_2
    

    Ve výše uvedeném příkazu Azure CLI se používají následující parametry:

    • skupina prostředků → Použijte stejný název skupiny prostředků, ve které jste vytvořili webovou aplikaci, například msdocs-quarkus-postgres-webapp-rg.

    • název → název databázového serveru PostgreSQL. Tento název musí být jedinečný ve všech Azure (koncový bod serveru se stane https://<name>.postgres.database.azure.com). Povolené znaky jsou A-Z, 0-9a .- Dobrým vzorem je použití kombinace názvu vaší společnosti a identifikátoru serveru. (msdocs-quarkus-postgres-webapp-db)

    • umístění → Použít stejné umístění jako pro webovou aplikaci.

    • uživatelské jméno správce → uživatelské jméno pro účet správce. Nemůže to být azure_superuser, , adminadministrator, root, guest, nebo public. Například demoadmin je v pořádku.

    • heslo správce → heslo správce. Musí obsahovat 8 až 128 znaků ze tří z následujících kategorií: velká písmena anglické abecedy, malá písmena anglické abecedy, číslice a jiné než alfanumerické znaky.

      Důležité

      Při vytváření uživatelských jmen nebo hesel znak nepoužívejte$. Později v tomto kurzu vytvoříte proměnné prostředí s těmito hodnotami, ve kterých $ má znak speciální význam v kontejneru Linuxu, který se používá ke spouštění aplikací v Javě.

    • public-accessNone , který nastaví server v režimu veřejného přístupu bez pravidel brány firewall. Pravidla se vytvoří v pozdějším kroku.

    • název SKU → Název cenové úrovně a konfigurace výpočetních prostředků, například GP_Gen5_2. Další informace najdete v tématu o cenách služby Azure Database for PostgreSQL.

  2. Pomocí tohoto příkazu vytvořte databázi pojmenovanou fruits ve službě PostgreSQL:

    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $DB_SERVER_NAME \
        --database-name fruits
    
  3. Nainstalujte rozšíření bez hesla konektoru služby pro Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  4. Připojte databázi k aplikaci kontejneru pomocí spravované identity přiřazené systémem pomocí příkazu připojení.

    az containerapp connection create postgres-flexible \
        --resource-group $RESOURCE_GROUP \
        --name my-container-app \
        --target-resource-group $RESOURCE_GROUP \
        --server $DB_SERVER_NAME \
        --database fruits \
        --managed-identity
    

6. Kontrola změn

Adresu URL aplikace (FQDN) najdete pomocí následujícího příkazu:

az containerapp list --resource-group $RESOURCE_GROUP

Když se na nové webové stránce zobrazí seznam ovoce, vaše aplikace se připojuje k databázi pomocí spravované identity. Teď byste měli být schopni upravit seznam ovoce jako předtím.

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

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:

az group delete --name myResourceGroup

Spuštění tohoto příkazu může trvat přibližně minut.

Další kroky

Další informace o spouštění aplikací v Javě v Azure najdete v příručce pro vývojáře.