이 문서에서는 간단한 CRUD 애플리케이션을 사용하여 Microsoft Azure Container Apps에 Red Hat Quarkus를 신속하게 배포하는 방법을 보여줍니다. 이 애플리케이션은 JavaScript 프런트 엔드 및 REST 엔드포인트가 있는 "할 일 목록"입니다. Azure Database for PostgreSQL 유연한 서버는 앱에 대한 지속성 계층을 제공합니다. 이 문서에서는 앱을 로컬로 테스트하고 Container Apps에 배포하는 방법을 보여 줍니다.
필수 구성 요소
- Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- Unix와 비슷한 운영 체제가 설치된 로컬 컴퓨터를 준비합니다(예: Ubuntu, macOS 또는 Linux용 Windows 하위 시스템).
- Java SE 구현 버전 17 이상(예: OpenJDK의 Microsoft 빌드)을 설치합니다.
- Maven 버전 3.9.8 이상을 설치합니다.
- OS에 맞는 Docker를 설치하세요.
- jq를 설치합니다.
- cURL을 설치합니다.
- Quarkus CLI 버전 3.12.1 이상을 설치합니다.
- Azure CLI를 설치하여 Azure CLI 명령을 실행합니다.
-
az login명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 로그인을 참조하세요. - 메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
-
az version실행하여 설치된 버전 및 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면az upgrade실행합니다. 이 문서에는 Azure CLI 버전 2.61.0 이상이 필요합니다.
-
앱 프로젝트 만들기
다음 명령을 사용하여 이 문서의 샘플 Java 프로젝트를 복제합니다. 샘플은 GitHub에 있습니다.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2025-05-08
cd aca-quarkus
detached HEAD 상태에 있는 것에 대한 메시지가 표시되면 이 메시지는 무시해도 안전합니다. 이 문서에는 커밋이 필요하지 않으므로 detached HEAD 상태가 적절합니다.
Quarkus 앱을 로컬로 테스트
이 섹션의 단계에서는 앱을 로컬로 실행하는 방법을 보여 줍니다.
Quarkus는 개발 및 테스트 모드에서 구성되지 않은 서비스의 자동 프로비전을 지원합니다. Quarkus는 이 기능을 개발 서비스라고 합니다. 데이터베이스 서비스에 연결 같은 Quarkus 기능을 포함한다고 가정해 보겠습니다. 앱을 테스트하려고 하지만 아직 실제 데이터베이스에 대한 연결을 완전히 구성하지 않았습니다. Quarkus는 관련 서비스의 스텁 버전을 자동으로 시작하고 애플리케이션을 연결합니다. 자세한 내용은 Quarkus 설명서의 개발 서비스 개요 를 참조하세요.
컨테이너 환경이 실행 중인지 확인하고 다음 명령을 사용하여 Quarkus 개발 모드로 전환합니다.
quarkus dev
quarkus dev 대신 mvn quarkus:dev를 사용하여 Maven에서 동일한 작업을 수행할 수 있습니다.
Quarkus 개발 모드 사용량에 대한 원격 분석을 보낼 것인지 묻는 메시지가 표시될 수 있습니다. 표시되면 원하는 대로 대답합니다.
Quarkus 개발 모드를 사용하면 백그라운드 컴파일을 사용하여 라이브로 다시 로드할 수 있습니다. 앱 소스 코드의 측면을 수정하고 브라우저를 새로 고치면 변경 내용을 볼 수 있습니다. 컴파일 또는 배포에 문제가 있는 경우 오류 페이지에 표시됩니다. Quarkus 개발 모드는 포트 5005에서 디버거를 수신 대기합니다. 실행하기 전에 디버거가 연결되기를 기다리려면 명령줄에서 -Dsuspend를 전달합니다. 디버거를 전혀 사용하지 않으려면 -Ddebug=false를 사용할 수 있습니다.
출력은 다음 예제와 같아야 합니다.
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO [io.quarkus] (Quarkus Main Thread) quarkus-todo-demo-app-aca 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.2.0.Final) started in 14.826s. Listening on: http://localhost:8080
INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-validator, jdbc-postgresql, narayana-jta, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]
--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
Quarkus 개발 모드가 실행 중인 터미널에서 w 키를 누릅니다.
w 키는 기본 웹 브라우저를 열고 Todo 애플리케이션을 표시합니다.
http://localhost:8080에서 애플리케이션 GUI에 직접 액세스할 수도 있습니다.
할 일 목록에서 몇 가지 할 일 항목을 선택해 보세요. UI는 취소선 텍스트 스타일을 사용하여 선택 영역을 나타냅니다. 다음 스크린샷과 같이 Verify Todo apps를 입력하고 ENTER 키를 눌러 새 할 일 목록을 추가할 수도 있습니다.
RESTful API(/api)에 액세스하여 로컬 PostgreSQL 데이터베이스에 저장하는 모든 할 일 항목을 가져옵니다.
curl --verbose http://localhost:8080/api | jq .
출력은 다음 예제와 같아야 합니다.
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-length: 664
< Content-Type: application/json;charset=UTF-8
<
{ [664 bytes data]
100 664 100 664 0 0 13278 0 --:--:-- --:--:-- --:--:-- 15441
* Connection #0 to host localhost left intact
[
{
"id": 1,
"title": "Introduction to Quarkus Todo App",
"completed": false,
"order": 0,
"url": null
},
{
"id": 2,
"title": "Quarkus on Azure App Service",
"completed": false,
"order": 1,
"url": "https://learn.microsoft.com/en-us/azure/app-service/quickstart-java"
},
{
"id": 3,
"title": "Quarkus on Azure Container Apps",
"completed": false,
"order": 2,
"url": "https://learn.microsoft.com/en-us/training/modules/deploy-java-quarkus-azure-container-app-postgres/"
},
{
"id": 4,
"title": "Quarkus on Azure Functions",
"completed": false,
"order": 3,
"url": "https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-quarkus"
},
{
"id": 5,
"title": "Verify Todo apps",
"completed": false,
"order": 5,
"url": null
}
]
q 키를 눌러 Quarkus 개발 모드를 종료합니다.
Quarkus 앱을 실행하는 Azure 리소스 만들기
이 섹션의 단계에서는 Quarkus 샘플 앱을 실행하기 위해 다음 Azure 리소스를 만드는 방법을 보여 줍니다.
- Azure Database for PostgreSQL 유연한 서버
- Azure Container Registry
- Azure Container Apps
이러한 리소스 중 일부는 Azure 구독의 범위 내에서 고유한 이름이 있어야 합니다. 이 고유성을 보장하기 위해 ‘이니셜, 시퀀스, 날짜, 접미사’ 패턴을 사용할 수 있습니다. 이 패턴을 적용하려면 이니셜, 일부 시퀀스 번호, 오늘 날짜, 리소스 관련 접미사(예를 들어 “리소스 그룹”을 뜻하는 rg)를 나열하여 리소스의 이름을 지정합니다. 다음 환경 변수는 이 패턴을 사용합니다. 자리 표시자 값을 사용자 고유의 UNIQUE_VALUELOCATION 값으로 바꾸고 터미널에서 명령을 실행합니다.
export UNIQUE_VALUE=<your unique value, such as mjg101424>
export RESOURCE_GROUP_NAME=${UNIQUE_VALUE}rg-passwordless
export LOCATION=<your desired Azure region for deploying your resources - for example, eastus>
export REGISTRY_NAME=${UNIQUE_VALUE}regpasswordless
export DB_SERVER_NAME=${UNIQUE_VALUE}dbpasswordless
export DB_NAME=demodb
export ACA_ENV=${UNIQUE_VALUE}envpasswordless
export ACA_NAME=${UNIQUE_VALUE}acapasswordless
다음으로, 다음 명령을 사용하여 리소스 그룹을 만듭니다.
az group create \
--name $RESOURCE_GROUP_NAME \
--location $LOCATION
Azure Database for PostgreSQL 유연한 서버 인스턴스 만들기
Azure Database for PostgreSQL 유연한 서버는 데이터베이스 관리 기능 및 구성 설정에 대한 보다 세부적인 제어 및 유연성을 제공하도록 설계된 완전 관리형 데이터베이스 서비스입니다. 이 섹션에서는 Azure CLI를 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스를 만드는 방법을 보여 줍니다. 자세한 내용은 빠른 시작을 참조하세요. Azure Database for PostgreSQL - 유연한 서버인스턴스 만들기.
다음 명령을 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스를 만듭니다.
az postgres flexible-server create \
--name $DB_SERVER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--database-name $DB_NAME \
--public-access None \
--sku-name Standard_B1ms \
--tier Burstable \
--active-directory-auth Enabled
서버, 데이터베이스, 관리자 사용자 및 방화벽 규칙을 만드는 데 몇 분 정도 걸립니다. 명령이 성공하면 출력은 다음 예제와 유사합니다.
{
"connectionString": "postgresql://REDACTED:REDACTED@<DB_SERVER_NAME>.postgres.database.azure.com/<DB_NAME>?sslmode=require",
"databaseName": "<DB_NAME>",
"host": "<DB_SERVER_NAME>.postgres.database.azure.com",
"id": "/subscriptions/REDACTED/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DBforPostgreSQL/flexibleServers/<DB_SERVER_NAME>",
"location": "East US",
"password": "REDACTED",
"resourceGroup": "<RESOURCE_GROUP_NAME>",
"skuname": "Standard_B1ms",
"username": "REDACTED",
"version": "13"
}
다음 명령을 사용하여 현재 로그인한 사용자를 Microsoft Entra Admin으로 Azure Database for PostgreSQL 유연한 서버 인스턴스에 추가합니다.
ENTRA_ADMIN_NAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
az postgres flexible-server ad-admin create \
--resource-group $RESOURCE_GROUP_NAME \
--server-name $DB_SERVER_NAME \
--display-name $ENTRA_ADMIN_NAME \
--object-id $(az ad signed-in-user show --query id -o tsv)
성공한 출력은 속성을 "type": "Microsoft.DBforPostgreSQL/flexibleServers/administrators"포함하는 JSON 개체입니다.
프라이빗 Azure Container Registry 인스턴스 만들기
Quarkus는 클라우드 네이티브 기술이므로 Container Apps에서 실행되는 컨테이너를 만들기 위한 기본 제공 지원을 제공합니다. Container Apps는 실행할 컨테이너 이미지를 찾는 컨테이너 레지스트리를 갖는 데 전적으로 의존합니다. Container Apps는 Azure Container Registry에 대한 기본 제공 지원을 제공합니다.
az acr create 명령을 사용하여 Container Registry 인스턴스를 만듭니다. 다음 예제에서는 환경 변수 ${REGISTRY_NAME}의 값으로 명명된 n Container Registry 인스턴스를 만듭니다.
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--location ${LOCATION} \
--name $REGISTRY_NAME \
--sku Basic
잠시 후 다음 줄을 포함하는 JSON 출력이 표시됩니다.
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "<YOUR_RESOURCE_GROUP>",
다음 명령을 사용하여 컨테이너 레지스트리 인스턴스에 대한 로그인 서버를 가져옵니다.
export LOGIN_SERVER=$(az acr show \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
echo $LOGIN_SERVER
Azure Container Registry 인스턴스에 Docker 연결
컨테이너 레지스트리 인스턴스에 로그인합니다. 로그인하면 이미지를 푸시할 수 있습니다. 다음 명령을 사용하여 레지스트리에 로그인합니다.
az acr login --name $REGISTRY_NAME
컨테이너 레지스트리 인스턴스에 성공적으로 로그인한 경우 명령 출력의 끝에 Login Succeeded 표시됩니다.
환경 만들기
Azure Container Apps의 환경은 컨테이너 앱 그룹 주위에 보안 경계를 만듭니다. 동일한 환경에 배포된 컨테이너 앱은 동일한 가상 네트워크에 배포되고 동일한 Log Analytics 작업 영역에 로그를 씁니다.
Azure Container Apps 환경을 처음으로 만드는 경우, 아마도 Microsoft.App 및 Microsoft.OperationalInsights 네임스페이스를 등록해야 할 것입니다. 다음 명령을 사용하여 네임스페이스를 등록합니다.
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.OperationalInsights --wait
이제 다음 예제와 같이 az containerapp env create 명령을 사용하여 환경을 만듭니다.
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--location $LOCATION \
--name $ACA_ENV
확장을 설치하라는 메시지가 표시되면 Y에 응답합니다.
클라우드 네이티브 구성 사용자 지정
클라우드 네이티브 기술인 Quarkus는 컨테이너 이미지를 자동으로 생성하는 기능을 제공합니다. 자세한 내용은 컨테이너 이미지를 참조 하세요. 그런 다음 개발자는 애플리케이션 이미지를 대상 컨테이너화된 플랫폼(예: Azure Container Apps)에 배포할 수 있습니다.
컨테이너 이미지를 생성하려면 다음 명령을 사용하여 로컬 터미널에 container-image-jib 확장을 추가합니다.
quarkus ext add container-image-jib
Quarkus는 POM을 수정하여 확장이 에 포함 <dependencies>되도록 합니다.
JBang이라는 항목을 설치하라는 메시지가 표시되면 '예'라고 대답하고 설치할 수 있도록 허용합니다.
출력은 다음 예제와 같아야 합니다.
[SUCCESS] ✅ Extension io.quarkus:quarkus-container-image-jib has been installed
pom.xml 파일을 열면 확장 프로그램에서 추가 container-image-jib 한 다음 종속성이 표시됩니다.
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-container-image-jib</artifactId>
</dependency>
그런 다음, Pom.xml 파일에 다음 종속성을 추가하여 Azure Database for PostgreSQL 유연한 서버에서 암호 없는 인증을 지원합니다.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.1.20</version>
</dependency>
클라우드 네이티브 기술인 Quarkus는 구성 프로필의 개념을 지원합니다. Quarkus에는 다음과 같은 세 가지 기본 제공 프로필이 있습니다.
-
dev- 개발 모드에서 활성화됩니다. -
test- 테스트를 실행할 때 활성화됩니다. -
prod- 개발 또는 테스트 모드에서 실행되지 않는 경우의 기본 프로필입니다.
Quarkus는 필요에 따라 임의의 수의 명명된 프로필을 지원합니다.
이 섹션의 나머지 단계에서는 src/main/resources/application.properties 파일에 있는 값의 주석 처리를 제거하고 사용자 지정하도록 안내합니다.
# %prod.으로 시작하는 모든 줄에서 맨 앞의 # 문자를 제거하여 주석을 해제해야 합니다.
%prod. 접두사는 prod 프로필에서 실행할 때 이러한 속성이 활성 상태임을 나타냅니다. 구성 프로필에 대한 자세한 내용은 Quarkus 설명서를 참조하세요.
데이터베이스 구성 검사
속성의 주석 처리를 제거한 후 src/main/resources/application.properties 파일의 데이터베이스 구성은 다음 예제와 같이 표시됩니다.
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=
%prod.quarkus.datasource.username=
%prod.quarkus.datasource.password=
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file
Azure Database for PostgreSQL 유연한 서버에서 암호 없는 인증을 사용할 때 필요하지 않으므로 %prod.quarkus.datasource.password 속성을 제거합니다. 다음 예제와 %prod.quarkus.datasource.jdbc.url 같이 다른 데이터베이스 연결 관련 속성을 %prod.quarkus.datasource.username 값으로 업데이트합니다. 최종 구성은 다음 예제와 같습니다.
# Database configurations
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://${AZURE_POSTGRESQL_HOST}:${AZURE_POSTGRESQL_PORT}/${AZURE_POSTGRESQL_DATABASE}?\
authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin\
&sslmode=require
%prod.quarkus.datasource.username=${AZURE_POSTGRESQL_USERNAME}
%prod.quarkus.hibernate-orm.database.generation=create
%prod.quarkus.hibernate-orm.sql-load-script=no-file
${AZURE_POSTGRESQL_HOST}
${AZURE_POSTGRESQL_PORT}값은 이 문서의 뒷부분에 ${AZURE_POSTGRESQL_DATABASE}${AZURE_POSTGRESQL_USERNAME}있는 Service Connector 암호 없는 확장을 사용하여 런타임에 Azure Container Apps 환경에서 제공됩니다.
일반적으로 데이터베이스에 유지되는 데이터가 삭제되고 프로덕션 환경의 샘플 데이터로 다시 채워질 것으로 예상하지 않습니다. 따라서 앱이 초기 시작 시 스키마가 없을 때만 스키마 quarkus.hibernate-orm.database.generation 를 만들 수 있도록 스키마가 지정된 create 것을 볼 수 있습니다. 또한 hibernate-orm.sql-load-scriptno-file지정되어 있으므로 데이터베이스는 샘플 데이터로 미리 채워지지 않습니다. 이 설정은 이전에 개발 모드에서 로컬로 앱을 실행한 경우와 다릅니다. 개발 모드의 기본값과 quarkus.hibernate-orm.database.generationhibernate-orm.sql-load-scriptdrop-and-create 각각에 대한 import.sql 값입니다. 즉, 앱은 항상 데이터베이스 스키마를 삭제하고 다시 만들고 import.sql 정의된 데이터를 로드합니다.
import.sql 파일은 Quarkus의 편의 시설입니다.
src/main/resources/import.sql 파일이 Quarkus jar에 있고 속성 값이 있는 hibernate-orm.sql-load-script경우 이 파일의 import.sql SQL DML 문은 앱의 시작 시간에 실행됩니다.
Azure Database for PostgreSQL 유연한 서버에서 로컬로 Quarkus 앱 테스트
Azure Container Apps에 Quarkus 앱을 배포하기 전에 Azure Database for PostgreSQL 유연한 서버 인스턴스에 대한 연결을 로컬로 테스트합니다.
먼저 다음 명령을 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스 방화벽 규칙에 로컬 IP 주소를 추가합니다.
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az postgres flexible-server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
다음으로 이전 터미널에서 다음 환경 변수를 설정합니다. 이러한 환경 변수는 로컬로 실행되는 Quarkus 앱에서 Azure Database for PostgreSQL 유연한 서버 인스턴스에 연결하는 데 사용됩니다.
export AZURE_POSTGRESQL_HOST=${DB_SERVER_NAME}.postgres.database.azure.com
export AZURE_POSTGRESQL_PORT=5432
export AZURE_POSTGRESQL_DATABASE=${DB_NAME}
export AZURE_POSTGRESQL_USERNAME=${ENTRA_ADMIN_NAME}
Quarkus 앱을 로컬로 실행하여 Azure Database for PostgreSQL 유연한 서버 인스턴스에 대한 연결을 테스트합니다. 다음 명령을 사용하여 프로덕션 모드에서 앱을 시작합니다.
mvn clean package -DskipTests
java -jar target/quarkus-app/quarkus-run.jar
Todo 애플리케이션에 액세스하려면 http://localhost:8080에서 새 웹 브라우저를 여세요. Todo 항목 없이 개발 모드에서 로컬로 앱을 실행했을 때와 동일한 Todo 앱이 표시됩니다.
앱을 중지하려면 Control+C누릅니다.
컨테이너 이미지를 빌드하고 컨테이너 레지스트리에 푸시
이제 다음 명령을 사용하여 애플리케이션 자체를 빌드합니다. 이 명령은 Jib 확장을 사용하여 컨테이너 이미지를 빌드합니다.
export TODO_QUARKUS_IMAGE_NAME=todo-quarkus-aca
export TODO_QUARKUS_IMAGE_TAG=${LOGIN_SERVER}/${TODO_QUARKUS_IMAGE_NAME}:1.0
quarkus build -Dquarkus.container-image.build=true -Dquarkus.container-image.image=${TODO_QUARKUS_IMAGE_TAG} --no-tests
출력은 BUILD SUCCESS로 끝나야 합니다.
다음 예제와 같이 docker CLI(명령줄)를 사용하여 컨테이너 이미지가 생성되는지 여부를 확인할 수 있습니다.
docker images | grep ${TODO_QUARKUS_IMAGE_NAME}
출력은 다음 예제와 유사합니다.
<LOGIN_SERVER_VALUE>/todo-quarkus-aca 1.0 0804dfd834fd 2 minutes ago 407MB
다음 명령을 사용하여 컨테이너 이미지를 컨테이너 레지스트리에 푸시합니다.
docker push ${TODO_QUARKUS_IMAGE_TAG}
출력은 다음 예시와 유사하게 표시됩니다.
The push refers to repository [<LOGIN_SERVER_VALUE>/todo-quarkus-aca]
188a550fce3d: Pushed
4e3afea591e2: Pushed
1db0eba807a6: Pushed
c72d9ccda0b2: Pushed
d7819b8a2d18: Pushed
d0e5cba6b262: Pushed
e0bac91f0f10: Pushed
1.0: digest: sha256:f9ccb476e2388efa0dfdf817625a94f2247674148a69b7e4846793e63c8be994 size: 1789
Azure Container Apps에 Quarkus 앱 배포
이제 앱 이미지를 컨테이너 레지스트리에 푸시했으므로 다음 명령을 사용하여 컨테이너 레지스트리에서 이미지를 끌어와서 앱을 실행하는 Azure Container Apps 인스턴스를 만듭니다.
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--image $TODO_QUARKUS_IMAGE_TAG \
--environment $ACA_ENV \
--registry-server $LOGIN_SERVER \
--registry-identity system \
--target-port 8080 \
--ingress 'external' \
--min-replicas 1
성공한 출력은 속성을 "type": "Microsoft.App/containerApps"포함하는 JSON 개체입니다.
그런 다음, 다음 단계를 사용하여 Service Connector를 사용하여 Azure Database for PostgreSQL 유연한 서버 인스턴스를 컨테이너 앱에 연결합니다.
다음 명령을 사용하여 Azure CLI에 대한 서비스 커넥터 암호 없는 확장을 설치합니다.
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true다음 명령을 사용하여 시스템 할당 관리 ID를 사용하여 데이터베이스를 컨테이너 앱에 연결합니다.
az containerapp connection create postgres-flexible \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACA_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $DB_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $ACA_NAME성공한 출력은 속성을
"type": "microsoft.servicelinker/linkers"포함하는 JSON 개체입니다.
다음 명령을 사용하여 Todo 애플리케이션에 액세스하는 정규화된 URL을 가져옵니다.
export QUARKUS_URL=https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn -o tsv)
echo $QUARKUS_URL
새 웹 브라우저를 ${QUARKUS_URL} 값으로 엽니다. 웹 페이지가 올바르게 렌더링되지 않으면 잠시 기다렸다가 페이지를 새로 고칩니다.
그런 다음 텍스트가 Deployed the Todo app to Container Apps인 새 할 일 항목을 추가합니다. 완료된 것으로 표시하려면 이 항목을 선택합니다.
다음 예제와 같이 RESTful API(/api)에 액세스하여 Azure Database for PostgreSQL에 저장된 모든 할 일 항목을 가져옵니다.
curl --verbose -k ${QUARKUS_URL}/api | jq .
출력은 다음 예제와 같아야 합니다.
* Connected to <aca-name>.<random-id>.eastus.azurecontainerapps.io (20.231.235.79) port 443 (#0)
> GET /api HTTP/2
> Host: <aca-name>.<random-id>.eastus.azurecontainerapps.io
> user-agent: curl/7.88.1
> accept: */*
>
< HTTP/2 200
< content-length: 88
< content-type: application/json;charset=UTF-8
<
[
{
"id": 1,
"title": "Deployed the Todo app to Container Apps",
"completed": true,
"order": 1,
"url": null
}
]
데이터베이스가 업데이트되었는지 확인
다음 명령을 사용하여 데이터베이스가 새 할 일 항목으로 업데이트되었는지 확인합니다.
export ACCESS_TOKEN=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
az postgres flexible-server execute \
--admin-user $ENTRA_ADMIN_NAME \
--admin-password $ACCESS_TOKEN \
--name $DB_SERVER_NAME \
--database-name $DB_NAME \
--querytext "select * from todo;"
확장을 설치하라는 메시지가 표시되면 Y에 응답합니다.
출력은 다음 예제와 유사해야 하며 이전에 표시된 Todo 앱 GUI에 동일한 항목을 포함해야 합니다.
Successfully connected to <DB_SERVER_NAME>.
Ran Database Query: 'select * from todo;'
Retrieving first 30 rows of query output, if applicable.
Closed the connection to <DB_SERVER_NAME>
[
{
"completed": true,
"id": 1,
"ordering": 1,
"title": "Deployed the Todo app to Container Apps",
"url": null
}
]
완료되면 다음 명령을 사용하여 로컬 IP 주소가 Azure Database for PostgreSQL 유연한 서버 인스턴스에 액세스할 수 있도록 하는 방화벽 규칙을 삭제합니다.
az postgres flexible-server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--name $DB_SERVER_NAME \
--rule-name $DB_SERVER_NAME-database-allow-local-ip \
--yes
리소스 정리
Azure 요금을 방지하려면 불필요한 리소스를 정리해야 합니다. 클러스터가 더 이상 필요하지 않은 경우 az group delete 명령을 사용하여 리소스 그룹, 컨테이너 서비스, 컨테이너 레지스트리 및 모든 관련 리소스를 제거합니다.
git reset --hard
docker rmi ${TODO_QUARKUS_IMAGE_TAG}
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Quarkus 개발 모드에서 생성된 컨테이너 이미지와 docker rmi 컨테이너 이미지를 삭제 postgres 하는 데 사용할 testcontainers 수도 있습니다.