Megosztás a következőn keresztül:


Oktatóanyag: Csatlakozás a PostgreSQL-adatbázishoz egy Java Quarkus-tárolóalkalmazásból titkos kulcsok nélkül felügyelt identitás használatával

Az Azure Container Apps egy felügyelt identitást biztosít az alkalmazás számára, amely kulcsrakész megoldás az Azure Database for PostgreSQL-hez és más Azure-szolgáltatásokhoz való hozzáférés biztosításához. A Container Apps felügyelt identitásai biztonságosabbá teszik az alkalmazást azáltal, hogy eltávolítják az alkalmazás titkos kulcsait, például a környezeti változók hitelesítő adatait.

Ez az oktatóanyag végigvezeti a Java-tárolóalkalmazások Azure-beli létrehozásának, konfigurálásának, üzembe helyezésének és méretezésének folyamatán. Az oktatóanyag végén egy Quarkus-alkalmazás tárolja az adatokat egy PostgreSQL-adatbázisban, a Container Appsen futó felügyelt identitással.

A következő tudnivalókat fogja elsajátítani:

  • Konfiguráljon egy Quarkus-alkalmazást a Microsoft Entra ID-val történő hitelesítéshez egy PostgreSQL-adatbázissal.
  • Hozzon létre egy Azure-tárolóregisztrációs adatbázist, és küldjön hozzá egy Java-alkalmazásrendszerképet.
  • Tárolóalkalmazás létrehozása az Azure-ban.
  • PostgreSQL-adatbázis létrehozása az Azure-ban.
  • Csatlakozzon egy Felügyelt identitással rendelkező PostgreSQL-adatbázishoz a Service Connector használatával.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

1. Előfeltételek

2. Tárolóregisztrációs adatbázis létrehozása

Hozzon létre egy erőforráscsoportot az az group create paranccsal. Az Azure-erőforráscsoport olyan logikai tároló, amelybe a rendszer üzembe helyezi és kezeli az Azure-erőforrásokat.

Az alábbi példa létrehoz egy, az USA keleti régiójában elnevezett myResourceGroup erőforráscsoportot.

RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"

az group create --name $RESOURCE_GROUP --location $LOCATION

Hozzon létre egy Azure Container Registry-példányt az az acr create paranccsal, és kérje le a bejelentkezési kiszolgálóját az az acr show paranccsal. A regisztrációs adatbázis nevének egyedinek kell lennie az Azure rendszerben, és 5–50 alfanumerikus karaktert kell tartalmaznia. Minden betűt kisbetűvel kell megadni. Az alábbi példában mycontainerregistry007 a rendszer használja. Ezt cserélje le egy egyedi értékre.

REGISTRY_NAME=mycontainerregistry007
az acr create \
    --resource-group $RESOURCE_GROUP \
    --name $REGISTRY_NAME \
    --sku Basic

REGISTRY_SERVER=$(az acr show \
    --name $REGISTRY_NAME \
    --query 'loginServer' \
    --output tsv | tr -d '\r')

3. Klónozza a mintaalkalmazást, és készítse elő a tárolórendszerképet

Ez az oktatóanyag egy gyümölcslista-mintaalkalmazást használ egy webes felhasználói felülettel, amely meghívja az Azure Database for PostgreSQL által támogatott Quarkus REST API-t. Az alkalmazás kódja elérhető a GitHubon. Ha többet szeretne megtudni a Java-alkalmazások Quarkus és PostgreSQL használatával történő írásáról, tekintse meg a Quarkus Hibernate ORM with Panache Guide és a Quarkus Datasource Guide című témakört.

Futtassa az alábbi parancsokat a terminálban a mintaadattár klónozásához és a mintaalkalmazás-környezet beállításához.

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

