Azure Container Apps'e Quarkus uygulaması dağıtma
Bu ünitede, Azure CLI kullanarak Azure Container Apps ortamını oluşturacaksınız.
Quarkus uygulaması için Dockerfile'ı ayarlama
Container Apps, kapsayıcılı uygulamaları dağıtmak için kullanılır. Bu nedenle öncelikle Quarkus uygulamasını bir Docker görüntüsünde kapsayıcılı hale getirmeniz gerekir. Quarkus Maven eklentisi src/main/dockeraltında zaten bazı Dockerfile'lar oluşturduğundan bu işlem kolaydır.
Bir Dockerfile'ı yeniden adlandırmak için şu komutu kullanın: Dockerfile.jvmdosyasını Dockerfile olarak değiştirin ve kök klasöre taşıyın.
mv src/main/docker/Dockerfile.jvm ./Dockerfile
Dockerfile'daki uzun açıklamadan sonraki içeriği aşağıdakilerle değiştirin:
FROM registry.access.redhat.com/ubi8/openjdk-17:1.18
ENV LANGUAGE='en_US:en'
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
Bu Dockerfile, Quarkus uygulamasının quarkus-run.jar dosyası olarak paketlenmiş olmasını bekler. Bu ad, Jar dosyası olarak paketlendiğinde Quarkus uygulamasının varsayılan adıdır. Quarkus uygulamasının JAR dosyası olarak paketlendiğinden emin olmanız gerekir. Bunu yapmak için aşağıdaki Maven komutunu çalıştırın:
./mvnw package # On Mac or Linux
mvnw.cmd package # On Windows
Bu komut Quarkus uygulamasını bir JAR dosyasına paketler ve target/quarkus-app klasöründe bir quarkus-run.jar dosyası oluşturur.
Container Apps ortamını oluşturma ve kapsayıcıyı dağıtma
Dockerfile doğru konumda olduğuna göre, tek bir Azure CLI komutu kullanarak Container Apps ortamını oluşturabilir ve kapsayıcıyı dağıtabilirsiniz. Projenin kökünde aşağıdaki komutu çalıştırın:
az containerapp up \
--name "$AZ_CONTAINERAPP" \
--environment "$AZ_CONTAINERAPP_ENV" \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--ingress external \
--target-port 8080 \
--source .
Bu komut birkaç işlem yapar:
- Eğer mevcut değilse bir Container Apps ortamı oluşturur.
- Var değilse bir Azure kayıt defteri oluşturur
- Yoksa Log Analytics çalışma alanı oluşturur
- Docker görüntüsünü derleyip Azure kayıt defterine gönderir
- Docker görüntüsünü Container Apps ortamına dağıtır
az containerapp up komutunun çalıştırılması biraz zaman alır. Aşağıdakine benzer bir çıkış görmeniz gerekir:
Using resource group 'rgazure-deploy-quarkus'
Creating ContainerAppEnvironment 'caeazure-deploy-quarkus' in resource group rgazure-deploy-quarkus
No Log Analytics workspace provided.
Generating a Log Analytics workspace with name "workspace-rgazuredeployquarkusEED7"
Creating Azure Container Registry ca001ad52ae7acr in resource group rgazure-deploy-quarkus
Run ID: ca3 was successful after 41s
Creating Containerapp caazure-deploy-quarkus in resource group rgazure-deploy-quarkus
Adding registry password as a secret with name "ca001ad52ae7acrazurecrio-ca001nxc57acr"
Your container app caazure-deploy-quarkus has been created and deployed! Congrats!
Dağıtımı doğrula
Dağıtımın başarılı olduğunu çeşitli yollarla doğrulayabilirsiniz. En kolay yol, Azure portalındakaynak grubunuzu aramaktır. Aşağıdakine benzer kaynaklar görmeniz gerekir:
Aşağıdaki komutu çalıştırarak da dağıtımı de kontrol edebilirsiniz.
az containerapp up komutu tarafından oluşturulan tüm kaynakları listeler.
az resource list \
--location "$AZ_LOCATION" \
--resource-group "$AZ_RESOURCE_GROUP" \
--output table
Şuna benzer bir çıkış görmeniz gerekir:
Name ResourceGroup Location Type Status
---------------------------------- ---------------------- ---------- ----------------------------------------- --------
caea3a6e0afeacr rgazure-deploy-quarkus eastus Microsoft.ContainerRegistry/registries
psqlazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.DBforPostgreSQL/flexibleServers
caazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.App/containerApps
caeazure-deploy-quarkus rgazure-deploy-quarkus eastus Microsoft.App/managedEnvironments
workspace-rgazuredeployquarkuscDD3 rgazure-deploy-quarkus eastus Microsoft.OperationalInsights/workspaces
Dağıtılan uygulamayı doğrulama
Artık dağıtılan uygulamayı doğrulayabilirsiniz. İlk olarak, uygulamanın URL'sini almanız gerekir. Aşağıdaki komutu çalıştırarak alabilirsiniz:
export AZ_APP_URL=$(
az containerapp show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--query "properties.configuration.ingress.fqdn" \
--output tsv \
)
echo "AZ_APP_URL=$AZ_APP_URL"
Uygulamanız https://<app-name>.azurecontainerapps.io/konumunda hazırdır.
https protokolüne dikkat edin. Uygulama bir TLS sertifikasıyla dağıtıldığından bu protokol kullanılır. Uygulamayı test etmek için cURL kullanabilirsiniz:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"Configuration","details":"Congratulations, you have set up your Quarkus application correctly!","done": "true"}' \
https://$AZ_APP_URL/api/todos
Yeni bir cURL isteği kullanarak verileri alın:
curl https://$AZ_APP_URL/api/todos
Bu komut, veritabanındaki tüm to-do öğelerinin listesini döndürür:
[
{
"description" : "Take Quarkus MS Learn",
"details" : "Take the MS Learn on deploying Quarkus to Azure Container Apps",
"done" : true,
"id" : 1
},
{
"description" : "Take Azure Container MS Learn",
"details" : "Take the ACA Learn module",
"done" : false,
"id" : 2
},
{
"description" : "Configuration",
"details" : "Congratulations, you have set up your Quarkus application correctly!",
"done" : true,
"id" : 3
}
]
Bu komutu çalıştırırsanız, yeni yapılacaklar oluşturduğunuzda kapsayıcınızın günlüklerini akışla aktarabilirsiniz:
az containerapp logs show \
--name "$AZ_CONTAINERAPP" \
--resource-group "$AZ_RESOURCE_GROUP" \
--follow
Daha fazla cURL komutu çalıştırın. Terminalde günlüklerin kaydırıldığını görmelisiniz.
curl https://$AZ_APP_URL/api/todos
Not
to-do öğelerinin listesini döndürmek için URL'yi bir web tarayıcısında da açabilirsiniz.