다음을 통해 공유


관리 ID로 Azure Container Apps 이미지 풀

관리자 자격 증명 사용을 방지하기 위해 인증에 관리 ID를 사용하여 Microsoft Azure Container Registry의 프라이빗 리포지토리에서 이미지를 가져올 수 있습니다.

사용자 할당 또는 시스템 할당 관리 ID를 사용하여 Azure Container Registry로 인증할 수 있습니다.

  • 사용자 할당 관리 ID를 사용하여 Azure Container Apps 외부에서 ID를 만들고 관리합니다. Azure Container Apps를 포함하여 여러 Azure 리소스에 할당할 수 있습니다.
  • 시스템 할당 관리 ID를 사용하면 Azure Container Apps에서 ID를 만들고 관리합니다. 컨테이너 앱에 연결되며 앱이 삭제되면 삭제됩니다.
  • 가능하다면 사용자가 할당한 관리 ID를 사용하여 이미지를 끌어와야 합니다.

Container Apps는 컨테이너가 시작될 때마다 이미지의 새 버전을 확인합니다. Docker 또는 Kubernetes 용어로 Container Apps는 각 컨테이너의 이미지 끌어오기 정책을 always로 설정합니다.

이 문서에서는 Azure Portal을 사용하여 사용자 할당 및 시스템 할당 관리 ID를 사용하여 프라이빗 Azure Container Registry 리포지토리에서 이미지를 가져오도록 컨테이너 앱을 구성하는 방법을 설명합니다.

사용자 할당 관리 ID

다음 단계에서는 사용자 할당 관리 ID를 사용하여 프라이빗 Azure Container Registry 리포지토리에서 이미지를 가져오도록 컨테이너 앱을 구성하는 프로세스를 설명합니다.

  1. 공용 이미지로 컨테이너 앱을 만듭니다.
  2. 컨테이너 앱에 사용자 할당 관리 ID를 추가합니다.
  3. 프라이빗 이미지와 사용자가 할당한 관리 ID로 컨테이너 앱 수정 버전을 만듭니다.

필수 조건

  • 활성 구독이 있는 Azure 계정.

  • 끌어오려는 이미지가 포함된 프라이빗 Azure Container Registry.

  • Azure Container Registry는 관리 ID를 사용하여 이미지를 끌어오기 위해 인증에 ARM 대상 토큰을 허용해야 합니다. 다음 명령을 사용하여 ARM 토큰이 ACR에 액세스할 수 있는지 확인합니다.

    az acr config authentication-as-arm show -r <REGISTRY>
    

    ARM 토큰이 허용되지 않는 경우 다음 명령을 사용하여 이를 허용할 수 있습니다.

    az acr config authentication-as-arm update -r <REGISTRY> --status enabled
    
  • 사용자가 할당한 관리 ID 만들기 자세한 내용은 사용자 할당 관리 ID 만들기를 참조하세요.

컨테이너 앱 만들기

다음 단계에서 기본 빠른 시작 이미지로 컨테이너 앱을 만듭니다.

  1. 포털 페이지로 이동합니다.

  2. 위쪽 검색 창에서 Container Apps를 검색합니다.

  3. 검색 결과에서 Container Apps를 선택합니다.

  4. 생성 단추를 선택합니다.

  5. 기본 사항 탭에서 다음 작업을 수행합니다.

    설정 작업
    구독 Azure 구독을 선택합니다.
    리소스 그룹 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
    컨테이너 앱 이름 컨테이너 앱 이름을 입력합니다.
    위치 위치를 선택합니다.
    컨테이너 앱 환경 만들기 새 환경을 만들거나 기존 환경을 선택합니다.
  6. 컨테이너 앱 만들기 페이지 하단에서 검토 + 만들기 단추를 선택합니다.

  7. 컨테이너 앱 만들기 창 하단에서 만들기 단추를 선택합니다.

컨테이너 앱 배포가 완료될 때까지 몇 분 정도 기다립니다. 배포가 완료되면 리소스로 이동을 선택합니다.

