다음을 통해 공유


배포를 실행하도록 컨테이너 이미지 구성

ADE(Azure 배포 환경)는 기본 IaC 템플릿 프레임워크를 사용하여 환경 정의를 구성할 수 있는 확장성 모델을 지원합니다. ACR(Azure Container Registry) 또는 Docker Hub와 같은 컨테이너 레지스트리에 사용자 지정 이미지를 저장한 다음 환경 정의에서 참조하여 환경을 배포할 수 있습니다.

이 문서에서는 사용자 지정 Bicep 컨테이너 이미지를 빌드하여 ADE에서 환경 정의를 배포하는 방법을 알아봅니다. Microsoft에서 제공하는 표준 이미지를 사용하는 방법 또는 Bicep IaC(Infrastructure-as-Code) 프레임워크를 사용하여 사용자 지정 이미지 프로비전 인프라를 구성하는 방법을 알아봅니다.

이 문서에서는 ADE(Azure Deployment Environments)를 사용하여 배포 환경을 만드는 사용자 지정 Terraform 컨테이너 이미지를 빌드하는 방법에 대해 알아봅니다. Terraform IaC(코드 제공 인프라) 프레임워크를 사용하여 인프라를 프로비전하기 위해 사용자 지정 이미지를 구성하는 방법을 알아봅니다.

이 문서에서는 ADE의 배포에 Pulumi를 활용하는 방법을 알아봅니다. Pulumi에서 제공하는 표준 이미지를 사용하는 방법 또는 Pulumi IaC(코드 제공 인프라) 프레임워크를 사용하여 인프라를 프로비전하기 위해 사용자 지정 이미지를 구성하는 방법을 알아봅니다.

필수 조건

ADE에서 컨테이너 이미지 사용

ADE에서 컨테이너 이미지를 사용하려면 다음 방식 중 하나를 사용할 수 있습니다.

  • 표준 컨테이너 이미지 사용 간단한 시나리오의 경우 ADE에서 제공하는 표준 ARM-Bicep 컨테이너 이미지를 사용합니다.
  • 사용자 지정 컨테이너 이미지 만들기 더 복잡한 시나리오의 경우 특정 요구 사항을 충족하는 사용자 지정 컨테이너 이미지를 만듭니다.

표준 컨테이너 이미지 사용

ADE는 추가 구성 없이 ARM(Azure Resource Manager) 및 Bicep을 지원합니다. 카탈로그에 템플릿 파일(예: azuredeploy.jsonenvironment.yaml)을 추가하여 배포 환경에 대한 Azure 리소스를 배포하는 환경 정의를 만들 수 있습니다. 그런 다음 ADE는 표준 ARM-Bicep 컨테이너 이미지를 사용하여 배포 환경을 만듭니다.

environment.yaml 파일에서 runner 속성은 사용하려는 컨테이너 이미지의 위치를 ​​지정합니다. Microsoft 아티팩트 레지스트리 게시된 표준 이미지를 사용하려면 해당 식별자를 runner사용합니다.

다음 예제에서는 표준 ARM-Bicep 컨테이너 이미지를 참조하는 것을 보여 runner 줍니다.

    name: WebApp
    version: 1.0.0
    summary: Azure Web App Environment
    description: Deploys a web app in Azure without a datastore
    runner: Bicep
    templatePath: azuredeploy.json

ARM-Bicep 이미지의 Runner-Images 폴더 아래에 있는 ADE 표준 리포지토리에서 표준 Bicep 컨테이너 이미지를 볼 수 있습니다.

ADE 컨테이너 이미지를 사용하여 Azure 리소스를 배포하는 환경 정의를 만드는 방법에 대한 자세한 내용은 환경 정의 추가 및 구성을 참조하세요.

사용자 지정 컨테이너 이미지 만들기

스크립트를 사용하여 사용자 지정 컨테이너 이미지 만들기

