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 máte aplikaci Quarkus, která ukládá data do databáze PostgreSQL se spravovanou identitou spuštěnou v 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.
RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
az group create --name $RESOURCE_GROUP --location $LOCATION
Pomocí příkazu az acr create vytvořte instanci registru kontejneru Azure a pomocí příkazu az acr show načtěte svůj přihlašovací server. Název registru musí být jedinečný v rámci Azure a 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.
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. 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 POM projektu.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.1.20</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.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
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.
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}
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].
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.
Slouží
docker push
k nasdílení image do instance registru. Tento příklad vytvoříquarkus-postgres-passwordless-app
úložiště obsahujícíquarkus-postgres-passwordless-app:v1
image.docker push $CONTAINER_IMAGE
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.
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:
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
Poznámka:
Možnosti
--registry-username
a--registry-password
jsou stále podporované, ale nedoporučuje se, protože používání systému identit je bezpečnější.
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 ukládá její data při spuštění a uchovává 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' 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
Poznámka:
Možnosti
--admin-user
a--admin-password
jsou stále podporované, ale nedoporučuje se, protože používání systému identit je bezpečnější.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 ,
msdocs-quarkus-postgres-webapp-rg
například . - 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. Pokud nefunguje, změňte ho na jiné umístění.
- 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
Standard_B1ms
. Další informace najdete v tématu o cenách služby Azure Database for PostgreSQL. - úroveň → Výpočetní úroveň serveru. Další informace najdete v tématu o cenách služby Azure Database for PostgreSQL.
- ověřování active-directory-auth →
Enabled
k povolení ověřování Microsoft Entra.
- skupina prostředků → Použijte stejný název skupiny prostředků, ve které jste vytvořili webovou aplikaci ,
Pomocí tohoto příkazu vytvořte databázi pojmenovanou
fruits
ve službě PostgreSQL:DB_NAME=fruits az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $DB_SERVER_NAME \ --database-name $DB_NAME
Nainstalujte rozšíření bez hesla konektoru služby pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
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 $APP_NAME \ --target-resource-group $RESOURCE_GROUP \ --server $DB_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $APP_NAME
6. Kontrola změn
Adresu URL aplikace (FQDN) najdete pomocí následujícího příkazu:
echo https://$(az containerapp show \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--query properties.configuration.ingress.fqdn \
--output tsv)
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.