사용자 할당 관리 ID 추가

  1. 왼쪽 메뉴에서 ID를 선택합니다.
  2. 사용자 할당 탭을 선택합니다.
  3. 사용자가 할당한 관리 ID 추가 단추를 선택합니다.
  4. 구독을 선택합니다.
  5. 만든 ID를 선택합니다.
  6. 추가를 선택합니다.

컨테이너 앱 수정 버전 만들기

프라이빗 이미지 및 시스템 할당 관리 ID를 사용하여 컨테이너 앱 수정 버전을 만듭니다.

  1. 왼쪽 메뉴에서 수정 버전 관리를 선택합니다.

  2. 새 수정 버전 만들기를 선택합니다.

  3. 컨테이너 이미지 표에서 컨테이너 이미지를 선택합니다.

  4. 컨테이너 편집 대화 상자에 정보를 입력합니다.

    필드 작업
    이름 컨테이너 이름을 입력합니다.
    이미지 원본 Azure Container Registry를 선택합니다.
    인증 관리 ID를 선택합니다.
    ID 드롭다운 메뉴에서 만든 ID를 선택합니다.
    Registry 드롭다운 메뉴에서 사용하려는 레지스트리를 선택합니다.
    이미지 사용하려는 이미지의 이름을 입력합니다.
    이미지 태그. 가져오려는 이미지의 이름과 태그를 입력합니다.

    사용자가 할당한 관리 ID를 입력하는 컨테이너 편집 대화 상자의 스크린샷.

    참고 항목

    Azure Container Registry 레지스트리에서 관리자 자격 증명이 사용하도록 설정되지 않은 경우 경고 메시지가 표시되며 이미지 이름과 태그 정보를 수동으로 입력해야 합니다.

  5. 저장을 선택합니다.

  6. 새 수정 버전 만들기 및 배포 페이지에서 만들기를 선택합니다.

새 수정 버전이 만들어지고 배포됩니다. 포털은 자동으로 사용자 할당 관리 ID에 acrpull 역할을 추가하려고 시도합니다. 역할이 추가되지 않은 경우 수동으로 추가할 수 있습니다.

컨테이너 앱 페이지의 ID 창에서 ID를 확인하여 역할이 추가되었는지 확인할 수 있습니다.

  1. 왼쪽 메뉴에서 ID를 선택합니다.
  2. 사용자 할당 탭을 선택합니다.
  3. 사용자 할당 관리 ID를 선택합니다.
  4. 관리 ID 리소스 페이지의 메뉴에서 Azure 역할 할당을 선택합니다.
  5. acrpull 역할이 사용자 할당 관리 ID에 할당되었는지 확인합니다.

프라이빗 이미지로 컨테이너 앱 만들기

공용 이미지로 컨테이너 앱을 만드는 것으로 시작하려고 하지 않은 경우 다음 작업도 수행할 수 있습니다.

  1. 사용자가 할당한 관리 ID를 만듭니다.
  2. 사용자가 할당한 관리 ID에 acrpull 역할을 추가합니다.
  3. 프라이빗 이미지와 사용자가 할당한 관리 ID로 컨테이너 앱을 만듭니다.

이 방법은 IaC(코드 제공 인프라) 시나리오에서 일반적입니다.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 리소스 그룹을 제거하여 Azure Container Apps 인스턴스 및 모든 관련 서비스를 삭제할 수 있습니다.

Warning

리소스 그룹을 삭제하면 그룹의 모든 리소스가 삭제됩니다. 그룹에 다른 리소스가 있는 경우 해당 리소스도 삭제됩니다. 리소스를 유지하려면 컨테이너 앱 인스턴스와 컨테이너 앱 환경을 삭제할 수 있습니다.

  1. 개요 섹션에서 리소스 그룹을 선택합니다.
  2. 리소스 그룹 개요 위쪽에서 리소스 그룹 삭제 단추를 선택합니다.
  3. 확인 대화 상자에 리소스 그룹 이름을 입력합니다.
  4. 삭제를 선택합니다. 리소스 그룹을 삭제하는 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.

시스템 할당 관리 ID

