다음을 통해 공유


자습서: Azure Container Apps에 앱 빌드 및 배포

이 문서에서는 원하는 프로그래밍 언어를 사용하여 원본 리포지토리에서 마이크로 서비스를 빌드하고 Azure Container Apps에 배포하는 방법을 보여 줍니다.

이는 Azure Container Apps 내에서 핵심 기능을 사용하는 방법을 안내하는 문서 시리즈 중 첫 번째 자습서입니다. 첫 번째 단계는 음악 앨범의 정적 컬렉션을 반환하는 백 엔드 웹 API 서비스를 만드는 것입니다.

참고 항목

빠른 시작: 리포지토리에서 Azure Container Apps에 앱 빌드 및 배포 문서의 지침에 따라 az containerapp up을 사용하여 이 앱을 빌드하고 배포할 수도 있습니다. az containerapp up 명령은 단일 명령을 사용하여 앱을 빌드하고 Azure Container Apps에 배포하는 빠르고 편리한 방법입니다. 그러나 컨테이너 앱에 대해 동일한 수준의 사용자 지정을 제공하지 않습니다.

시리즈의 다음 자습서에서는 Azure Container Apps에 프런트 엔드 웹 애플리케이션을 빌드하고 배포합니다.

다음 스크린샷은 이 자습서에서 배포된 앨범 API의 출력을 보여 줍니다.

앨범 API 엔드포인트의 응답 스크린샷.

필수 조건

이 프로젝트를 완료하려면 다음 항목이 필요합니다.

요건 지침
Azure 계정 계정이 없으면 무료 계정을 만듭니다. 계속하려면 Azure 구독에 대한 사용자 액세스 관리자 또는 소유자 권한이 필요합니다. 상황에 맞게 가장 제한적인 역할을 사용해야 합니다.

자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당Azure 역할, Microsoft Entra 역할 및 클래식 구독 관리자 역할을 참조하세요.
GitHub 계정 무료로 가입하세요.
git git 설치
Azure CLI Azure CLI를 설치합니다.
요건 지침
Azure 계정 계정이 없으면 무료 계정을 만듭니다. 계속 진행하려면 Azure 구독에 대한 기여자 또는 소유자 권한이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
GitHub 계정 무료로 가입하세요.
git git 설치
Azure CLI Azure CLI를 설치합니다.
Docker Desktop Docker는 macOS, WindowsLinux에서 Docker 환경을 구성하는 설치 프로그램을 제공합니다.

명령 프롬프트에서 docker를 입력하여 Docker가 실행 중인지 확인합니다.

설정

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

az login

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

az upgrade

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

Azure CLI에서 az containerapp 명령을 실행하거나 Azure PowerShell의 Az.App 모듈에서 cmdlet을 실행할 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있어야 합니다.

az extension add --name containerapp --upgrade

참고 항목

2024년 5월부터 Azure CLI 확장 기능은 기본적으로 미리 보기 기능을 사용하도록 설정하지 않습니다. Container Apps 미리 보기 기능에 액세스하려면 --allow-preview true를 사용하여 Container Apps 확장을 설치합니다.

az extension add --name containerapp --upgrade --allow-preview true

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

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

환경 변수 만들기

이제 Azure CLI 설정이 완료되었으므로 이 문서 전체에서 사용되는 환경 변수를 정의할 수 있습니다.

bash 셸에서 다음 변수를 정의합니다.

RESOURCE_GROUP="album-containerapps"
LOCATION="canadacentral"
ENVIRONMENT="env-album-containerapps"
API_NAME="album-api"
FRONTEND_NAME="album-ui"
GITHUB_USERNAME="<YOUR_GITHUB_USERNAME>"

이 명령을 실행하기 전에 <YOUR_GITHUB_USERNAME>을 GitHub 사용자 이름으로 바꿉니다.

다음으로 고유한 컨테이너 레지스트리 이름을 정의합니다.

ACR_NAME="acaalbums"$GITHUB_USERNAME

GitHub 리포지토리 준비

기본 설정 언어의 리포지토리로 이동하여 리포지토리를 포크합니다.

리포지토리를 계정에 포크하려면 앨범 API 리포지토리 상단에 있는 포크 단추를 선택합니다.

이제 샘플 리포지토리의 포크를 복제할 수 있습니다.

다음 git 명령을 사용하여 포크된 리포지토리를 code-to-cloud 폴더에 복제합니다.

git clone https://github.com/$GITHUB_USERNAME/containerapps-albumapi-csharp.git code-to-cloud

다음으로 디렉터리를 복제된 리포지토리의 루트로 변경합니다.

cd code-to-cloud/src

Azure 리소스 그룹 만들기

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

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

Azure Container Registry 만들기

  1. 앨범 API 컨테이너 이미지가 빌드된 후 리소스 그룹에 ACR(Azure Container Registry) 인스턴스를 만들어 저장합니다.

    az acr create \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION \
        --name $ACR_NAME \
        --sku Basic
    
  2. 컨테이너 레지스트리는 관리 ID를 사용하여 이미지를 끌어오기 위해 인증을 위해 ARM(Azure Resource Manager) 대상 그룹 토큰을 허용해야 합니다.

    다음 명령을 사용하여 ARM 토큰이 ACR(Azure Container Registry)에 액세스할 수 있는지 확인합니다.

    az acr config authentication-as-arm show --registry "$ACR_NAME"
    

    ARM 토큰이 허용되는 경우 명령은 다음을 출력합니다.

    {
      "status": "enabled"
    }
    

    status disabled경우 다음 명령을 사용하여 ARM 토큰을 허용합니다.

    az acr config authentication-as-arm update --registry "$ACR_NAME" --status enabled
    

