Azure Container Apps'e Quarkus uygulaması dağıtma

Tamamlandı

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:

Dağıtılan uygulamayı gösteren ekran görüntüsü.

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.