Share via


자습서: Azure Resource Manager 또는 Bicep 템플릿을 사용하여 Azure Container Apps에 Dapr 애플리케이션 배포

Dapr(Distributed Apps Runtime)은 복원력이 있는 상태 비저장 및 상태 저장 마이크로 서비스를 빌드하는 데 도움이 되는 런타임입니다. 이 자습서에서는 샘플 Dapr 애플리케이션이 ARM(Azure Resource Manager) 또는 Bicep 템플릿을 통해 Azure Container Apps에 배포됩니다.

다음 방법에 대해 설명합니다.

  • Dapr 상태 저장소로 사용할 Azure Blob Storage 만들기
  • 컨테이너 앱을 호스트하는 Container Apps 환경 배포
  • 두 개의 dapr 지원 컨테이너 앱 배포: 주문을 생성하는 앱과 주문을 사용하고 저장하는 앱
  • 컨테이너 앱에 사용자 할당 ID를 할당하고 Dapr 상태 저장소에 인증하기 위한 적절한 역할 할당 제공
  • 두 마이크로 서비스 간의 상호 작용을 확인합니다.

Azure Container Apps를 사용하면 마이크로 서비스를 빌드할 때 완전 관리형 버전의 Dapr API를 얻을 수 있습니다. Azure Container Apps에서 Dapr을 사용하는 경우 다양한 기능을 제공하는 사이드카를 마이크로 서비스와 나란히 실행할 수 있습니다.

이 자습서에서는 Dapr Hello World 빠른 시작에서 솔루션을 배포합니다.

애플리케이션은 다음과 같이 구성되어 있습니다.

  • 메시지를 생성하는 클라이언트(Python) 컨테이너 앱.
  • 상태 저장소에서 해당 메시지를 사용하고 유지하는 서비스(노드) 컨테이너 앱

다음 아키텍처 다이어그램에서는 이 자습서를 구성하는 구성 요소를 보여줍니다.

Azure Container Apps의 Dapr Hello World 마이크로서비스에 대한 아키텍처 다이어그램

필수 조건

  • 활성 구독이 있는 Azure 계정이 필요합니다. 계정이 아직 없는 경우 체험 계정을 만들 수 있습니다.
  • GitHub 계정. 아직 없는 경우 체험해 보세요.

설정

CLI에서 Azure에 로그인하려면 다음 명령을 실행하고 프롬프트에 따라 인증 프로세스를 완료합니다.

az login

최신 버전의 CLI를 실행하고 있는지 확인하려면 업그레이드 명령을 실행합니다.

az upgrade

그런 다음 CLI용 Azure Container Apps 확장을 설치하거나 업데이트합니다.

az extension add --name containerapp --upgrade

이제 현재 확장 또는 모듈이 설치되었으므로 Microsoft.AppMicrosoft.OperationalInsights 네임스페이스를 등록합니다.

참고 항목

Azure Container Apps 리소스가 Microsoft.Web 네임스페이스에서 Microsoft.App 네임스페이스로 마이그레이션되었습니다. 자세한 내용은 2022년 3월 Microsoft.Web에서 Microsoft.App으로 네임스페이스 마이그레이션을 참조하세요.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

환경 변수 설정

다음 환경 변수를 설정합니다. <자리 표시자>는 해당 값으로 바꿉니다.

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Azure 리소스 그룹 만들기

컨테이너 앱 배포와 관련된 서비스를 구성하는 리소스 그룹을 만듭니다.

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

GitHub 리포지토리 준비

솔루션을 배포하는 데 사용되는 ARM 및 Bicep 템플릿이 있는 리포지토리로 이동합니다.

리포지토리 맨 위에 있는 포크 단추를 선택하여 리포지토리를 계정에 포크합니다.

이제 포크를 복제하여 로컬로 작업할 수 있습니다.

다음 git 명령을 사용하여 포크된 리포지토리를 acadapr-templates 디렉터리에 복제합니다.

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

배포

