연습 - Azure Container Apps 설정

완료됨

이 단원에서는 애플리케이션용 리소스가 포함된 Azure 리소스 그룹을 만듭니다. 그런 다음 Azure CLI를 사용하여 PostgreSQL 데이터베이스를 설정합니다. 마지막으로 원격 PostgreSQL 데이터베이스에 액세스하도록 Quarkus 애플리케이션을 구성합니다. 선택한 터미널을 사용하여 명령을 실행합니다.

작업 환경 준비

몇 가지 환경 변수를 설정해야 합니다. 다음은 만들 변수에 대한 몇 가지 참고 사항입니다.

변수 Description
AZ_PROJECT 프로젝트의 이름입니다. 이 값을 고유하게 유지하려면 AZ_PROJECT_<your initials>를 사용하는 것이 좋습니다.
AZ_RESOURCE_GROUP 리소스를 보유하는 리소스 그룹의 이름입니다.
AZ_LOCATION Azure 지역. 거주지와 가까운 지역을 이용하는 것이 좋습니다. 사용 가능한 지역 목록을 보려면 명령 프롬프트에 az account list-locations를 입력합니다.
AZ_CONTAINERAPP 컨테이너를 보유하는 Azure Container Apps 인스턴스의 이름입니다.
AZ_CONTAINERAPP_ENV Azure Container Apps 환경의 이름입니다.
AZ_POSTGRES_SERVER_NAME PostgreSQL 서버의 이름입니다. 영숫자가 아닌 문자(-, _, !, $, #, %)는 허용되지 않습니다. 이름은 Azure 전체에서 고유해야 합니다. 반드시 고유 식별자를 사용합니다.
AZ_POSTGRES_DB_NAME PostgreSQL 데이터베이스 이름입니다. PostgreSQL 데이터베이스의 기본 이름은 postgres입니다.
AZ_POSTGRES_USERNAME PostgreSQL 데이터베이스 서버의 기본 관리 사용자 이름입니다.
AZ_POSTGRES_PASSWORD PostgreSQL 데이터베이스 서버의 기본 암호입니다. 보안 암호를 사용합니다.

참고 항목

원하는 방식으로 Azure 리소스의 이름을 지정할 수 있지만 Azure 리소스의 약어 예를 검토하는 것이 좋습니다. 이 문서에서는 다양한 Azure 리소스에 대한 약어 예를 제공합니다(예: 리소스 그룹의 경우 rg, Container Apps의 경우 ca).

다음 명령을 사용하여 변수를 설정합니다. 앞의 표에 설명된 대로 값을 수정해야 합니다.

export AZ_PROJECT_<your initials>="azure-deploy-quarkus"
export AZ_RESOURCE_GROUP="rg${AZ_PROJECT_<your initials>}"
export AZ_LOCATION="eastus"
export AZ_CONTAINERAPP="ca${AZ_PROJECT_<your initials>}"
export AZ_CONTAINERAPP_ENV="cae${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_DB_NAME="postgres${AZ_PROJECT_<your initials>}"
export AZ_POSTGRES_USERNAME="<user-name>"
export AZ_POSTGRES_PASSWORD="<secure-password>"
export AZ_POSTGRES_SERVER_NAME="psql${AZ_PROJECT_<your initials>}"

이러한 환경 변수는 이 모듈의 나머지 부분에서 사용됩니다.

다음으로, 리소스 그룹을 만듭니다.

az group create \
    --name $AZ_RESOURCE_GROUP \
    --location $AZ_LOCATION

Azure Database for PostgreSQL의 인스턴스 만들기

이제 관리 PostgreSQL 서버를 만들 예정입니다. 다음 명령을 실행하여 Azure Database for PostgreSQL의 소형 인스턴스를 만듭니다.

az postgres flexible-server create \
    --resource-group "$AZ_RESOURCE_GROUP" \
    --location "$AZ_LOCATION" \
    --name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --public-access "All" \
    --tier "Burstable" \
    --sku-name "Standard_B1ms" \
    --storage-size 32 \
    --version "16"

이 명령은 이전에 설정한 변수를 사용하는 소형 PostgreSQL 서버를 만듭니다.

PostgreSQL 데이터베이스에 액세스하도록 Quarkus 구성

이제 Quarkus 애플리케이션을 PostgreSQL 데이터베이스에 연결할 예정입니다. 이렇게 하려면 먼저 데이터베이스에 대한 연결 문자열을 가져와야 합니다.

export POSTGRES_CONNECTION_STRING=$(
    az postgres flexible-server show-connection-string \
    --server-name "$AZ_POSTGRES_SERVER_NAME" \
    --database-name "$AZ_POSTGRES_DB_NAME" \
    --admin-user "$AZ_POSTGRES_USERNAME" \
    --admin-password "$AZ_POSTGRES_PASSWORD" \
    --query "connectionStrings.jdbc" \
    --output tsv
)

export POSTGRES_CONNECTION_STRING_SSL="$POSTGRES_CONNECTION_STRING&ssl=true&sslmode=require"

echo "POSTGRES_CONNECTION_STRING_SSL=$POSTGRES_CONNECTION_STRING_SSL"

반환된 연결 문자열을 참고합니다.

PostgreSQL 데이터베이스에 연결하도록 Quarkus 애플리케이션 구성

PostgreSQL 데이터베이스에 대한 연결 문자열을 구성하려면 프로젝트의 src/main/resources 폴더에 있는 application.properties 파일을 업데이트합니다. 이렇게 하려면 quarkus.datasource.jdbc.url 속성을 이전에 출력된 $POSTGRES_CONNECTION_STRING_SSL 값으로 설정합니다. 연결 문자열의 &ssl=true&sslmode=require 부분은 드라이버가 Azure Database for PostgreSQL 요구 사항인 SSL을 사용하도록 합니다.

quarkus.hibernate-orm.database.generation=update
quarkus.datasource.jdbc.url=<the POSTGRES_CONNECTION_STRING_SSL value>

원격 데이터베이스 연결을 테스트하기 위해 Quarkus 애플리케이션을 로컬로 실행

애플리케이션을 로컬에서 실행하려면 다음 명령을 사용합니다.

./mvnw clean quarkus:dev    # On Mac or Linux
mvnw.cmd clean quarkus:dev  # On Windows

Quarkus가 실행 중일 때 별도의 터미널 창에서 다음 cURL 명령을 사용하여 몇 가지 할 일을 만듭니다.

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Quarkus MS Learn","details":"Take the MS Learn on deploying Quarkus to Azure Container Apps","done": "true"}' \
    http://127.0.0.1:8080/api/todos

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"Take Azure Container Apps MS Learn","details":"Take the ACA Learn module","done": "false"}' \
    http://127.0.0.1:8080/api/todos

다음으로, 할 일 앱에 정의된 GET 엔드포인트에 액세스하여 할 일이 데이터베이스에 있는지 확인합니다.

curl http://127.0.0.1:8080/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 Apps MS Learn",
      "details" : "Take the ACA Learn module",
      "done" : false,
      "id" : 2
   }
]

이 출력이 표시되면 Quarkus 애플리케이션이 성공적으로 실행되었으며 원격 PostgreSQL 데이터베이스에 연결된 것입니다.