배포 파이프라인에서 Bicep 코드 게시

완료됨

템플릿 사양 또는 Bicep 모듈의 게시 프로세스를 자동화할 때, 일반적으로 자체적으로 수행하는 모든 작업을 자동화하고 파이프라인 내에서 실행할 수 있게 해야 합니다. 이 단원에서는 이전에 배포 파이프라인에서 템플릿 사양 및 Bicep 모듈을 게시할 때 배운 몇 가지 원칙을 적용하는 방법을 알아봅니다.

템플릿 사양 및 모듈

Bicep을 사용하면 간단하게 코드를 재사용할 수 있습니다. Bicep 코드를 배포에 재사용하는 두 가지 일반적인 방법은 다음과 같습니다.

  • 템플릿 사양 - 완전한 솔루션 배포에 최적화되었습니다. 예를 들어 회사의 사양에 따라 완전한 가상 머신을 배포하기 위해 보안 강화 리소스 세트를 정의했다고 가정하겠습니다. 이러한 코드를 템플릿 사양으로 게시할 수 있습니다. 그러면 동료들이 이 템플릿 사양을 사용하여 Azure Portal에서도 완전한 가상 머신을 배포할 수 있습니다.
  • 모듈 - 다른 배포의 구성 요소로 설계되었습니다. 예를 들어 스토리지 계정을 만드는 Bicep 파일을 만들었다고 가정하겠습니다. 다른 여러 배포에서 스토리지 계정이 필요할 가능성이 높으며, 따라서 Bicep 파일을 레지스트리에 게시하고 조직의 모든 배포에 모듈로 사용할 수 있습니다.

템플릿 사양 및 Bicep 모듈 중 결정하는 경우 적용할 수 있는 좋은 경험 법칙은 조직 전체에 템플릿을 있는 그대로 배포하려는 경우 템플릿 사양이 적합할 것이라는 점입니다. 그러나 여러 상위 템플릿 내에서 이 템플릿을 재사용할 경우 Bicep 모듈에서 요구 사항을 더 잘 처리할 수 있습니다.

파이프라인에서 재사용 가능한 코드의 유효성 검사

일반 Bicep 배포와 달리 템플릿 사양 또는 모듈을 만들 때는 리소스를 Azure에 직접 배포하지 않습니다. 대신 템플릿 사양 또는 모듈을 게시 합니다. 그러면 이 템플릿 사양 또는 모듈을 다른 배포에 사용할 수 있습니다. 해당 배포는 여러분이 정의한 리소스를 배포합니다. 이러한 차이로 인해 템플릿 사양 및 Bicep 모듈의 유효성을 검사하고 테스트하는 방법이 일반 Bicep 배포에 사용하는 프로세스와 다를 수 있습니다.

Bicep 코드를 린팅하는 것이 좋습니다. Linter는 구문 문제를 탐지하고, 권장 사례를 따르지 않으면 경고합니다.

린팅 외에도 실행 전 유효성 검사를 사용하여 템플릿 사양 및 모듈을 테스트할 수 있습니다. 템플릿 사양 및 모듈을 Azure에 배포하고 템플릿 사양과 모듈이 만드는 리소스가 예상대로 작동하는지 테스트하는 방안도 고려해 볼 수 있습니다. 그러나 다음과 같은 두 가지 이유로 배포 파이프라인에서 이러한 유형의 테스트를 실행하기가 어려울 수 있습니다.

  • 실행 전 유효성 검사 및 배포에는 리소스를 배포할 Azure 환경이 필요합니다. 모듈을 배포하고 테스트하는 데 사용할 전용 Azure 구독 또는 리소스 그룹을 유지 관리해야 할 수도 있습니다.
  • 많은 템플릿 사양 및 모듈을 사용하려면 매개 변수 세트를 지정해야 합니다. 배포 시 사용할 템플릿 사양 또는 모듈의 매개 변수 테스트 세트를 만들어야 할 수도 있습니다.

템플릿 사양 및 모듈을 배포하고 테스트하는 파이프라인 단계를 포함할 것인지 선택해야 합니다. 이 Microsoft Learn 모듈에서는 Bicep 코드를 린팅하지만 다른 형태의 테스트는 수행하지 않습니다. 템플릿 사양 및 모듈을 테스트하려면 Azure에 템플릿 사양 및 모듈을 배포하는 방법을 고민해야 합니다. 전용 구독 또는 리소스 그룹을 사용하여 리소스를 배포할 것인지도 고민해야 합니다.

