Bicep 코드 린팅 및 유효성 검사

완료됨

파이프라인 스테이지에서 무엇을 하는지 알아보았으므로, 이번에는 Bicep 배포 파이프라인에 추가할 수 있는 첫 번째 유효성 검사 단계 세트를 살펴보겠습니다. 이 단원에서는 Bicep 템플릿의 유효성을 검사하는 방법을 알아봅니다. 유효성 검사 스테이지에서 일반적으로 수행하는 두 가지 작업, 즉 린팅 및 실행 전 유효성 검사에 대해서도 알아봅니다.

유효한 Bicep 파일이란?

유효한 Bicep 파일은 구문 오류가 없는 파일입니다. 배포하려는 Azure 리소스의 정의에 대해서도 유효성을 검사합니다. 또한 파일에 정의된 리소스는 배포될 때 Azure 구독에 존재하는 할당량과 제한 내로 유지됩니다.

일부 검사는 구문 오류, 유효한 Azure 리소스 정의 및 코드 품질에 대한 검사처럼 격리된 Bicep 파일에서 수행됩니다. 이러한 단계는 린팅이라는 프로세스의 일부입니다. 다른 문제를 확인하려면 Azure Resource Manager 서비스에서 템플릿의 유효성을 검사하고 Azure 환경을 고려해 달라고 요청해야 합니다.

유효한 Bicep 템플릿은 성공적으로 배포될 가능성이 높습니다. Bicep 템플릿을 배포하지 않고도 피드백을 받을 수 있습니다. 유효성을 검사하는 것이 좋은 이유는 유효하지 않은 Bicep 파일을 배포하면 Azure에서 템플릿에 설명된 리소스의 일부만 배포하거나 변경할 수도 있기 때문입니다. 결과적으로 환경 상태가 일관적이지 않고 예상대로 동작하지 않을 수 있습니다.

Bicep 코드 빌드 및 린팅

Bicep 파일을 배포할 때 Bicep 도구는 먼저 몇 가지 기본 유효성 검사 단계를 실행합니다. 이러한 단계는 Visual Studio Code를 사용하여 파일을 수정할 때 실행되는 단계와 동일합니다. 이러한 단계에서는 Bicep의 언어 키워드를 올바르게 사용했고 각 리소스 종류에 대한 요구 사항에 따라 Azure 리소스를 정의했는지 확인합니다.

또한 Bicep은 파일에 대해 Linter를 실행합니다. 린팅은 일련의 권장 사항과 비교하여 코드를 검사하는 프로세스입니다. Bicep Linter는 파일을 살펴보고 유지 관리 용이성, 정확성, 유연성 및 확장성에 대한 모범 사례를 준수했는지 확인합니다.

Linter는 각 범주에 대해 미리 정의된 규칙 집합을 포함합니다. 다음은 Linter 규칙의 몇 가지 예입니다.

  • 사용되지 않는 매개 변수: Linter는 Bicep 파일 어디에서도 사용되지 않는 매개 변수를 검색합니다. 불필요한 값을 제공할 필요 없이 사용하지 않는 매개 변수를 제거하여 템플릿을 더 쉽게 배포할 수 있습니다. Bicep 파일을 사용하려고 할 때 혼동을 줄일 수도 있습니다.
  • 문자열 보간: Linter는 파일에서 Bicep 문자열 보간 대신 concat() 함수를 사용하는지 확인합니다. 문자열 보간을 사용하면 Bicep 파일을 더 읽기 편하게 만들 수 있습니다.
  • 보안 매개 변수의 기본값: @secure() 데코레이터가 표시된 매개 변수의 기본값을 설정하면 Linter가 경고를 보냅니다. 보안 매개 변수에 기본값을 사용하면 보안 매개 변수에 사람이 읽을 수 있는 값을 제공하게 되고, 사람들이 파일을 배포하기 전에는 보안 매개 변수를 변경하지 않을 수 있기 때문에 이렇게 하는 것은 좋지 않습니다.

Bicep 도구를 사용하면 Bicep Linter가 자동으로 실행됩니다. Bicep 파일을 빌드할 때마다 Linter는 모범 사례와 비교하여 파일을 검사합니다. 린팅은 Bicep 파일을 Azure에 배포할 때 자동으로 발생합니다.

그러나 파이프라인에서는 파일을 배포하기 전에 유효성 검사 및 린팅 단계를 실행하는 것이 일반적입니다. 다음과 같이 Bicep CLI를 통해 Bicep 파일을 수동으로 빌드하여 파일을 확인하도록 Bicep에 지시할 수 있습니다.

az bicep build --file main.bicep
bicep build main.bicep

참고

build 명령을 실행하면 Bicep은 Bicep 코드를 JSON ARM 템플릿으로 변환 컴파일합니다. 출력되는 파일은 일반적으로 필요 없으므로 무시해도 됩니다.