사용자 지정 컨테이너 이미지를 만들면 요구 사항에 맞게 배포를 사용자 지정할 수 있습니다. Microsoft에서 제공하는 빠른 시작 스크립트를 사용하여 ADE 표준 이미지를 기반으로 이미지를 만들고 빌드하고 컨테이너 레지스트리에 푸시할 수 있습니다. 배포 환경 리포지토리에서 스크립트를 찾을 수 있습니다. 빠른 시작 스크립트를 사용하려면 리포지토리를 포크한 다음 스크립트를 로컬로 실행합니다.

스크립트는 이미지를 빌드하고 리포지토리 'ade' 및 태그 'latest'의 지정된 ACR(Azure Container Registry)에 푸시합니다. 이 스크립트에는 사용자 지정 이미지에 대한 레지스트리 이름 및 디렉터리가 필요하고, Azure CLI 및 Docker Desktop이 설치되어 있고 PATH 변수에 있어야 하며, 지정된 레지스트리로 푸시할 수 있는 권한이 있어야 합니다.

빠른 시작 스크립트를 사용하여 이 샘플 이미지를 신속하게 빌드하고 Azure Container Registry에 푸시하려면 다음을 수행해야 합니다.

  • 이 리포지토리를 개인 계정 포크합니다.
  • Azure CLI 및 Docker Desktop 애플리케이션이 컴퓨터 및 PATH 변수 내에 설치되어 있는지 확인합니다.
  • 선택한 Azure Container Registry에 이미지를 푸시할 수 있는 권한이 있는지 확인합니다.

PowerShell에서 다음 명령을 사용하여 스크립트를 호출할 수 있습니다.

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

또한 특정 리포지토리 및 태그 이름으로 푸시하려는 경우 다음을 실행할 수 있습니다.

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

환경 배포에서 이미지를 사용하려면 이미지의 위치를 매니페스트 파일에 추가하여 이미지를 환경 정의에 연결해야 하며, 사용자 지정 이미지를 ADE에서 사용할 수 있도록 ACR에 대한 권한을 구성해야 할 수 있습니다.

ADE에서 컨테이너 이미지 사용

ADE에서 컨테이너 이미지를 사용하려면 다음 방식 중 하나를 사용할 수 있습니다.

  • 스크립트를 사용하여 사용자 지정 컨테이너 이미지 만들기: 게시된 스크립트를 사용하여 Terraform 특정 이미지를 만듭니다.
  • GitHub 워크플로를 활용하는 사용자 지정 컨테이너 이미지 만들기: Terraform 리포지토리를 사용하여 ADE의 확장성 모델 활용에서 게시된 GitHub 워크플로를 사용합니다.
  • 사용자 지정 컨테이너 이미지 수동으로 만들기: 사용자 지정된 Terraform 특정 이미지 수동으로 만들기

사용자 지정 컨테이너 이미지 만들기

스크립트를 사용하여 사용자 지정 컨테이너 이미지 만들기

사용자 지정 컨테이너 이미지를 만들면 요구 사항에 맞게 배포를 사용자 지정할 수 있습니다. ADE 표준 이미지를 기반으로 이미지를 빌드하고 Microsoft에서 제공하는 빠른 시작 스크립트를 사용하여 컨테이너 레지스트리에 푸시할 수 있습니다. Terraform 리포지토리사용하여 배포 환경에서 스크립트를 찾을 수 있습니다. 빠른 시작 스크립트를 사용하려면 리포지토리를 포크한 다음 스크립트를 로컬로 실행합니다.

빠른 시작 스크립트를 사용하여 이 샘플 이미지를 신속하게 빌드하고 Azure Container Registry에 푸시하려면 다음을 수행해야 합니다.

  • 이 리포지토리를 개인 계정 포크합니다.
  • Azure CLI 및 Docker Desktop 애플리케이션이 컴퓨터 및 PATH 변수 내에 설치되어 있는지 확인합니다.
  • 선택한 Azure Container Registry에 이미지를 푸시할 수 있는 권한이 있는지 확인합니다.

스크립트는 이미지를 빌드하고 리포지토리 'ade' 및 태그 'latest'의 지정된 ACR(Azure Container Registry)에 푸시합니다. 이 스크립트에는 사용자 지정 이미지에 대한 레지스트리 이름 및 디렉터리가 필요하고, Azure CLI 및 Docker Desktop이 설치되어 있고 PATH 변수에 있어야 하며, 지정된 레지스트리로 푸시할 수 있는 권한이 있어야 합니다. PowerShell에서 다음 명령을 사용하여 스크립트를 호출할 수 있습니다.

.\quickstart-image-build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}'

또한 특정 리포지토리 및 태그 이름으로 푸시하려는 경우 다음을 실행할 수 있습니다.

.\quickstart-image.build.ps1 -Registry '{YOUR_REGISTRY}' -Directory '{DIRECTORY_TO_YOUR_IMAGE}' -Repository '{YOUR_REPOSITORY}' -Tag '{YOUR_TAG}'

환경 배포에서 이미지를 사용하려면 이미지의 위치를 매니페스트 파일에 추가하여 이미지를 환경 정의에 연결해야 하며, 사용자 지정 이미지를 ADE에서 사용할 수 있도록 ACR에 대한 권한을 구성해야 할 수 있습니다.

Pulumi에서 제공하는 표준 컨테이너 이미지 사용

Pulumi 팀은 시작하는 데 도움이 되는 미리 빌드된 이미지를 제공하며, 이 이미지는 Runner-Image 폴더에서 볼 수 있습니다. 이 이미지는 Pulumi의 Docker Hub에서 pulumi/azure-deployment-environments로 공개적으로 제공되므로 ADE 환경 정의에서 직접 사용할 수 있습니다.

미리 빌드된 이미지를 활용하는 샘플 environment.yaml 파일은 다음과 같습니다.

name: SampleDefinition
version: 1.0.0
summary: First Pulumi-Enabled Environment
description: Deploys a Storage Account with Pulumi
runner: pulumi/azure-deployment-environments:0.1.0
templatePath: Pulumi.yaml

환경 폴더에서 몇 가지 샘플 환경 정의를 찾을 수 있습니다.

사용자 지정 이미지 만들기

사용자 지정 컨테이너 이미지를 만들면 요구 사항에 맞게 배포를 사용자 지정할 수 있습니다. Pulumi 표준 이미지를 기반으로 사용자 지정 이미지를 만들고 요구 사항에 맞게 사용자 지정할 수 있습니다. 이미지 사용자 지정을 완료한 후에는 이미지를 빌드하고 컨테이너 레지스트리에 푸시해야 합니다.

ADE용으로 구성된 이미지를 만들려면 다음 단계를 따릅니다.

  1. 표준 이미지를 기반으로 사용자 지정 이미지를 만듭니다.
  2. 원하는 패키지를 설치합니다.
  3. 작업 셸 스크립트를 구성합니다.
  4. Pulumi CLI를 사용하는 작업 셸 스크립트를 만듭니다.

1. 표준 이미지를 기반으로 사용자 지정 이미지 만들기

Microsoft 아티팩트 레지스트리 호스트되는 표준 이미지를 가리키는 FROM 문이 포함된 DockerFile을 만듭니다.

다음은 표준 코어 이미지를 참조하는 FROM 문 예제입니다.

FROM mcr.microsoft.com/deployment-environments/runners/core:latest

이 문은 가장 최근에 게시된 핵심 이미지를 끌어와 사용자 지정 이미지의 기반으로 만듭니다.

2. 필요한 패키지 설치

배포 및 삭제 스크립트에서 사용할 수 있도록 Pulumi CLI를 실행 가능한 위치에 설치할 수 있습니다.

다음은 최신 버전의 Pulumi CLI를 설치하는 프로세스의 예입니다.

RUN apk add curl
RUN curl -fsSL https://get.pulumi.com | sh
ENV PATH="${PATH}:/root/.pulumi/bin"

Pulumi 프로그램에 사용하려는 프로그래밍 언어에 따라 하나 이상의 해당 런타임을 설치해야 할 수도 있습니다. Python 런타임은 기본 이미지에서 이미 사용 가능합니다.