A projekt módosítása

  1. Adja hozzá a szükséges függőségeket a projekt BOM-fájljához.

    <dependency>
       <groupId>com.azure</groupId>
       <artifactId>azure-identity-extensions</artifactId>
       <version>1.1.20</version>
    </dependency>
    
  2. Konfigurálja a Quarkus-alkalmazás tulajdonságait.

    A Quarkus-konfiguráció az src/main/resources/application.properties fájlban található. Nyissa meg ezt a fájlt a szerkesztőben, és figyelje meg az alapértelmezett tulajdonságokat. Az előtaggal ellátott %prod tulajdonságok csak az alkalmazás létrehozásakor és üzembe helyezésekor használhatók, például Azure-alkalmazás Szolgáltatásban való üzembe helyezéskor. Amikor az alkalmazás helyileg fut, %prod a rendszer figyelmen kívül hagyja a tulajdonságokat. Hasonlóképpen, %dev a tulajdonságokat a Quarkus élő kódolási /fejlesztői módjában, a tulajdonságokat pedig %test a folyamatos tesztelés során használják.

    Törölje az application.properties meglévő tartalmát, és cserélje le a következőre az adatbázis fejlesztési, tesztelési és éles üzemmódokhoz való konfigurálásához:

    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=${CURRENT_USERNAME}
    %dev.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
    authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
    &sslmode=require
    
    %prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME}
    %prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
    authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
    &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-extensions::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,\
    net.java.dev.jna:jna::jar
    

Docker-rendszerkép létrehozása és leküldése a tárolóregisztrációs adatbázisba

  1. Hozza létre a tárolórendszerképet.

    Futtassa a következő parancsot a Quarkus-alkalmazás lemezképének létrehozásához. Meg kell címkéznie a regisztrációs adatbázis bejelentkezési kiszolgálójának teljes nevével.

    CONTAINER_IMAGE=${REGISTRY_SERVER}/quarkus-postgres-passwordless-app:v1
    
    mvn quarkus:add-extension -Dextensions="container-image-jib"
    mvn clean package -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${CONTAINER_IMAGE}
    
  2. Jelentkezzen be a beállításjegyzékbe.

    A tárolólemezképek leküldése előtt be kell jelentkeznie a beállításjegyzékbe. Ehhez használja az [az acr login][az-acr-login] parancsot.

    az acr login --name $REGISTRY_NAME
    

    A parancs a Login Succeeded üzenetet adja vissza, ha befejeződött.

  3. Küldje le az rendszerképet a regisztrációs adatbázisba.

    A [docker push][docker-push] használatával küldje le a lemezképet a beállításjegyzék-példányba. Ez a példa létrehozza a quarkus-postgres-passwordless-app képet tartalmazó adattárat quarkus-postgres-passwordless-app:v1 .

    docker push $CONTAINER_IMAGE
    

4. Tárolóalkalmazás létrehozása az Azure-ban

  1. Hozzon létre egy Container Apps-példányt az alábbi parancs futtatásával. Győződjön meg arról, hogy a környezeti változók értékét lecseréli a használni kívánt tényleges névre és helyre.

    CONTAINERAPPS_ENVIRONMENT="my-environment"
    
    az containerapp env create \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINERAPPS_ENVIRONMENT \
        --location $LOCATION
    
  2. Hozzon létre egy tárolóalkalmazást az alkalmazás lemezképével az alábbi parancs futtatásával:

    APP_NAME=my-container-app
    az containerapp create \
        --resource-group $RESOURCE_GROUP \
        --name $APP_NAME \
        --image $CONTAINER_IMAGE \
        --environment $CONTAINERAPPS_ENVIRONMENT \
        --registry-server $REGISTRY_SERVER \
        --registry-identity system \
        --ingress 'external' \
        --target-port 8080 \
        --min-replicas 1
    

    Feljegyzés

    A lehetőségek --registry-username továbbra --registry-password is támogatottak, de nem ajánlottak, mert az identitásrendszer használata biztonságosabb.

5. PostgreSQL-adatbázis létrehozása és csatlakoztatása identitáskapcsolattal

