Alıştırma - Azure Container Apps'i ayarlama
Bu ünitede, uygulamanın kaynaklarını içeren bir Azure kaynak grubu oluşturacaksınız. Ardından Azure CLI kullanarak PostgreSQL veritabanını ayarlarsınız. Son olarak, Quarkus uygulamasını uzak PostgreSQL veritabanına erişecek şekilde yapılandıracaksınız. Komutları, önkoşullarda yapılandırılan yerel Bash ortamında çalıştırın. Windows'da, yapılandırdığınız WSL 2 dağıtımınızı kullanın.
Çalışma ortamını hazırlama
Oluşturulan todo proje dizininde önceki Maven komutları için kullandığınız Bash kabuğuna dönün. Quarkus geliştirme modu hala çalışıyorsa devam etmeden önce Ctrl+C tuşlarına basın. Aşağıdaki dışa aktarmalar için bu kabuğu kullanın ve uygulama başlatma, paketleme ve dağıtım boyunca açık tutun.
Azure CLI 2.87.0 veya üzerini kullanın. Kaynak grubunu ve kaynakları oluşturmak ve kaynak sağlayıcılarını kaydetmek için abonelik kapsamında Katkıda Bulunan veya Sahip gibi bir izne sahip olmanız gerekir. Abonelik ilkesi ve kotası ek kısıtlamalar getirebilir.
Gerekli çok faktörlü kimlik doğrulaması dahil olmak üzere etkileşimli Azure CLI oturum açma akışını kullanarak bu yerel Bash ortamında Azure'da oturum açın.
<subscription-id> yerine kullanmak istediğiniz abonelik kimliğini yazın, ardından bu aboneliği seçip görüntüleyin:
az login
az account set --subscription "<subscription-id>"
az account show --query "{name:name,id:id}" --output table
Görüntülenen aboneliğin, ücretlendirilebilir kaynaklar oluşturmadan önce kullanmayı planladığınız abonelik olduğunu onaylayın. Cloud Shell'de oturum açmak, ayrı bir yerel CLI'da oturum açmanızı sağlamaz. Devam etmeden önce her Azure komutunu başarıyla tamamlayın.
Bazı ortam değişkenleri ayarlamanız gerekir. Oluşturacağınız değişkenler hakkında bazı notlar aşağıdadır:
| Değişken | Açıklama |
|---|---|
AZ_PROJECT |
Benzersizlik soneki olan kısa, küçük harfli proje değeri. Değişken adını değiştirmeyin; sonek değerine aittir. |
AZ_RESOURCE_GROUP |
Kaynakları barındıran kaynak grubunun adı. |
AZ_LOCATION |
Azure bölgesi. Yaşadığınız yere yakın bir bölge kullanmanızı öneririz. Kullanılabilir bölgelerin listesini görmek için komut istemine az account list-locations girin. |
AZ_CONTAINERAPP |
Kapsayıcıları barındıran Azure Container Apps örneğinin adı. |
AZ_CONTAINERAPP_ENV |
Azure Container Apps ortamının adı. |
AZ_POSTGRES_SERVER_NAME |
PostgreSQL esnek sunucusunun küresel olarak benzersiz adı. Küçük harfler, sayılar ve kısa çizgilerden oluşan 3-63 karakter kullanın. Oluşturulan psql${AZ_PROJECT} değer bu kurallara uyar; bu ad kullanılamıyorsa farklı bir sonek seçin. |
AZ_POSTGRES_DB_NAME |
Uygulama veritabanı adı. Sunucuyu oluşturduktan sonra bu veritabanını açıkça oluşturursunuz. |
AZ_POSTGRES_USERNAME |
PostgreSQL veritabanı sunucunuzun yönetici kullanıcı adı. |
AZ_POSTGRES_PASSWORD |
PostgreSQL veritabanı sunucunuzun yönetici parolası. Sessiz istemde güvenli bir parola girin. |
Not
Azure kaynaklarınızı istediğiniz şekilde adlandırabilirsiniz, ancak Azure kaynakları için kısaltma örneklerini gözden geçirmenizi öneririz. Bu makalede birçok Azure kaynağı için örnek kısaltmalar sağlanır (örneğin, kaynak grupları için rg ve kapsayıcı uygulamaları için ca).
Değişkenleri ayarlamak için aşağıdaki bloğu bir kez çalıştırın. Aboneliğinize uygun bir bölge seçin ve PostgreSQL hizmet gereksinimlerini karşılayan bir parola girin. Parola istemi yazdığınız şeyi görüntülemez.
export AZ_PROJECT="quarkus-${RANDOM}${RANDOM}"
export AZ_RESOURCE_GROUP="rg${AZ_PROJECT}"
export AZ_LOCATION="eastus"
export AZ_CONTAINERAPP="ca${AZ_PROJECT}"
export AZ_CONTAINERAPP_ENV="cae${AZ_PROJECT}"
export AZ_POSTGRES_DB_NAME="postgres${AZ_PROJECT}"
export AZ_POSTGRES_SERVER_NAME="psql${AZ_PROJECT}"
export AZ_POSTGRES_USERNAME="pgadmin"
read -r -s -p "PostgreSQL administrator password: " AZ_POSTGRES_PASSWORD
printf '\n'
export AZ_POSTGRES_PASSWORD
Rastgele sonek, kaynak adı çakışmalarını azaltır; küresel olarak kullanılabilir olmayı garanti etmez. PostgreSQL sunucu adı kullanılamıyorsa, sunucuyu oluşturmadan önce AZ_POSTGRES_SERVER_NAME için başka bir sonek seçin. Diğer kaynak tanımlayıcılarını değiştirmeden tutun.
Bu ortam değişkenleri bu modülün geri kalanında kullanılır. Bunları bu Bash kabuğunda tutun ve birimler arasında rastgele ad ve parola bloğunu yeniden çalıştırmayın. HTTP istekleri için kullanılan ayrı terminalin veritabanı parolası gerekmez.
Ardından bir kaynak grubu oluşturun:
az group create \
--name "$AZ_RESOURCE_GROUP" \
--location "$AZ_LOCATION"
PostgreSQL için Azure Veritabanı örneği oluşturma
Şimdi Burstable B1ms SKU ve 32 GiB Premium SSD depolama alanı ile normal bir yönetilen PostgreSQL 16 sunucusu oluşturacaksınız. Seçilen bölge bu sürümü ve SKU'yu desteklemeli ve kullanılabilir abonelik kapasitesine sahip olmalıdır. Devam etmeden önce kota veya ilke hatalarını çözün.
PostgreSQL sağlayıcısını kaydedin ve kaydın tamamlanmasını bekleyin:
az provider register --namespace Microsoft.DBforPostgreSQL --wait
Important
Bu işlem, tüm genel IPv4 adreslerinden veritabanı bağlantı girişimlerine geçici olarak izin verir. Kimlik doğrulaması hala gereklidir. Alıştırmaya ayrılmış yeni bir sunucu ve kaynak grubu kullanın, sonraki güvenlik duvarı kısıtlamasını tamamlayın ve bittiğinde alıştırma kaynaklarını silin. Bu ilk ağ ayarı canlı ortam için bir öneri değildir.
PostgreSQL sunucusunu oluşturun:
az postgres flexible-server create \
--resource-group "$AZ_RESOURCE_GROUP" \
--location "$AZ_LOCATION" \
--name "$AZ_POSTGRES_SERVER_NAME" \
--admin-user "$AZ_POSTGRES_USERNAME" \
--admin-password="$AZ_POSTGRES_PASSWORD" \
--public-access All \
--tier Burstable \
--sku-name Standard_B1ms \
--storage-type Premium_LRS \
--storage-size 32 \
--version 16 \
--yes \
--output none
--public-access All seçeneği genel uç noktayı etkinleştirir ve bu modülün devamında kullanılan tek tüm adresler güvenlik duvarı kuralını oluşturur. Sonraki Azure hizmetleri istisnası hâlâ bu genel uç noktayı kullanır ve diğer müşterilerin abonelikleri de dâhil olmak üzere Azure kaynaklarından bağlantı girişimlerine izin verir. Özel veya yalnızca uygulamaya özgü erişim değildir.
Sunucu oluşturma işlemi başarılı olduktan sonra uygulama veritabanını açıkça oluşturun:
az postgres flexible-server db create \
--resource-group "$AZ_RESOURCE_GROUP" \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--name "$AZ_POSTGRES_DB_NAME" \
--output none
Uygulamayı başlatmadan önce veritabanının var olduğunu doğrulayın:
az postgres flexible-server db show \
--resource-group "$AZ_RESOURCE_GROUP" \
--server-name "$AZ_POSTGRES_SERVER_NAME" \
--name "$AZ_POSTGRES_DB_NAME" \
--query name \
--output tsv
Döndürülen ad, AZ_POSTGRES_DB_NAME değerine eşleşmelidir. Bu veritabanı komutları, sunucu için --name ve veritabanı için --server-name kullanır.
Quarkus'ı PostgreSQL veritabanına erişecek şekilde yapılandırma
Sunucunun tam etki alanı adını (FQDN) alın ve kimlik bilgileri olmadan bir JDBC URL'si oluşturun:
export AZ_POSTGRES_HOST=$(
az postgres flexible-server show \
--resource-group "$AZ_RESOURCE_GROUP" \
--name "$AZ_POSTGRES_SERVER_NAME" \
--query fullyQualifiedDomainName \
--output tsv
)
export AZ_POSTGRES_JDBC_URL="jdbc:postgresql://${AZ_POSTGRES_HOST}:5432/${AZ_POSTGRES_DB_NAME}?sslmode=require"
Bu URL, şifreli aktarımı zorunlu kılmak için sslmode=require kullanır. Kullanıcı adı ve parola, veri kaynağı özellikleri aracılığıyla ayrı ayrı sağlanır, bu nedenle paroladaki & gibi karakterler URL parametresi olarak ayrıştırılamaz. Kimlik bilgisi değerlerini yazdırmayın veya izini sürmeyin.
Şifreleme, sertifika kimliği doğrulaması değildir.
sslmode=require, sunucu sertifikasını ve ana bilgisayar adını doğrulamaz. Bu doğrulamaya ihtiyacınız varsa pgJDBC verify-full yönergelerini izleyin ve güvenilen kök yapılandırma da dahil olmak üzere Azure sertifika güveni yönergelerini izleyin. Yalnızca güveni yapılandırmadan modu değiştirmek tam bir sertifika doğrulama yordamı değildir.
Quarkus uygulamasını PostgreSQL veritabanına bağlanacak şekilde yapılandırma
src/main/resources/application.properties içinde, var olan profilesiz veri kaynağı URL'sini ve şema oluşturma girdilerini aşağıdaki dört satırla değiştirin. Profili olmayan veri kaynağı kullanıcı adı veya parola girdilerini de kaldırın.
${...} ifadelerini dosyada olduğu gibi bırakın; bunları kimlik bilgisi değerleriyle değiştirmeyin. İlişkisiz ayarları değiştirmeden bırakın.
%dev,prod.quarkus.hibernate-orm.database.generation=update
%dev,prod.quarkus.datasource.jdbc.url=${AZ_POSTGRES_JDBC_URL}
%dev,prod.quarkus.datasource.username=${AZ_POSTGRES_USERNAME}
%dev,prod.quarkus.datasource.password=${AZ_POSTGRES_PASSWORD}
Bu ayarlar prod ve dev profilleri için geçerlidir, otomatikleştirilmiş testler için değil. Geliştirme modu bu ünite için Azure veritabanını kullanır ve dağıtılan uygulama bunu üretim modunda kullanır. Testler ayrı bir PostgreSQL Geliştirme Hizmeti kullanır. Uygulamayı test ederken veya paketlerken Docker'ın çalışır durumda kalmasını sağlayın. Maven package yaşam döngüsü testleri çalıştırır; Azure veritabanına test kayıtları eklememelidir.
Profilsiz QUARKUS_DATASOURCE_* ezmelerini dışa aktarmayın. Daha önce bu kabukta herhangi birini ayarladıysanız, bu ayrımı geçersiz kılacakları için bunları test veya paketlemeden önce kaldırın.
AZ_ Değişkenler yalnızca profil kapsamlı ifadeler tarafından çözümlenir. Daha fazla bilgi için bkz. Quarkus 3.18.4 yapılandırma başvurusu.
Uzak veritabanı bağlantısını test etmek için Quarkus uygulamasını yerel olarak çalıştırma
İşlem başladığında ortam değişkenlerini devralır. Başka bir terminalde AZ_POSTGRES_* dışa aktarmak, zaten çalışan bir Quarkus işlemini güncelleştirmez ve bu geçiş için tek başına application.properties düzenlemek yeterli değildir.
Gerekirse terminalinde Ctrl+C tuşlarına basarak önceki geliştirme işleminin durduruldığından emin olun. Dışarı aktarılan kaynak ve veritabanı değişkenlerini içeren Bash kabuğundaki todo dizininden uygulamayı başlatın:
./mvnw clean quarkus:dev
Quarkus çalışırken, ikinci bir yerel Bash terminalinde aşağıdaki cURL komutlarını kullanarak birkaç yapılacak iş oluşturun. Değişkenin tanımlı olduğu kabuğu Quarkus çalışır durumda bırakın:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"Take Quarkus MS Learn","details":"Take the MS Learn on deploying Quarkus to Azure Container Apps","done": "true"}' \
http://127.0.0.1:8080/api/todos
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"Take Azure Container Apps MS Learn","details":"Take the ACA Learn module","done": "false"}' \
http://127.0.0.1:8080/api/todos
Ardından, to-do uygulamasında tanımlanan GET uç noktasına erişerek yapılacakların veritabanında olup olmadığını denetleyin:
curl http://127.0.0.1:8080/api/todos
Yanıt, aşağıdaki çıkışa benzer şekilde gönderdiğiniz açıklamaları içermelidir. Tanımlayıcılar, zaman damgaları ve sıra farklılık gösterebilir ve POST'un yinelenmesi başka bir öğe oluşturur.
[
{
"id": 1,
"description": "Take Quarkus MS Learn",
"details": "Take the MS Learn on deploying Quarkus to Azure Container Apps",
"done": true,
"createdAt": "2025-02-26T08:03:28.390854Z"
},
{
"id": 2,
"description": "Take Azure Container Apps MS Learn",
"details": "Take the ACA Learn module",
"done": false,
"createdAt": "2025-02-26T08:03:34.142249Z"
}
]
Yanıt oluşturduğunuz öğeleri içeriyorsa Quarkus uygulamasını başarıyla çalıştırmış ve uzak PostgreSQL veritabanına bağlanmış olursunuz.
Bir sonraki ünitede paketlemeye devam etmeden önce Quarkus çalıştıran terminale dönün ve Ctrl+C tuşlarına basın. Tüm dışa aktarılan değişkenler olduğu gibi korunarak bu Bash kabuğunu todo dizininde açık tutun. Rastgele ad ve parola bloğunu yeniden çalıştırmayın; paketleme ve dağıtım için aynı kabuğu kullanın.