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
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>
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
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
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é).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
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
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.
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 jsouA
-Z
,0
-9
a .-
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
, ,admin
administrator
,root
,guest
, nebopublic
. Napříkladdemoadmin
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-access →
None
, 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.
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
Nainstalujte rozšíření bez hesla konektoru služby pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
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.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro