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 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

샘플 앱 다운로드

이 자습서를 수행하려면 컨테이너화할 샘플 애플리케이션이 필요합니다. 샘플 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. Azure 리소스 그룹을 만듭니다.

    az group create \
        --name <resourceGroupName> \
        --location eastus
    
  2. Azure Container Registry를 만듭니다.

    az acr create \
        --resource-group <resourceGroupName> \
        --name <azureContainerRegistryName> \
        --sku basic \
        --admin-enabled true
    
  3. Azure 컨테이너 인스턴스에 로그인합니다.

    az acr login --name <azureContainerRegistryName>  
    

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

Docker 이미지 빌드 및 푸시

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

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

  1. 로그인 서버 정보를 가져옵니다.

    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. 이미지가 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을 배포하려면 배포할 환경이 필요합니다.

다음 명령을 실행하여 Azure Container Apps 환경을 만듭니다.

  1. Azure Container Registry 관리자 암호를 가져옵니다.

    ACR_PASSWORD=$(az acr credential show \
        --name <azureContainerRegistryName> \
        --query 'passwords[0].value' \
        --out tsv)
    
  2. Container Apps 환경을 만듭니다.

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

Azure Container Apps에 배포

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

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

az containerapp create \
    --name <containerAppName> \
    --resource-group <resourceGroupName> \
    --environment <containerAppEnvName> \
    --image "<loginServer>/<imageName>:latest" \
    --registry-server "<loginServer>" \
    --registry-username "<azureContainerRegistryName>" \
    --registry-password "$ACR_PASSWORD" \
    --target-port 8080 \
    --ingress 'external'

웹앱 URL 확인

다음 Azure CLI 명령을 실행하여 웹 애플리케이션 수신의 FQDN(정규화된 Do기본 이름)을 가져옵니다.

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 \
    --name <resourceGroupName> \
    --no-wait

다음 단계