Menyebarkan aplikasi Quarkus ke Azure Container Apps

Selesai

Di unit ini, Anda membuat lingkungan Azure Container Apps dengan menggunakan Azure CLI.

Menyiapkan Dockerfile untuk aplikasi Quarkus

Container Apps digunakan untuk menyebarkan aplikasi kontainer. Jadi, Pertama-tama Anda perlu membuat kontainer aplikasi Quarkus ke dalam gambar Docker. Proses ini mudah karena plugin Quarkus Maven telah menghasilkan beberapa Dockerfiles di bawah src/main/docker.

Gunakan perintah ini untuk mengganti nama salah satu Dockerfiles ini, Dockerfile.jvm, menjadi Dockerfile dan pindahkan ke folder akar:

mv src/main/docker/Dockerfile.jvm ./Dockerfile

Ganti konten setelah komentar panjang di Dockerfile dengan yang berikut ini:

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" ]

Dockerfile ini mengharapkan aplikasi Quarkus dikemas sebagai file quarkus-run.jar . Nama ini adalah nama default untuk aplikasi Quarkus saat dipaketkan sebagai file JAR. Anda perlu memastikan bahwa aplikasi Quarkus dipaketkan sebagai file JAR. Untuk melakukannya, jalankan perintah Maven berikut:

./mvnw package    # On Mac or Linux
mvnw.cmd package  # On Windows

Perintah ini mengemas aplikasi Quarkus ke dalam file JAR dan menghasilkan file quarkus-run.jar di folder target/quarkus-app .

Membuat lingkungan Container Apps dan menyebarkan kontainer

Sekarang setelah Dockerfile berada di lokasi yang tepat, Anda dapat membuat lingkungan Container Apps dan menyebarkan kontainer dengan menggunakan satu perintah Azure CLI. Jalankan perintah berikut di akar proyek:

az containerapp up \
    --name "$AZ_CONTAINERAPP" \
    --environment "$AZ_CONTAINERAPP_ENV" \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --ingress external \
    --target-port 8080 \
    --source .

Perintah ini melakukan beberapa hal:

  • Membuat lingkungan untuk aplikasi kontainer jika belum ada
  • Membuat registri Azure jika tidak ada
  • Membuat ruang kerja Log Analytics jika belum ada
  • Membangun gambar Docker dan mendorongnya ke registri Azure
  • Menyebarkan gambar Docker ke lingkungan Container Apps

Perintah az containerapp up membutuhkan waktu untuk dijalankan. Anda akan melihat output yang mirip dengan yang berikut ini:

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! 

Validasi penyebaran

Anda dapat memvalidasi bahwa penyebaran telah berhasil dalam beberapa cara. Cara term mudah adalah mencari grup sumber daya Anda di portal Microsoft Azure . Anda akan melihat sumber daya yang mirip dengan yang berikut ini:

Cuplikan layar yang memperlihatkan aplikasi yang disebarkan.

Anda juga dapat memeriksa penyebaran dengan menjalankan perintah berikut. Ini mencantumkan semua sumber daya yang dibuat oleh perintah az containerapp up.

az resource list \
    --location "$AZ_LOCATION" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --output table

Anda akan melihat output yang mirip dengan ini:

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

Memverifikasi aplikasi yang disebarkan

Anda sekarang dapat memverifikasi aplikasi yang disebarkan. Pertama, Anda perlu mendapatkan URL aplikasi. Anda bisa mendapatkannya dengan menjalankan perintah berikut:

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"

Aplikasi Anda siap di https://<app-name>.azurecontainerapps.io/. Perhatikan protokol https. Protokol tersebut digunakan karena aplikasi disebarkan dengan sertifikat TLS. Untuk menguji aplikasi, Anda dapat menggunakan cURL:

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

Ambil data dengan menggunakan permintaan cURL baru:

curl https://$AZ_APP_URL/api/todos

Perintah ini mengembalikan daftar semua item to-do dari database:

[
   {
      "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
   }
]

Jika Menjalankan perintah ini, Anda dapat melakukan streaming log untuk kontainer saat membuat tugas baru:

az containerapp logs show \
    --name "$AZ_CONTAINERAPP" \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --follow

Jalankan lebih banyak perintah cURL. Anda akan melihat log yang bergulir di terminal.

curl https://$AZ_APP_URL/api/todos

Nota

Anda juga dapat membuka URL di browser web untuk mengembalikan daftar item to-do.