Ezután hozzon létre egy PostgreSQL-adatbázist, és konfigurálja a tárolóalkalmazást, hogy egy rendszer által hozzárendelt felügyelt identitással rendelkező PostgreSQL-adatbázishoz csatlakozzon. A Quarkus-alkalmazás csatlakozik ehhez az adatbázishoz, és futtatáskor tárolja az adatait, és az alkalmazás állapotának megőrzését, függetlenül attól, hogy hol futtatja az alkalmazást.

  1. Hozza létre az adatbázis-szolgáltatást.

    DB_SERVER_NAME='msdocs-quarkus-postgres-webapp-db'
    
    az postgres flexible-server create \
        --resource-group $RESOURCE_GROUP \
        --name $DB_SERVER_NAME \
        --location $LOCATION \
        --public-access None \
        --sku-name Standard_B1ms \
        --tier Burstable \
        --active-directory-auth Enabled
    

    Feljegyzés

    A lehetőségek --admin-user továbbra --admin-password is támogatottak, de nem ajánlottak, mert az identitásrendszer használata biztonságosabb.

    A fenti Azure CLI-parancs a következő paramétereket használja:

    • erőforráscsoport → Használja ugyanazt az erőforráscsoportnevet, msdocs-quarkus-postgres-webapp-rgamelyben létrehozta a webalkalmazást – például.
    • a PostgreSQL-adatbáziskiszolgáló neve →. Ennek a névnek az összes Azure-ban egyedinek kell lennie (a kiszolgálóvégpont leszhttps://<name>.postgres.database.azure.com). Az engedélyezett karakterek a következőkA-Z: és. 0-9- Jó minta a cégnév és a kiszolgálóazonosító kombinációjának használata. (msdocs-quarkus-postgres-webapp-db)
    • hely → Használja ugyanazt a helyet, amelyet a webalkalmazáshoz használ. Ha nem működik, váltson másik helyre.
    • nyilvános hozzáférésűNone , amely tűzfalszabályok nélkül állítja be a kiszolgálót nyilvános hozzáférési módban. A szabályok egy későbbi lépésben jönnek létre.
    • termékváltozat neve → A tarifacsomag és a számítási konfiguráció neve – például Standard_B1ms. További információkért tekintse meg az Azure Database for PostgreSQL díjszabását.
    • réteg → A kiszolgáló számítási szintje. További információkért tekintse meg az Azure Database for PostgreSQL díjszabását.
    • active-directory-authEnabled a Microsoft Entra-hitelesítés engedélyezéséhez.
  2. Hozzon létre egy, a PostgreSQL szolgáltatásban elnevezett fruits adatbázist a következő paranccsal:

    DB_NAME=fruits
    az postgres flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $DB_SERVER_NAME \
        --database-name $DB_NAME
    
  3. Telepítse a Service Connector jelszó nélküli bővítményét az Azure CLI-hez:

    az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
    
  4. Csatlakoztassa az adatbázist a tárolóalkalmazáshoz egy rendszer által hozzárendelt felügyelt identitással a kapcsolati paranccsal.

    az containerapp connection create postgres-flexible \
        --resource-group $RESOURCE_GROUP \
        --name $APP_NAME \
        --target-resource-group $RESOURCE_GROUP \
        --server $DB_SERVER_NAME \
        --database $DB_NAME \
        --system-identity \
        --container $APP_NAME
    

6. A módosítások áttekintése

Az alkalmazás URL-címét (FQDN) a következő paranccsal találja meg:

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

Amikor az új weblap megjeleníti a gyümölcsök listáját, az alkalmazás a felügyelt identitás használatával csatlakozik az adatbázishoz. Most már a korábbiakhoz hasonlóan szerkesztheti a gyümölcslistát.

Az erőforrások eltávolítása

Az előző lépésekben Azure-erőforrásokat hozott létre egy erőforráscsoportban. Ha várhatóan nem lesz szüksége ezekre az erőforrásokra a jövőben, törölje az erőforráscsoportot a következő parancs Cloud Shellben történő futtatásával:

az group delete --name myResourceGroup

A parancs futtatása egy percig is eltarthat.

Következő lépések

További információ a Java-alkalmazások Azure-on való futtatásáról a fejlesztői útmutatóban.