누군가가 리포지토리에 코드를 체크 인할 때마다 Linter에서 Bicep 템플릿을 확인하게 하려고 하므로 다음과 같이 파이프라인에 린팅 스테이지 및 작업을 추가하면 됩니다.

Diagram that shows a pipeline with a lint stage containing a single job that runs the linter on the file.

파이프라인 YAML 파일에서는 이 추가를 다음과 같이 표현할 수 있습니다.

stages:

- stage: Lint
  jobs: 
  - job: Lint
    steps:
      - script: |
          az bicep build --file deploy/main.bicep

Linter 경고 및 오류

기본적으로 Linter는 Bicep 파일이 규칙을 위반하는 것을 발견하면 경고를 보냅니다. Bicep Linter에서 보낸 경고는 오류로 처리되지 않으므로 파이프라인 실행을 중지하거나 후속 스테이지의 실행을 중지하지 않습니다.

Linter 규칙 위반을 경고가 아닌 오류로 처리하도록 Bicep을 구성하여 이 동작을 변경할 수 있습니다. 이를 구성하려면 Bicep 파일이 들어 있는 폴더에 bicepconfig.json 파일을 추가합니다. 오류로 처리해야 하는 Linter 문제와 경고로 유지해야 하는 Linter 문제를 결정할 수 있습니다. Linter 규칙 업데이트 방법은 이 모듈의 뒷부분에서 살펴보겠습니다.

bicepconfig.json 파일은 Visual Studio Code가 편집기에서 오류 및 경고를 표시하는 방법도 제어합니다. Bicep 템플릿에서 잘못 구성된 부분 아래에 빨간색 및 노란색 물결선이 표시됩니다. 해당 표시기는 Bicep 코드를 작성할 때 훨씬 빠르게 피드백을 제공하기 때문에 오류 가능성이 대폭 줄어듭니다.

오류를 내보내도록 Linter를 다시 구성한 후에는 Linter가 문제를 발견할 때마다 파이프라인이 실행을 중지하고 후속 작업 또는 스테이지가 실행되지 않습니다. 이 설치는 문제가 있는 Bicep 코드가 배포되지 않도록 하는 데 도움이 됩니다.

실행 전 유효성 검사

Bicep 템플릿이 Azure 환경에 성공적으로 배포될 가능성이 있는지도 확인해야 합니다. 이 검사를 실행 전 유효성 검사라고 하며, Azure에서 정보를 제공해야 하는 추가 검사가 실행됩니다. 이러한 종류의 검사는 다음과 같습니다.

  • Bicep 리소스에 대해 지정한 이름이 유효한가요?
  • Bicep 리소스에 대해 지정한 이름이 이미 사용되었나요?
  • 리소스를 배포하는 지역이 유효한가요?

실행 전 유효성 검사에는 Azure와의 통신이 필요하지만 실제로 리소스를 배포하지는 않습니다.

Diagram that shows a pipeline with lint and validate stages, each containing a single job. The validate stage communicates with Azure.

AzureResourceManagerTemplateDeployment 작업을 사용하여 실행 전 유효성 검사에 대한 Bicep 파일을 제출하고 deploymentModeValidation으로 구성할 수 있습니다.

- stage: Validate
  jobs:
  - job: Validate
    steps:
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: 'MyServiceConnection'
          location: $(deploymentDefaultLocation)
          deploymentMode: Validation
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep

이 명령은 이전에 사용한 배포 작업과 유사하지만 실제로 리소스를 배포하지는 않습니다. 템플릿에서 사용되는 리소스에 대해 추가 검사를 수행합니다.

예를 들어 Bicep 파일에 스토리지 계정이 포함되어 있다고 가정하겠습니다. 실행 전 유효성 검사에서는 다른 스토리지 계정에서 사용자가 선택한 이름을 이미 사용했는지 여부를 확인합니다. 또한 사용자가 선택한 이름이 스토리지 계정 명명 규칙을 준수하는지 확인합니다.

실행 전 유효성 검사 명령은 Bicep Linter도 실행합니다. 그러나 일반적으로 Linter를 별도로 실행하는 것이 좋습니다. 이렇게 하면 Linter 오류가 있는 경우 유효성 검사 프로세스가 완료될 때까지 신속하게 오류를 발견할 수 있습니다. 유효성 검사는 더 오래 걸립니다.

중요

실행 전 유효성 검사를 실행하면 각 Azure 리소스 공급자가 자체 검사를 수행합니다. 많은 검사를 실행하는 리소스 공급자도 있고 그렇지 않은 공급자도 있으므로 파일이 유효한지 확인하기 위해 실행 전 유효성 검사에 의존할 수는 없습니다. 그럼에도 불구하고 유용한 도구이며 파이프라인에 포함할 가치가 있습니다.

파이프라인에 유효성 검사 스테이지를 추가하여 Linter를 실행하고 실행 전 유효성 검사를 수행하면 Bicep 파일을 배포하기 전에 신뢰를 높일 수 있습니다.