Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Container Apps, uygulamanız için yönetilen bir kimlik sağlar. Bu, PostgreSQL için Azure Veritabanı ve diğer Azure hizmetlerine erişimin güvenliğini sağlamaya yönelik anahtar teslimi bir çözümdür. Container Apps'teki yönetilen kimlikler, uygulamanızdaki ortam değişkenlerindeki kimlik bilgileri gibi gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir.
Bu öğretici, Azure'da Java kapsayıcı uygulamaları oluşturma, yapılandırma, dağıtma ve ölçeklendirme işleminde size yol gösterir. Bu öğreticinin sonunda, Container Apps üzerinde çalışan yönetilen kimlikle, verilerini bir PostgreSQL veritabanında depolayan bir Quarkus uygulamanız olacaktır.
Öğrendikleri:
- Postgre SQL Veritabanı ile Microsoft Entra Id kullanarak kimlik doğrulaması yapmak için bir Quarkus uygulaması yapılandırın.
- Bir Azure Container Registry örneği oluşturun ve buna bir Java uygulaması görüntüsü gönderin.
- Azure'da kapsayıcı uygulaması oluşturma.
- Azure'da bir PostgreSQL veritabanı oluşturun.
- Hizmet Bağlayıcısı'nı kullanarak yönetilen kimlikle Postgre SQL Veritabanı'ye bağlanın.
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
1. Önkoşullar
- Azure CLI sürüm 2.45.0 veya üzeri.
- Aptal
- Java JDK
- Maven
- liman işçisi
2. Kapsayıcı kayıt defteri oluşturun
az group create komutuyla bir kaynak grubu oluşturun. Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır.
Aşağıdaki örnek, Doğu ABD Azure bölgesinde adlı myResourceGroup bir kaynak grubu oluşturur.
RESOURCE_GROUP="myResourceGroup"
LOCATION="eastus"
az group create --name $RESOURCE_GROUP --location $LOCATION
az acr create komutunu kullanarak bir Azure Container Registry örneği oluşturun ve az acr show komutunu kullanarak oturum açma sunucusunu alın. Kaynak defteri adı Azure’da benzersiz olmalı ve 5-50 arası alfasayısal karakter içermelidir. Tüm harfler küçük harfle belirtilmelidir. Aşağıdaki örnekte mycontainerregistry007 kullanılmıştır. Bunu benzersiz bir değerle güncelleştirin.
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. Örnek uygulamayı kopyalayın ve kapsayıcı görüntüsünü hazırlayın
Bu öğreticide, PostgreSQL için Azure Veritabanı tarafından desteklenen quarkus REST API'sini çağıran bir web kullanıcı arabirimine sahip örnek bir Fruits listesi uygulaması kullanılmaktadır. Uygulamanın kodu GitHub'da kullanılabilir. Quarkus ve PostgreSQL kullanarak Java uygulamaları yazma hakkında daha fazla bilgi edinmek için Quarkus Hibernate ORM with Panache Kılavuzu ve Quarkus Veri Kaynağı Kılavuzu'na bakın.
Örnek depoyu kopyalamak ve örnek uygulama ortamını ayarlamak için terminalinizde aşağıdaki komutları çalıştırın.
git clone https://github.com/quarkusio/quarkus-quickstarts
cd quarkus-quickstarts/hibernate-orm-panache-quickstart
Projenizi değiştirme
Projenizin POM dosyasına gerekli bağımlılıkları ekleyin.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.2.0</version> </dependency>Quarkus uygulama özelliklerini yapılandırın.
Quarkus yapılandırması src/main/resources/application.properties dosyasında bulunur. Bu dosyayı düzenleyicinizde açın ve birkaç varsayılan özelliği gözlemleyin. ön ekli
%prodözellikler yalnızca uygulama derlendiğinde ve dağıtıldığında, örneğin Azure Uygulaması Hizmeti'ne dağıtıldığında kullanılır. Uygulama yerel olarak çalıştırıldığında,%prodözelliği yoksayılır. Benzer şekilde,%devözellikler Quarkus'un Canlı Kodlama / Geliştirme modunda ve%testözellikler de sürekli test sırasında kullanılır.application.properties dosyasındaki mevcut içeriği silin ve veritabanını geliştirme, test ve üretim modları için yapılandırmak üzere aşağıdakilerle değiştirin:
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
Kapsayıcı kayıt defterine Docker görüntüsü oluşturma ve gönderme
Kapsayıcı görüntüsünü oluşturun.
Quarkus uygulama görüntüsünü oluşturmak için aşağıdaki komutu çalıştırın. Bunu kayıt defteri oturum açma sunucunuzun tam adıyla etiketlemeniz gerekir.
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}Kayıt defterinde oturum açın.
Kapsayıcı görüntülerini göndermeden önce kayıt defterinde oturum açmanız gerekir. Bunu yapmak için [az acr login][az-acr-login] komutunu kullanın.
az acr login --name $REGISTRY_NAMEBu komut tamamlandığında
Login Succeedediletisi döndürülür.İmajı kayıt dizinine gönderin.
Görüntüyü kayıt defteri örneğine göndermek için kullanın
docker push. Bu örnek,quarkus-postgres-passwordless-appdeposunu,quarkus-postgres-passwordless-app:v1görüntüsünü içeren şekilde oluşturur.docker push $CONTAINER_IMAGE
4. Azure'da Kapsayıcı Uygulaması oluşturma
Aşağıdaki komutu çalıştırarak bir Container Apps örneği oluşturun. Ortam değişkenlerinin değerini kullanmak istediğiniz gerçek ad ve konumla değiştirdiğinizden emin olun.
CONTAINERAPPS_ENVIRONMENT="my-environment" az containerapp env create \ --resource-group $RESOURCE_GROUP \ --name $CONTAINERAPPS_ENVIRONMENT \ --location $LOCATIONAşağıdaki komutu çalıştırarak uygulama görüntünüzle bir kapsayıcı uygulaması oluşturun:
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 1Not
ve
--registry-usernameseçenekleri--registry-passwordhala desteklenir, ancak kimlik sistemini kullanmak daha güvenli olduğundan önerilmez.
5. Kimlik bağlantısı ile PostgreSQL veritabanı oluşturma ve bağlama
Ardından bir Postgre SQL Veritabanı oluşturun ve kapsayıcı uygulamanızı sistem tarafından atanan yönetilen kimlikle postgre SQL Veritabanı bağlanacak şekilde yapılandırın. Quarkus uygulaması bu veritabanına bağlanır ve çalıştırılırken verilerini depolar ve uygulamayı nerede çalıştırdığınızdan bağımsız olarak uygulama durumunu kalıcı hale döndürür.
Veritabanı hizmetini oluşturun.
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 EnabledNot
ve
--admin-userseçenekleri--admin-passwordhala desteklenir, ancak kimlik sistemini kullanmak daha güvenli olduğundan önerilmez.Yukarıdaki Azure CLI komutunda aşağıdaki parametreler kullanılır:
-
resource-group → Web uygulamasını oluşturduğunuz kaynak grubu adını kullanın; örneğin,
msdocs-quarkus-postgres-webapp-rg. -
name → PostgreSQL veritabanı sunucu adı. Bu ad tüm Azure'da benzersiz olmalıdır (sunucu uç noktası
https://<name>.postgres.database.azure.comolur). İzin verilen karakterler ,A-Zve0şeklindedir.-9-İyi bir desen, şirketinizin adıyla sunucu tanımlayıcısının bir birleşimini kullanmaktır. (msdocs-quarkus-postgres-webapp-db) - konum → Web uygulaması için kullanılan konumu kullanın. Çalışmazsa farklı bir konuma geçin.
-
genel erişim →
None, sunucuyu güvenlik duvarı kuralları olmadan genel erişim modunda ayarlar. Kurallar sonraki bir adımda oluşturulur. -
sku-name → Fiyatlandırma katmanının adı ve işlem yapılandırması ; örneğin,
Standard_B1ms. Daha fazla bilgi için Azure Veritabanı için PostgreSQL fiyatlandırması sayfasına bakın. - katman → Sunucunun işlem katmanı. Daha fazla bilgi için Azure Veritabanı için PostgreSQL fiyatlandırması sayfasına bakın.
-
Active-directory-auth → Microsoft Entra kimlik doğrulamasını etkinleştirmek için
Enabled.
-
resource-group → Web uygulamasını oluşturduğunuz kaynak grubu adını kullanın; örneğin,
Şu komutla PostgreSQL hizmetinde adlı
fruitsbir veritabanı oluşturun:DB_NAME=fruits az postgres flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $DB_SERVER_NAME \ --database-name $DB_NAMEAzure CLI için Hizmet Bağlayıcısı parolasız uzantısını yükleyin:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview trueBağlantı komutunu kullanarak sistem tarafından atanan yönetilen kimlikle veritabanını kapsayıcı uygulamasına bağlayın.
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. Değişikliklerinizi gözden geçirin
Aşağıdaki komutu kullanarak uygulama URL'sini (FQDN) bulabilirsiniz:
echo https://$(az containerapp show \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--query properties.configuration.ingress.fqdn \
--output tsv)
Yeni web sayfası meyve listenizi gösterdiğinde, uygulamanız yönetilen kimliği kullanarak veritabanına bağlanır. Artık meyve listesini daha önce olduğu gibi düzenleyebilmeniz gerekir.
Kaynakları temizleme
Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:
az group delete --name myResourceGroup
Bu komutun çalıştırılması bir dakika sürebilir.
Sonraki adımlar
Geliştirici kılavuzunda Azure'da Java uygulamalarını çalıştırma hakkında daha fazla bilgi edinin.