사용자 할당 관리 ID 만들기

관리 자격 증명을 사용하지 않도록 하려면 인증에 관리 ID를 사용하여 Microsoft Azure Container Registry의 프라이빗 리포지토리에서 이미지를 끌어오면 됩니다. 가능하면 사용자 할당 관리 ID를 사용하여 이미지를 가져옵니다.

  1. 사용자가 할당한 관리 ID 만들기 다음 명령을 실행하기 전에 관리 ID의 이름을 선택하고 이름을 바꿉 \<PLACEHOLDER\> 니다.

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. ID의 리소스 ID를 가져옵니다.

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

애플리케이션 빌드

ACR 작업을 사용하면 Docker를 로컬에 설치하지 않고도 앨범 API용 Docker 이미지를 빌드하고 푸시할 수 있습니다.

ACR로 컨테이너 빌드

다음 명령을 실행하여 ACR을 사용하여 이미지 빌드 및 푸시 프로세스를 시작합니다. 명령 끝에 있는 .는 docker 빌드 컨텍스트를 나타냅니다. 즉, 이 명령은 Dockerfile이 있는 src 폴더 내에서 실행되어야 합니다.

az acr build --registry $ACR_NAME --image $API_NAME .

az acr build 명령의 출력은 Azure에 대한 소스 코드의 업로드 진행률과 docker builddocker push 작업의 세부 정보를 보여 줍니다.

애플리케이션 빌드

다음 단계에서는 Docker를 사용하여 컨테이너 이미지를 로컬로 빌드하고 새 컨테이너 레지스트리에 이미지를 푸시하는 방법을 보여 줍니다.

Docker로 컨테이너 빌드

다음 명령은 앨범 API용 컨테이너 이미지를 빌드하고 ACR 로그인 서버의 정규화된 이름으로 태그를 지정합니다. 명령 끝에 있는 .는 docker 빌드 컨텍스트를 나타냅니다. 즉, 이 명령은 Dockerfile이 있는 src 폴더 내에서 실행되어야 합니다.

docker build --tag $ACR_NAME.azurecr.io/$API_NAME .

컨테이너 레지스트리에 이미지 푸시

먼저 Azure Container Registry에 로그인합니다.

az acr login --name $ACR_NAME

이제 이미지를 레지스트리에 푸시합니다.

docker push $ACR_NAME.azurecr.io/$API_NAME

컨테이너 앱 환경 만들기

Azure Container Apps 환경은 Container Apps 그룹 주위의 보안 경계 역할을 합니다.

다음 명령을 사용하여 Container Apps 환경을 만듭니다.

az containerapp env create \
  --name $ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

컨테이너 앱에 이미지 배포

이제 환경이 만들어졌으므로 az containerapp create 명령을 사용하여 컨테이너 앱을 만들고 배포할 수 있습니다.

다음 명령을 사용하여 컨테이너 앱을 만들고 배포합니다.

az containerapp create \
  --name $API_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $ENVIRONMENT \
  --image $ACR_NAME.azurecr.io/$API_NAME \
  --target-port 8080 \
  --ingress external \
  --registry-server $ACR_NAME.azurecr.io \
  --user-assigned "$IDENTITY_ID" \
  --registry-identity "$IDENTITY_ID" \
  --query properties.configuration.ingress.fqdn
  • --ingressexternal로 설정하면 공용 인터넷에서 컨테이너 앱에 액세스할 수 있습니다.

  • target-port는 컨테이너가 요청을 수신하는 포트와 일치하도록 8080으로 설정됩니다.

  • query 속성이 없으면 az containerapp create에 대한 호출은 애플리케이션에 대한 풍부한 세부 정보를 포함하는 JSON 응답을 반환합니다. 쿼리 매개 변수를 추가하면 앱의 FQDN(정규화된 도메인 이름)에 대한 출력만 필터링됩니다.

  • 이 명령은 사용자가 할당한 관리 ID에 역할을 추가 acrPull 하므로 컨테이너 레지스트리에서 이미지를 끌어올 수 있습니다.

배포 확인

FQDN을 웹 브라우저에 복사합니다. 웹 브라우저에서 FQDN의 /albums 엔드포인트로 이동합니다.

앨범 API 엔드포인트의 응답 스크린샷.

리소스 정리

마이크로 서비스 간 통신 자습서를 계속 진행하지 않으려면 이 빠른 시작에서 만들어진 Azure 리소스를 제거할 수 있습니다. 다음 명령을 실행하여 이 빠른 시작에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.

az group delete --name $RESOURCE_GROUP

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

다음 단계

이 빠른 시작은 Azure Container Apps 내의 다양한 기능을 보여 주는 점진적 자습서 집합의 진입점입니다. 계속해서 이 문서에서 배포한 API를 호출하는 웹 프런트 엔드에서 통신을 사용하도록 설정하는 방법을 알아봅니다.