Azure Pipelines를 사용하여 Bicep 코드 테스트를 검토하여 자동화된 파이프라인에서 Bicep 파일을 테스트하는 방법에 대해 자세히 알아보는 것이 좋습니다.

인증 및 권한 부여

템플릿 사양을 Azure에 직접 게시하는 경우 Microsoft Entra 사용자에게 템플릿 사양 리소스가 포함된 리소스 그룹에 대한 액세스 권한을 부여해야 합니다. 마찬가지로 Bicep 모듈을 레지스트리에 게시하는 경우 조직에서 Bicep 모듈에 사용하는 Azure Container Registry 인스턴스에 쓸 수 있는 권한이 Microsoft Entra 사용자에게 있어야 합니다.

자동화된 배포 파이프라인을 사용하는 경우 동일한 원칙이 적용됩니다. 그러나 배포를 실행하는 사람은 여러분이 아니기 때문에 템플릿 사양을 게시하기 위한 리소스 그룹 또는 모듈을 게시하기 위한 컨테이너 레지스트리에 대한 적절한 액세스 권한을 파이프라인의 서비스 사용자에게 부여해야 합니다.

레지스트리에 모듈을 게시하는 경우 배포를 실행하는 서비스 사용자에게는 많은 권한이 필요하지 않습니다. 레지스트리에서 Microsoft Entra 권한 부여를 사용하는 경우 서비스 주체에는 레지스트리에 대한 AcrPush 권한만 필요합니다.

최소 권한의 보안 원칙을 사용하는 것이 좋습니다. 파이프라인의 서비스 사용자에게 리소스 그룹 또는 구독이 아닌 컨테이너 레지스트리에 대한 액세스 권한만 부여하세요.

파이프라인에서 템플릿 사양 및 모듈 게시

본인의 컴퓨터에서 Azure CLI를 사용하여 템플릿 사양을 게시하는 경우 다음과 같은 명령을 사용합니다.

az ts create \
  --name StorageWithoutSAS \
  --resource-group MyResourceGroup \
  --location westus3 \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1 \
  --template-file main.bicep

이 Azure CLI 명령을 파이프라인 단계로 변환할 수 있습니다.

- task: AzureCLI@2
  name: Publish
  displayName: Publish template spec
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az ts create \
        --name StorageWithoutSAS \
        --resource-group MyResourceGroup \
        --location westus3 \
        --display-name "Storage account with SAS disabled" \
        --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
        --version 1 \
        --template-file main.bicep

파이프라인은 동일한 프로세스를 사용하여 여러분이 직접 사용할 템플릿 사양을 게시합니다.

마찬가지로 본인의 컴퓨터에서 Azure CLI를 사용하여 Bicep 모듈을 게시하는 경우 다음과 같은 명령을 사용합니다.

az bicep publish \
   --file module.bicep \
   --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

이 Azure CLI 명령 역시 파이프라인 단계로 변환할 수 있습니다.

- task: AzureCLI@2
  name: Publish
  displayName: Publish Bicep module
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az bicep publish \
        --file module.bicep \
        --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

이 예제에서는 Bicep 레지스트리의 호스트 이름(toycompany.azurecr.io)이 파이프라인 단계 정의에 포함됩니다. 이것은 좋은 사례가 아닙니다. 환경 변수를 사용하여 이와 같이 구성 설정을 지정할 수 있습니다. 작동 원리는 이 Microsoft Learn 모듈의 뒷부분에서 살펴보겠습니다.

잠시 후 이 단원에서 설명한 단계에 따라 파이프라인에서 템플릿 사양을 게시하는 방법을 살펴보겠습니다.

모듈 또는 템플릿 사양 사용

이전 Microsoft Learn 학습 모듈에서는 템플릿 사양에 정의된 리소스를 배포하는 방법과 레지스트리에 저장된 Bicep 모듈을 사용하는 방법을 알아보았습니다. 템플릿 사양 및 모듈을 수동으로 게시하든 배포 파이프라인에서 게시하든, 동일한 방식으로 사용하고 배포합니다.

예를 들어 Azure CLI 명령 az deployment group create 또는 Azure PowerShell New-AzResourceGroupDeployment cmdlet을 사용하여 템플릿 사양 또는 Bicep 파일을 리소스 그룹에 배포합니다.