템플릿은 다음을 배포합니다.

  • Container Apps 환경
  • Container Apps 환경과 연결된 Log Analytics 작업 영역
  • 분산 추적용 Application Insights 리소스
  • Blob Storage 계정 및 기본 스토리지 컨테이너
  • Blob Storage 계정에 대한 Dapr 구성 요소
  • 노드, 사용자가 할당한 관리 ID가 있는 Dapr 지원 컨테이너 앱: hello-k8s-node
  • python, Dapr 지원 컨테이너 앱: hello-k8s-python
  • Blob Storage에 연결하기 위해 Dapr 구성 요소에서 사용하는 노드 앱에 대한 Active Directory 역할 할당

acadapr-templates 디렉터리로 이동하여 다음 명령을 실행합니다.

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

경고(BCP081)가 표시될 수 있습니다. 이 경고는 애플리케이션의 성공적인 배포에 영향을 주지 않습니다.

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

이 명령은 다음을 배포합니다.

  • hello world Dapr 솔루션을 호스트하기 위한 Container Apps 환경 및 연결된 Log Analytics 작업 영역
  • Dapr 분산 추적용 Application Insights 인스턴스
  • "appId": "nodeapp""appPort": 3000을 이용해 Dapr를 사용하도록 설정하고 구성한 targetPort: 3000에서 실행되는 nodeapp 앱 서버와 스토리지 데이터 기여자 역할 할당을 통해 Azure Blob Storage에 대한 액세스 권한이 있는 사용자 할당 ID
  • 상태를 저장하기 위해 nodeapp에서 사용할 범위가 지정된 "type": "state.azure.blobstorage"의 Dapr 구성 요소
  • Dapr 서비스 호출을 사용해 nodeapp 서비스를 호출하는 Dapr 지원 헤드리스 pythonapp

결과 확인

성공적인 상태 지속성 확인

Azure Storage 계정의 데이터를 확인하여 서비스가 올바르게 작동하는지 확인할 수 있습니다.

  1. 브라우저에서 Azure Portal을 엽니다.

  2. 리소스 그룹에서 새로 만든 스토리지 계정으로 이동합니다.

  3. 왼쪽 메뉴에서 컨테이너를 선택합니다.

  4. 만든 컨테이너를 선택합니다.

  5. 컨테이너에서 order라는 파일을 볼 수 있는지 확인합니다.

  6. 파일 선택.

  7. 편집 탭을 선택합니다.

  8. 새로 고침 단추를 선택하여 업데이트를 관찰합니다.

로그 보기

컨테이너 앱을 통해 기록된 데이터는 Log Analytics 작업 영역의 ContainerAppConsoleLogs_CL 사용자 지정 테이블에 저장됩니다. Azure Portal을 통해 또는 명령줄에서 로그를 볼 수 있습니다. 로그된 데이터를 쿼리하기 전에 분석이 처음으로 도착할 때까지 몇 분 정도 기다립니다.

다음 명령을 사용하여 bash 또는 PowerShell에서 로그를 볼 수 있습니다.

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
  --workspace "$LOG_ANALYTICS_WORKSPACE_CLIENT_ID" \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | take 5" \
  --out table

다음 출력은 명령에서 예상되는 응답 형식을 보여 줍니다.

ContainerAppName_s    Log_s                            TableName      TimeGenerated
--------------------  -------------------------------  -------------  ------------------------
nodeapp               Got a new order! Order ID: 61    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Got a new order! Order ID: 62    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Got a new order! Order ID: 63    PrimaryResult  2021-10-22T22:45:44.618Z

리소스 정리

완료되면 다음 명령을 실행하여 이 자습서에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.

az group delete \
  --resource-group $RESOURCE_GROUP

참고 항목

pythonapp은 구성된 상태 저장소에 유지되는 메시지를 사용하여 nodeapp을 지속적으로 호출하므로 지속적인 청구 가능 작업을 방지하려면 이러한 정리 단계를 완료하는 것이 중요합니다.


문제가 있나요? Azure Container Apps 리포지토리에서 문제를 열어 GitHub에 알려주세요.

다음 단계