다음은 Node.js와 TypeScript를 설치하는 예입니다.

# install node.js, npm, and typescript
RUN apk add nodejs npm
RUN npm install typescript -g

ADE 표준 이미지는 Azure CLI 이미지를 기반으로 하며 ADE CLI 및 JQ 패키지가 미리 설치되어 있습니다. Azure CLIJQ 패키지에 대해 자세히 알아볼 수 있습니다.

이미지 내에 필요한 패키지를 더 설치하려면 RUN 문을 사용합니다.

Pulumi를 통해 인프라를 배포하는 네 단계는 다음과 같습니다.

  1. pulumi login - 로컬 파일 시스템 또는 Pulumi Cloud의 상태 스토리지에 연결합니다.
  2. pulumi stack select - 특정 환경에 사용할 스택을 만들거나 선택합니다.
  3. pulumi config set - 배포 매개 변수를 Pulumi 구성 값으로 전달합니다.
  4. pulumi up - 배포를 실행하여 Azure에서 새 인프라를 만들거나 기존 인프라를 업데이트합니다.

코어 이미지의 진입점 동안 기존 로컬 상태 파일은 컨테이너와 환경 변수 $ADE_STORAGE에 저장된 디렉터리로 끌어옵니다. 기존 상태 파일에 액세스하려면 다음 명령을 실행합니다.

mkdir -p $ADE_STORAGE
export PULUMI_CONFIG_PASSPHRASE=
pulumi login file://$ADE_STORAGE

대신 Pulumi Cloud에 로그인하려면 Pulumi 액세스 토큰을 환경 변수로 설정하고 다음 명령을 실행합니다.

export PULUMI_ACCESS_TOKEN=YOUR_PULUMI_ACCESS_TOKEN
pulumi login

현재 환경에 대해 설정된 모든 매개 변수는 변수 $ADE_OPERATION_PARAMETERS에 저장됩니다. 또한 선택한 Azure 지역 및 리소스 그룹 이름이 각각 ADE_ENVIRONMENT_LOCATIONADE_RESOURCE_GROUP_NAME에 전달됩니다. Pulumi 스택 구성을 설정하려면 다음 명령을 실행합니다.

# Create or select the stack for the current environment
pulumi stack select $ADE_ENVIRONMENT_NAME --create

# Store configuration values in durable storage
export PULUMI_CONFIG_FILE=$ADE_STORAGE/Pulumi.$ADE_ENVIRONMENT_NAME.yaml

# Set the Pulumi stack config
pulumi config set azure-native:location $ADE_ENVIRONMENT_LOCATION --config-file $PULUMI_CONFIG_FILE
pulumi config set resource-group-name $ADE_RESOURCE_GROUP_NAME --config-file $PULUMI_CONFIG_FILE
echo "$ADE_OPERATION_PARAMETERS" | jq -r 'to_entries|.[]|[.key, .value] | @tsv' |
  while IFS=$'\t' read -r key value; do
    pulumi config set $key $value --config-file $PULUMI_CONFIG_FILE
  done

또한 ADE 권한을 활용하여 구독 내에 인프라를 배포하려면 Pulumi Azure Native 또는 Azure Classic 공급자를 사용하여 인프라를 프로비전할 때 스크립트에서 ADE MSI(관리되는 서비스 ID)를 사용해야 합니다. 배포를 완료하기 위해 특정 역할과 같은 특별 권한이 배포에 필요한 경우 해당 권한을 환경 배포에 사용되는 프로젝트 환경 유형의 ID에 할당합니다. ADE는 코어 이미지의 진입점 내에서 클라이언트, 테넌트 및 구독 ID와 같은 관련 환경 변수를 설정하므로 다음 명령을 실행하여 공급자가 ADE MSI를 사용하는지 확인합니다.

export ARM_USE_MSI=true
export ARM_CLIENT_ID=$ADE_CLIENT_ID
export ARM_TENANT_ID=$ADE_TENANT_ID
export ARM_SUBSCRIPTION_ID=$ADE_SUBSCRIPTION_ID