Azure Portal에서 시스템 할당 관리 ID를 구성하는 방법은 사용자 할당 관리 ID를 구성하는 것과 동일합니다. 유일한 차이점은 사용자 할당 관리 ID를 만들 필요가 없다는 것입니다. 대신 컨테이너 앱을 만들 때 시스템 할당 관리 ID가 만들어집니다.

Azure Portal에서 시스템 할당 관리 ID를 구성하는 방법은 다음과 같습니다.

  1. 공용 이미지로 컨테이너 앱을 만듭니다.
  2. 프라이빗 이미지 및 시스템 할당 관리 ID를 사용하여 컨테이너 앱 수정 버전을 만듭니다.

필수 조건

컨테이너 앱 만들기

기본 빠른 시작 이미지로 컨테이너 앱을 만들려면 다음 단계를 따릅니다.

  1. 포털 페이지로 이동합니다.

  2. 위쪽 검색 창에서 Container Apps를 검색합니다.

  3. 검색 결과에서 Container Apps를 선택합니다.

  4. 생성 단추를 선택합니다.

  5. 기본 사항 탭에서 다음 작업을 수행합니다.

    설정 작업
    구독 Azure 구독을 선택합니다.
    리소스 그룹 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
    컨테이너 앱 이름 컨테이너 앱 이름을 입력합니다.
    위치 위치를 선택합니다.
    컨테이너 앱 환경 만들기 새 환경을 만들거나 기존 환경을 선택합니다.
  6. 컨테이너 앱 만들기 페이지 하단에서 검토 + 만들기 단추를 선택합니다.

  7. 컨테이너 앱 만들기 페이지 하단에서 만들기 단추를 선택합니다.

컨테이너 앱 배포가 완료될 때까지 몇 분 정도 기다립니다. 배포가 완료되면 리소스로 이동을 선택합니다.

수정 버전 편집 및 배포

프라이빗 Azure Container Registry의 이미지를 사용하도록 컨테이너를 편집하고 시스템 할당 ID를 사용하도록 인증을 구성합니다.

  1. 왼쪽 사이드 메뉴의 컨테이너.

  2. 편집 및 배포를 선택합니다.

  3. 목록에서 simple-hello-world-container 컨테이너를 선택합니다.

    설정 작업
    이름 컨테이너 앱 이름을 입력합니다.
    이미지 원본 Azure Container Registry를 선택합니다.
    인증 관리 ID를 선택합니다.
    ID 시스템 할당을 선택합니다.
    Registry 레지스트리 이름을 입력합니다.
    이미지 이미지 이름을 입력합니다.
    이미지 태그 태그를 입력합니다.

    시스템 할당 관리 ID로 컨테이너를 편집하는 스크린샷.

    참고 항목

    Azure Container Registry 레지스트리에서 관리자 자격 증명이 사용하도록 설정되지 않은 경우 경고 메시지가 표시되며 이미지 이름과 태그 정보를 수동으로 입력해야 합니다.

  4. 페이지 맨 아래에서 저장을 선택합니다.

  5. 새 수정 버전 만들기 및 배포 페이지 하단에서 만들기를 선택합니다.

  6. 몇 분 후 수정 버전 관리 페이지에서 새로 고침을 선택하여 새 수정 버전을 확인합니다.

새 수정 버전이 만들어지고 배포됩니다. 포털은 자동으로 시스템 할당 관리 ID에 acrpull 역할을 추가하려고 시도합니다. 역할이 추가되지 않은 경우 수동으로 추가할 수 있습니다.

컨테이너 앱 페이지의 ID 창에서 ID를 확인하여 역할이 추가되었는지 확인할 수 있습니다.

  1. 왼쪽 메뉴에서 ID를 선택합니다.
  2. 할당된 시스템 탭을 선택합니다.
  3. Azure 역할 할당을 선택합니다.
  4. acrpull 역할이 시스템 할당 관리 ID에 할당되었는지 확인합니다.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 리소스 그룹을 제거하여 Azure Container Apps 인스턴스 및 모든 관련 서비스를 삭제할 수 있습니다.

Warning

