Azure Container Apps에 Quarkus 애플리케이션 배포

완료됨

이 단원에서는 Azure CLI를 사용하여 Azure Container Apps 환경을 만들었습니다.

Quarkus 애플리케이션에 대한 Dockerfile 설정

Container Apps는 컨테이너화된 애플리케이션을 배포하는 데 사용됩니다. 따라서 먼저 Quarkus 애플리케이션을 Docker 이미지로 컨테이너화해야 합니다. Quarkus Maven 플러그 인이 이미 src/main/docker 아래에 일부 Dockerfile을 생성했기 때문에 이 프로세스는 쉽습니다.

Dockerfile 중 하나인 Dockerfile.jvm의 이름을 Dockerfile로 바꾸고 루트 폴더로 이동하려면 다음 명령을 사용합니다.

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

Dockerfile의 긴 주석 뒤의 콘텐츠를 다음으로 바꿉니다.

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에서는 Quarkus 애플리케이션이 quarkus-run.jar 파일로 패키지될 것으로 예상합니다. 이 이름은 JAR 파일로 패키지된 Quarkus 애플리케이션의 기본 이름입니다. Quarkus 애플리케이션이 JAR 파일로 패키지되어 있는지 확인해야 합니다. 이렇게 하려면 다음 Maven 명령을 실행합니다.

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

이 명령은 Quarkus 애플리케이션을 JAR 파일로 패키지하고 target/quarkus-app 폴더에 quarkus-run.jar 파일을 생성합니다.

Container Apps 환경 만들기 및 컨테이너 배포

이제 Dockerfile이 올바른 위치에 있으므로 단일 Azure CLI 명령을 사용하여 Container Apps 환경을 만들고 컨테이너를 배포할 수 있습니다. 프로젝트 루트에서 다음 명령을 실행합니다.

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

이 명령은 여러 가지 작업을 수행합니다.

  • Container Apps 환경이 없는 경우 만듭니다.
  • 존재하지 않는 경우 Azure 레지스트리를 만듭니다.
  • Log Analytics 작업 영역이 없는 경우 새로 만듭니다.
  • Docker 이미지를 빌드하고 Azure Registry에 푸시합니다.
  • Docker 이미지를 Container Apps 환경에 배포합니다.

az containerapp up 명령을 실행하는 데 시간이 좀 걸립니다. 다음과 유사한 출력이 표시됩니다.

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! 

배포 유효성 검사

여러 가지 방법으로 배포가 성공했는지 유효성을 검사할 수 있습니다. 가장 쉬운 방법은 Azure portal에서 리소스 그룹을 검색하는 것입니다. 다음과 비슷한 리소스가 표시됩니다.

Screenshot that shows the deployed application.

다음 명령을 실행하여 배포를 확인할 수도 있습니다. az containerapp up 명령으로 만들어진 모든 리소스를 나열합니다.

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

다음과 유사한 출력이 표시됩니다.

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

배포된 Quarkus 애플리케이션 실행

이제 배포된 Quarkus 애플리케이션을 실행할 수 있습니다. 먼저 애플리케이션의 URL을 가져와야 합니다. 다음 명령을 실행하여 가져올 수 있습니다.

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"

애플리케이션이 https://<app-name>.azurecontainerapps.io/에 준비되었습니다. https 프로토콜을 확인합니다. 해당 프로토콜은 애플리케이션이 TLS 인증서를 사용하여 배포되기 때문에 사용됩니다. 애플리케이션을 테스트할 때 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

새 cURL 요청을 사용하여 데이터를 검색합니다.

curl https://$AZ_APP_URL/api/todos

이 명령은 데이터베이스의 모든 할 일 항목 목록을 반환합니다.

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

이 명령을 실행하면 새 할 일을 만들 때 컨테이너에 대한 로그를 스트리밍할 수 있습니다.

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

더 많은 cURL 명령을 실행합니다. 터미널에서 로그가 스크롤되는 것을 볼 수 있습니다.

curl https://$AZ_APP_URL/api/todos

참고 항목

웹 브라우저에서 URL을 열어 todo 항목 목록을 반환할 수도 있습니다.