이제 pulumi up 명령을 실행하여 배포를 실행할 수 있습니다.

pulumi up --refresh --yes --config-file $PULUMI_CONFIG_FILE

삭제 스크립트 중에 다음 예와 같이 destroy 명령을 대신 실행할 수 있습니다.

pulumi destroy --refresh --yes --config-file $PULUMI_CONFIG_FILE

마지막으로, Azure CLI를 통해 환경에 액세스할 때 배포 출력을 업로드하고 액세스할 수 있도록 하려면 출력 개체를 Pulumi에서 JQ 패키지를 통해 ADE 지정 형식으로 변환합니다. 다음 예와 같이 값을 $ADE_OUTPUTS 환경 변수로 설정합니다.

stackout=$(pulumi stack output --json | jq -r 'to_entries|.[]|{(.key): {type: "string", value: (.value)}}')
echo "{\"outputs\": ${stackout:-{\}}}" > $ADE_OUTPUTS

사용자 지정 이미지 빌드

Docker CLI를 사용하여 이미지를 빌드할 수 있습니다. 컴퓨터에 Docker Engine이 설치되었는지 확인합니다. 그런 다음 Dockerfile 디렉터리로 이동하여 다음 명령을 실행합니다.

docker build . -t {YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}

예를 들어, customImage라는 레지스트리 내의 리포지토리에 이미지를 저장하고 1.0.0 태그 버전으로 업로드하려면 다음을 실행합니다.

docker build . -t {YOUR_REGISTRY}.azurecr.io/customImage:1.0.0

사용자 지정 이미지를 ADE에서 사용할 수 있도록 설정

사용자 지정 이미지를 사용하려면 컨테이너 레지스트리에 저장해야 합니다. 공용 컨테이너 레지스트리나 프라이빗 컨테이너 레지스트리를 사용할 수 있습니다. ACR(Azure Container Registry)이 적극 권장되며, ADE와의 긴밀한 통합 덕분에 공용 익명 풀 액세스를 허용하지 않고도 이미지를 게시할 수 있습니다. ADE에서 사용할 수 있도록 하려면 사용자 지정 컨테이너 이미지를 빌드하고 컨테이너 레지스트리에 푸시해야 합니다.

Docker Hub와 같은 다른 컨테이너 레지스트리에 이미지를 저장하는 것도 가능하지만, 이 경우에는 공개적으로 액세스할 수 있어야 합니다.

주의

익명(인증되지 않은) 풀 액세스가 가능한 레지스트리에 컨테이너 이미지를 저장하면 공개적으로 액세스할 수 있습니다. 이미지에 중요한 정보가 포함된 경우 해당 작업을 수행하지 마세요. 대신 익명 풀 액세스를 사용하지 않도록 설정하여 ACR(Azure Container Registry)에 저장하세요.

ACR에 저장된 사용자 지정 이미지를 사용하려면 ADE가 해당 이미지에 액세스할 수 있는 적절한 권한이 있는지 확인해야 합니다. ACR 인스턴스를 만들면 기본적으로 보안이 적용되며 인증된 사용자만 액세스할 수 있습니다.

Pulumi를 사용하여 Azure Container Registry를 만들고 여기에 이미지를 게시할 수 있습니다. Azure 계정에 필요한 모든 리소스를 만드는 독립형 Pulumi 프로젝트에 대한 프로비전/사용자 지정 이미지 예를 참조하세요.

각 방식에 대해 자세히 알아보려면 해당 탭을 선택합니다.

보호된 액세스가 가능한 프라이빗 레지스트리 사용

기본적으로 Azure Container Registry에서 콘텐츠를 끌어오거나 푸시하는 액세스는 인증된 사용자만 사용할 수 있습니다. 특정 네트워크에서의 액세스를 제한하고 특정 역할을 할당하면 ACR에 대한 액세스를 더욱 안전하게 보호할 수 있습니다.

Azure CLI, Azure Portal, PowerShell 명령 등을 통해 ACR 인스턴스를 만들려면 빠른 시작 중 하나를 따르세요.

