다음을 통해 공유


Azure Container Apps에 Go 웹앱 배포

이 빠른 시작에서는 컨테이너화된 Go 웹앱을 Azure Container Apps에 배포하는 방법을 알아봅니다.

Azure Container Apps 를 사용하면 복잡한 클라우드 인프라 또는 복잡한 컨테이너 오케스트레이터를 관리할 필요 없이 런타임 또는 프로그래밍 모델에 대한 걱정 없이 컨테이너에 패키지된 애플리케이션 코드를 실행할 수 있습니다. Azure Container Apps의 일반적인 용도로는 API 엔드포인트 배포, 백그라운드 처리 애플리케이션 호스팅, 이벤트 기반 처리 및 마이크로 서비스 실행이 있습니다.

이 자습서에 따라 Docker 이미지를 빌드하고, 해당 이미지를 Azure Container Registry에 배포하고, Go 웹앱을 Azure Container Apps에 배포하는 방법을 안내합니다.

필수 조건

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

설정

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

az login

최신 버전의 CLI를 실행하려면 az upgrade 명령을 실행합니다.

az upgrade

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

Azure CLI에서 명령을 실행할 az containerapp 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 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 네임스페이스를 등록합니다.

참고 항목

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

샘플 앱 다운로드

이 자습서를 수행하려면 컨테이너화할 샘플 애플리케이션이 필요합니다. 샘플 Go 웹앱은 msdocs-go-webapp-quickstart GitHub 리포지토리에 제공됩니다. 샘플 애플리케이션을 로컬 워크스테이션에 다운로드하거나 복제합니다.

git clone https://github.com/Azure-Samples/msdocs-go-webapp-quickstart.git

cd msdocs-go-webapp-quickstart

Azure Container Registry 만들기

Azure Container Registry 를 사용하면 컨테이너 이미지를 빌드, 저장 및 관리할 수 있습니다. 앞에서 언급한 샘플 리포지토리에 제공된 샘플 Go 웹앱이 포함된 Docker 이미지를 저장하는 데 사용합니다.

다음 명령을 실행하여 Azure Container Registry를 만듭니다.

  1. az group create 명령을 사용하여 Azure 리소스 그룹을 만듭니다.

    
    
    az group create \
        --name <resourceGroupName> \
        --location eastus
    
  2. az acr create 명령을 사용하여 Azure Container Registry를 만듭니 다.

    az acr create \
        --resource-group <resourceGroupName> \
        --name <azureContainerRegistryName> \
        --sku basic
    
  3. az acr login 명령을 사용하여 Azure 컨테이너 인스턴스에 로그인 합니다.

    az acr login --name <azureContainerRegistryName>  
    

<resourceGroupName><azureContainerRegistryName>을 해당 값으로 바꿉니다. Azure Container Registry 이름은 전역적으로 고유해야 합니다.

참고 항목

명령을 실행할 az acr login 때 다음과 유사한 오류가 발생하는 경우 docker deamon이 시스템에서 실행되고 있는지 확인합니다.

You may want to use 'az acr login -n <azureContainerRegistryName> --expose-token' to get an access token, which does not require Docker to be installed.
2024-09-12 17:25:25.127779 An error occurred: DOCKER_COMMAND_ERROR

Docker 이미지 빌드 및 푸시

Azure Container Registry를 만든 후에는 샘플 Go 웹앱의 Docker 이미지를 빌드하고 푸시합니다.

다음 명령을 실행하여 이미지를 빌드하고 레지스트리에 푸시합니다.

  1. az acr show 명령을 사용하여 로그인 서버 정보를 가져옵니다.

    az acr show \
        --name <azureContainerRegistryName> \
        --resource-group <resourceGroupName> \
        --query loginServer \
        --output tsv  
    
  2. Docker 이미지를 로컬로 빌드합니다.

    docker build -t <loginServer>/<imageName>:latest .
    
  3. Azure Container Registry로 Docker 이미지를 푸시합니다.

    docker push <loginServer>/<imageName>:latest
    
  4. az acr repository list 명령을 사용하여 이미지가 Azure Container Registry에 성공적으로 푸시되었는지 확인합니다.

    az acr repository list \
        --name <azureContainerRegistryName> \
        --output table
    