리소스 그룹을 삭제하면 그룹의 모든 리소스가 삭제됩니다. 그룹에 다른 리소스가 있는 경우 해당 리소스도 삭제됩니다. 리소스를 유지하려면 컨테이너 앱 인스턴스와 컨테이너 앱 환경을 삭제할 수 있습니다.

  1. 개요 섹션에서 리소스 그룹을 선택합니다.
  2. 리소스 그룹 개요 위쪽에서 리소스 그룹 삭제 단추를 선택합니다.
  3. 확인 대화 상자에 리소스 그룹 이름을 입력합니다.
  4. 삭제를 선택합니다. 리소스 그룹을 삭제하는 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.

이 문서에서는 관리 ID를 통해 Azure CLI 및 Azure PowerShell을 사용하여 프라이빗 Azure Container Registry 리포지토리에서 이미지를 가져오도록 컨테이너 앱을 구성하는 방법을 설명합니다.

필수 조건

필수 요소 설명
Azure 계정 활성 구독이 있는 Azure 계정. GitHub 계정이 없는 경우 무료로 만들 수 있습니다.
Azure CLI Azure CLI를 사용하는 경우 로컬 컴퓨터에 Azure CLI를 설치합니다.
Azure PowerShell PowerShell을 사용하는 경우 로컬 컴퓨터에 Azure PowerShell을 설치합니다. Install-Module -Name Az.App 명령을 실행하여 최신 버전의 Az.App 모듈이 설치되었는지 확인합니다.
Azure Container Registry 끌어오려는 이미지가 포함된 프라이빗 Azure Container Registry. 빠른 시작: Azure CLI를 사용하여 프라이빗 컨테이너 레지스트리 만들기 또는 빠른 시작: Azure PowerShell을 사용하여 프라이빗 컨테이너 레지스트리 만들기

설정

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

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

RESOURCE_GROUP="<YOUR_RESOURCE_GROUP_NAME>"
LOCATION="<YOUR_LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<YOUR_ENVIRONMENT_NAME>"
REGISTRY_NAME="<YOUR_REGISTRY_NAME>"
CONTAINERAPP_NAME="<YOUR_CONTAINERAPP_NAME>"
IMAGE_NAME="<YOUR_IMAGE_NAME>"

리소스 그룹이 이미 있는 경우 이 단계를 건너뜁니다. 그렇지 않으면 리소스 그룹을 만듭니다.

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

컨테이너 앱 환경 만들기

환경이 존재하지 않는 경우 다음 명령을 실행합니다.

환경을 만들려면 다음 명령을 실행합니다.

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

다음 섹션으로 계속 진행하여 사용자 할당 관리 ID를 구성하거나 시스템 할당 관리 ID 섹션으로 건너뜁니다.

사용자 할당 관리 ID

사용자 할당 관리 ID를 구성하려면 다음 프로시저를 따릅니다.

  1. 사용자가 할당한 관리 ID 만들기
  2. PowerShell을 사용하는 경우 레지스트리에 대한 acrpull 역할을 관리 ID에 할당합니다. Azure CLI는 이 할당을 자동으로 수행합니다.
  3. 사용자가 할당한 관리 ID로 인증된 프라이빗 레지스트리의 이미지를 사용하여 컨테이너 앱을 만듭니다.

사용자 할당 관리 ID 만들기

사용자가 할당한 관리 ID 만들기 다음 명령을 실행하기 전에 <PLACEHOLDERS>를 관리 ID의 이름으로 바꿉니다.

IDENTITY="<YOUR_IDENTITY_NAME>"
az identity create \
  --name $IDENTITY \
  --resource-group $RESOURCE_GROUP

ID의 리소스 ID를 가져옵니다.

IDENTITY_ID=`az identity show \
  --name $IDENTITY \
  --resource-group $RESOURCE_GROUP \
  --query id`

컨테이너 앱 만들기

ID로 인증된 프라이빗용 레지스트리의 이미지로 컨테이너 앱을 작성합니다.

ID의 리소스 ID를 복사하여 아래 명령의 <IDENTITY_ID> 자리 표시자에 붙여넣습니다. 이미지 태그가 latest이 아닌 경우 'latest'를 태그로 바꿉니다.