네트워크 액세스 제한

ACR에 대한 네트워크 액세스를 보호하려면 고유의 네트워크에 대한 액세스를 제한하거나 공용 네트워크 액세스를 완전히 사용하지 않도록 설정할 수 있습니다. 네트워크 액세스를 제한하는 경우 신뢰할 수 있는 Microsoft 서비스가 이 컨테이너 레지스트리에 액세스하도록 허용 방화벽 예외를 사용하도록 설정해야 합니다.

공용 네트워크에서의 액세스를 사용하지 않도록 설정하려면 다음을 수행합니다.

  1. ACR 인스턴스를 만들거나 기존 인스턴스를 사용합니다.

  2. Azure Portal에서 구성하려는 ACR로 이동합니다.

  3. 왼쪽 메뉴의 설정에서 네트워킹을 선택합니다.

  4. 네트워킹 페이지의 공용 액세스 탭에서 공용 네트워크 액세스 아래에 있는 사용 안 함을 선택합니다.

    공용 액세스와 사용 안 함이 강조 표시된 ACR 네트워크 설정을 보여 주는 Azure Portal의 스크린샷.

  5. 방화벽 예외에서 신뢰할 수 있는 Microsoft 서비스가 이 컨테이너 레지스트리에 액세스하도록 허용이 선택되어 있는지 확인한 다음 저장을 선택합니다.

    신뢰할 수 있는 Microsoft 서비스가 이 컨테이너 레지스트리에 액세스하도록 허용하고 저장이 강조 표시된 ACR 네트워크 설정의 스크린샷.

AcrPull 역할 할당

컨테이너 이미지를 사용하여 환경을 만들려면 프로젝트와 환경 유형을 포함한 ADE 인프라가 필요합니다. 각 프로젝트에는 하나 이상의 프로젝트 환경 유형이 있으며, 배포될 환경을 정의하는 컨테이너 이미지에 대한 읽기 권한이 필요합니다. ACR 내 이미지에 안전하게 액세스하려면 각 프로젝트 환경 유형에 AcrPull 역할을 할당합니다.

프로젝트 환경 유형에 AcrPull 역할을 할당하려면 다음을 수행합니다.

  1. Azure Portal에서 구성하려는 ACR로 이동합니다.

  2. 왼쪽 메뉴에서 IAM(액세스 제어)을 선택합니다.

  3. 추가>역할 할당 추가를 선택합니다.

  4. 다음 역할을 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

    설정
    역할 AcrPull을 선택합니다.
    액세스 할당 대상: 사용자, 그룹 또는 서비스 주체를 선택합니다.
    멤버 컨테이너의 이미지에 액세스해야 하는 프로젝트 환경 유형의 이름을 입력합니다.

    프로젝트 환경 유형은 다음 예와 같이 표시됩니다.

    멤버 선택 창에서 이름의 일부가 강조 표시된 프로젝트 환경 유형 목록을 보여 주는 스크린샷.

이 구성에서 ADE는 시스템에 할당된 것이든 사용자에게 할당된 것이든 PET에 대해 관리 ID를 사용합니다.

이 역할 할당은 모든 프로젝트 환경 유형에 대해 이루어져야 합니다. Azure CLI를 통해 자동화할 수 있습니다.

이미지를 레지스트리에 푸시할 준비가 되면 다음 명령을 실행합니다.

docker push {YOUR_REGISTRY}.azurecr.io/{YOUR_IMAGE_LOCATION}:{YOUR_TAG}

이미지를 환경 정의에 연결

배포에서 사용자 지정 이미지를 사용하기 위해 환경 정의를 작성할 때 매니페스트 파일(environment.yaml 또는 manifest.yaml)에서 runner 속성을 편집합니다.

runner: "{YOUR_REGISTRY}.azurecr.io/{YOUR_REPOSITORY}:{YOUR_TAG}"

ADE 컨테이너 이미지를 사용하여 Azure 리소스를 배포하는 환경 정의를 만드는 방법에 대해 자세히 알아보려면 환경 정의 추가 및 구성을 참조하세요.