loginServer, imageNameazureContainerRegistryName을 적절한 값으로 바꿉니다. 이미지 이름은 Azure Container Registry로 푸시되고 나중에 Azure Container Apps에 배포하는 데 사용되는 Docker 이미지입니다.

이제 Azure Container Registry에서 사용할 수 있는 이미지가 있으므로 Azure Container App 및 해당 환경을 배포할 준비가 되었습니다.

Azure Container Apps 환경 만들기

Azure Container Apps에는 컨테이너 오케스트레이터의 복잡성이 없지만 Azure Container Apps 환경이 들어오는 보안 경계를 설정하는 방법이 여전히 필요합니다. 동일한 환경에 배포된 Container Apps는 동일한 가상 네트워크를 공유하고 동일한 Log Analytics 작업 영역에 로그를 씁니다. Azure Container App을 배포하려면 배포할 환경이 필요합니다.

  • az containerapp env create 명령을 실행하여 Azure Container Apps 환경을 만듭니다.

    az containerapp env create \
        --name <containerAppEnvName> \
        --resource-group <resourceGroupName> \
        --location "East US"
    

Azure Container Apps에 배포

이 시점에서 Azure Container Registry를 만들고, Docker 이미지를 빌드 및 푸시하고, Azure Container Apps 환경을 만들었습니다. 남은 것은 애플리케이션을 배포하는 것입니다.

az containerapp create 명령을 실행하여 Azure Container Apps에 Go 웹앱을 배포합니다.

az containerapp create \
    --name <containerAppName> \
    --resource-group <resourceGroupName> \
    --environment <containerAppEnvName> \
    --image "<loginServer>/<imageName>:latest" \
    --registry-server "<loginServer>" \
    --registry-identity system \
    --target-port 8080 \
    --ingress external

매개 변수는 --registry-identity system 컨테이너 앱에서 시스템 할당 관리 ID 를 구성합니다. 컨테이너 앱은 보안이 떨어지는 사용자 이름/암호 대신 이 ID를 사용하여 컨테이너 레지스트리로 인증합니다. 또한 이 명령은 레지스트리에서 이미지를 끌어올 권한이 있도록 ID에 대한 역할 할당을 자동으로 만듭니다.AcrPull 인증 및 권한 부여에 관리 ID를 사용하려면 레지스트리가 Azure Container Registry여야 합니다.

웹앱 URL 확인

az containerapp show 명령을 실행하여 웹 애플리케이션 수신의 FQDN(정규화된 도메인 이름)을 가져옵니다.

APP_FQDN=$(az containerapp show \
    --name <containerAppName> \
    --resource-group <resourceGroupName> \
    --query properties.configuration.ingress.fqdn \
    --output tsv)

다음으로 FQDN에 대해 curl 명령을 실행하고 웹 사이트의 HTML을 반영하는 출력을 확인합니다.

curl "https://$APP_FQDN"

리소스 정리

샘플 앱을 마쳤으면 Azure에서 앱에 대한 모든 리소스를 제거해도 됩니다. 이렇게 하면 지속적인 요금이 발생하지 않고 Azure 구독이 깔끔하게 유지됩니다. 리소스 그룹을 제거하면 리소스 그룹의 모든 리소스도 제거되며 이것이 앱에 대한 모든 Azure 리소스를 제거하는 가장 빠른 방법입니다.

az group delete 명령을 실행하여 리소스 그룹 및 해당 리소스를 삭제합니다.

az group delete \
    --name <resourceGroupName> \
    --no-wait

다음 단계