echo $IDENTITY_ID
az containerapp create \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --user-assigned <IDENTITY_ID> \
  --registry-identity <IDENTITY_ID> \
  --registry-server "$REGISTRY_NAME.azurecr.io" \
  --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME:latest"

정리

주의

다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 이 빠른 시작의 범위에 속하지 않는 리소스가 지정된 리소스 그룹에 있는 경우에도 해당 리소스가 삭제됩니다.

az group delete --name $RESOURCE_GROUP

시스템 할당 관리 ID

시스템 할당 ID를 구성하려면 다음을 수행해야 합니다.

  1. 공용 이미지로 컨테이너 앱을 만듭니다.
  2. 컨테이너 앱에 시스템 할당 관리 ID를 할당합니다.
  3. 프라이빗 이미지로 컨테이너 앱을 업데이트합니다.

컨테이너 앱 만들기

공용 이미지로 컨테이너를 만듭니다.

az containerapp create \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 80 \
  --ingress external

컨테이너 앱 업데이트

프라이빗 Container Registry의 이미지로 컨테이너 앱을 업데이트하고 시스템 할당 ID를 추가하여 Azure Container Registry 끌어오기를 인증합니다. 수신, 크기 조정 및 Dapr 설정과 같이 컨테이너 앱에 필요한 기타 설정을 포함할 수도 있습니다.

레지스트리 서버를 설정하고 컨테이너 앱에서 시스템 할당 관리 ID를 켭니다.

az containerapp registry set \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --identity system \
  --server "$REGISTRY_NAME.azurecr.io"
az containerapp update \
  --name $CONTAINERAPP_NAME \
  --resource-group $RESOURCE_GROUP \
  --image "$REGISTRY_NAME.azurecr.io/$IMAGE_NAME:latest"

정리

주의

다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 이 빠른 시작의 범위에 속하지 않는 리소스가 지정된 리소스 그룹에 있는 경우에도 해당 리소스가 삭제됩니다.

az group delete --name $RESOURCE_GROUP

이 문서에서는 Bicep 템플릿을 사용하여 컨테이너 앱을 구성하고 사용자가 할당한 관리 ID를 사용하여 프라이빗 Azure Container Registry 리포지토리에서 이미지를 끌어오는 방법을 설명합니다.

필수 조건

설정

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

Bicep 설치

Bicep이 설치되어 있지 않은 경우 다음과 같이 설치할 수 있습니다.

az bicep install

Bicep이 설치되어 있다면 최신 버전인지 확인합니다.

az bicep upgrade

자세한 내용은 Bicep 설치를 참조하세요.

환경 변수 설정

다음으로, 다음 환경 변수를 설정합니다. <>로 둘러싸인 자리 표시자를 원하는 값으로 바꿉니다.

RESOURCE_GROUP="<RESOURCE_GROUP_NAME>"
LOCATION="<LOCATION>"
REGISTRY_NAME="<REGISTRY_NAME>"
IMAGE_NAME="<IMAGE_NAME>"
IMAGE_TAG="<IMAGE_TAG>"
BICEP_TEMPLATE="<BICEP_TEMPLATE>"
CONTAINERAPPS_ENVIRONMENT="<ENVIRONMENT_NAME>"
CONTAINER_NAME="<CONTAINER_NAME>"
CONTAINERAPP_NAME="<CONTAINERAPP_NAME>"
USER_ASSIGNED_IDENTITY_NAME="<USER_ASSIGNED_IDENTITY_NAME>"
LOG_ANALYTICS_WORKSPACE_NAME="<LOG_ANALYTICS_WORKSPACE_NAME>"
APP_INSIGHTS_NAME="<APP_INSIGHTS_NAME>"
ACR_PULL_DEFINITION_ID="7f951dda-4ed3-4680-a7ca-43fe172d538d"

AcrPull 역할은 사용자에게 할당된 관리 ID에 레지스트리에서 이미지를 끌어올 수 있는 권한을 부여합니다.

Bicep 템플릿

다음 Bicep 템플릿을 복사하여 확장자 .bicep을 가진 파일로 저장합니다.

