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에서 리소스 그룹을 검색하는 것입니다. 다음과 비슷한 리소스가 표시됩니다.
다음 명령을 실행하여 배포를 확인할 수도 있습니다. 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 항목 목록을 반환할 수도 있습니다.