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
- Az Azure CLI 2.45.0-s vagy újabb verziója.
- Git
- Java JDK
- Maven
- Docker
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
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>
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
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}
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.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áratquarkus-postgres-passwordless-app:v1
.docker push $CONTAINER_IMAGE
4. Tárolóalkalmazás létrehozása az Azure-ban
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
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.
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-rg
amelyben 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 lesz
https://<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-auth →
Enabled
a Microsoft Entra-hitelesítés engedélyezéséhez.
- erőforráscsoport → Használja ugyanazt az erőforráscsoportnevet,
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
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
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.