param environmentName string 
param logAnalyticsWorkspaceName string
param appInsightsName string
param containerAppName string 
param azureContainerRegistry string
param azureContainerRegistryImage string 
param azureContainerRegistryImageTag string
param acrPullDefinitionId string
param userAssignedIdentityName string
param location string = resourceGroup().location

resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2022-01-31-preview' = {
  name: userAssignedIdentityName
  location: location 
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, azureContainerRegistry, 'AcrPullTestUserAssigned')
  properties: {
    principalId: identity.properties.principalId  
    principalType: 'ServicePrincipal'
    // acrPullDefinitionId has a value of 7f951dda-4ed3-4680-a7ca-43fe172d538d
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', acrPullDefinitionId)
  }
}

resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
  name: logAnalyticsWorkspaceName
  location: location
  properties: any({
    retentionInDays: 30
    features: {
      searchVersion: 1
    }
    sku: {
      name: 'PerGB2018'
    }
  })
}

resource appInsights 'Microsoft.Insights/components@2020-02-02' = {
  name: appInsightsName
  location: location
  kind: 'web'
  properties: {
    Application_Type: 'web'
    WorkspaceResourceId: logAnalyticsWorkspace.id
  }
}

resource appEnvironment 'Microsoft.App/managedEnvironments@2022-06-01-preview' = {
  name: environmentName
  location: location
  properties: {
    daprAIInstrumentationKey: appInsights.properties.InstrumentationKey
    appLogsConfiguration: {
      destination: 'log-analytics'
      logAnalyticsConfiguration: {
        customerId: logAnalyticsWorkspace.properties.customerId
        sharedKey: logAnalyticsWorkspace.listKeys().primarySharedKey
      }
    }
  }
}

resource containerApp 'Microsoft.App/containerApps@2022-06-01-preview' = {
  name: containerAppName
  location: location
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${identity.id}': {}
    }
  }
  properties: {
    environmentId: appEnvironment.id
    configuration: {
      ingress: {
        targetPort: 8080
        external: true
      }
      registries: [
        {
          server: '${azureContainerRegistry}.azurecr.io'
          identity: identity.id
        }
      ]
    }
    template: {
      containers: [
        {
          image: '${azureContainerRegistry}.azurecr.io/${azureContainerRegistryImage}:${azureContainerRegistryImageTag}'
          name: '${azureContainerName}'
          resources: {
            cpu: 1
            memory: '2Gi'
          }
        }
      ]
      scale: {
        minReplicas: 1
        maxReplicas: 1
      }
    }
  }
}

output location string = location
output environmentId string = appEnvironment.id

컨테이너 앱 배포

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

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file "$BICEP_TEMPLATE" \
  --parameters environmentName="$CONTAINERAPPS_ENVIRONMENT" \
  logAnalyticsWorkspaceName="$LOG_ANALYTICS_WORKSPACE_NAME" \
  appInsightsName="$APP_INSIGHTS_NAME" \
  containerAppName="$CONTAINERAPP_NAME" \
  azureContainerRegistry="$REGISTRY_NAME" \
  azureContainerRegistryImage="$IMAGE_NAME" \
  azureContainerRegistryImageTag="$IMAGE_TAG" \
  azureContainerName="$CONTAINER_NAME" \
  acrPullDefinitionId="$ACR_PULL_DEFINITION_ID" \
  userAssignedIdentityName="$USER_ASSIGNED_IDENTITY_NAME" \
  location="$LOCATION"

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

  • Azure 리소스 그룹.
  • Container Apps 환경.
  • Container Apps 환경과 연결된 Log Analytics 작업 영역.
  • 분산 추적용 Application Insights 리소스.
  • 사용자가 할당한 관리 ID.
  • 이미지를 저장하는 컨테이너.
  • 이미지에 기반한 컨테이너 앱.

오류 Failed to parse '<YOUR_BICEP_FILE_NAME>', please check whether it is a valid JSON format이 발생하면 Bicep 템플릿 파일의 확장자가 .bicep인지 확인합니다.

추가 리소스

자세한 내용은 다음 항목을 참조하십시오.

다음 단계