Bicep 환경 구성

Bicep은 bicepconfig.json이라는 선택적 구성 파일을 지원합니다. 이 파일 내에서 Bicep 개발 환경을 사용자 지정하는 값을 추가할 수 있습니다. 이 파일은 기본 구성 파일과 병합됩니다. 자세한 내용은 병합 프로세스 이해를 참조하세요. 구성을 사용자 지정하려면 Bicep 파일의 동일한 디렉터리 또는 부모 디렉터리에 구성 파일을 만듭니다. bicepconfig.json 파일을 포함하는 부모 디렉터리가 여러 개 있는 경우 Bicep은 가장 가까운 디렉터리의 구성을 사용합니다. 자세한 내용은 파일 확인 프로세스 이해를 참조하세요.

Bicep 확장 설정을 구성하려면 VS Code 및 Bicep 확장을 참조하세요.

Visual Studio Code에서 구성 파일 만들기

텍스트 편집기를 사용하여 구성 파일을 만들 수 있습니다.

Visual Studio Code에서 bicepconfig.json 파일을 만들려면 명령 팔레트([CTRL/CMD]+[SHIFT]+P )를 연 다음 Bicep: Bicep 구성 파일 만들기를 선택합니다. 자세한 내용은 Bicep 구성 파일 만들기를 참조하세요.

Screenshot of how to create Bicep configuration file in VS Code.

Visual Studio Code용 Bicep 확장은 bicepconfig.json 파일에 대한 Intellisense를 지원합니다. Intellisense를 사용하여 사용 가능한 속성과 값을 검색합니다.

Screenshot of the intellisense support in configuring bicepconfig.json.

병합 프로세스 이해

bicepconfig.json 파일은 재귀적인 상향식 병합 프로세스를 통해 기본 구성 파일과 병합됩니다. 병합 프로세스 중에 Bicep은 두 구성의 각 경로를 검사합니다. 경로가 기본 구성에 없으면 경로와 관련 값이 최종 결과에 추가됩니다. 반대로 기본 구성에 다른 값을 갖는 경로가 있는 경우 병합된 결과에서 bicepconfig.json의 값이 우선합니다.

기본 구성이 다음과 같이 정의된 시나리오를 고려해보세요.

{
  "cloud": {
    ...
    "credentialPrecedence": [
      "AzureCLI",
      "AzurePowerShell"
    ]
  },
  "moduleAliases": {
    "ts": {},
    "br": {
      "public": {
        "registry": "mcr.microsoft.com",
        "modulePath": "bicep"
      }
    }
  },
  ...
}

또한 bicepconfig.json은 다음과 같이 정의됩니다.

{
  "cloud": {
    "credentialPrecedence": [
      "AzurePowerShell",
      "AzureCLI"
    ]
  },
  "moduleAliases": {
    "br": {
      "ContosoRegistry": {
        "registry": "contosoregistry.azurecr.io"
      },
      "CoreModules": {
        "registry": "contosoregistry.azurecr.io",
        "modulePath": "bicep/modules/core"
      }
    }
  }
}

결과적으로 병합된 구성은 다음과 같습니다.

{
  "cloud": {
    ...
    "credentialPrecedence": [
      "AzurePowerShell",
      "AzureCLI"
    ]
  },
  "moduleAliases": {
    "ts": {},
    "br": {
      "public": {
        "registry": "mcr.microsoft.com",
        "modulePath": "bicep"
      },
      "ContosoRegistry": {
        "registry": "contosoregistry.azurecr.io"
      },
      "CoreModules": {
        "registry": "contosoregistry.azurecr.io",
        "modulePath": "bicep/modules/core"
      }
    }
  },
  ...
}

앞의 예제에서는 cloud.credentialPrecedence 값이 대체되지만 병합된 구성에서 cloud.moduleAliases.ContosoRegistrycloud.moduleAliases.CoreModules 값이 추가됩니다.

파일 확인 프로세스 이해

bicepconfig.json 파일은 Bicep 파일의 동일한 디렉터리 또는 부모 디렉터리에 배치할 수 있습니다. bicepconfig.json 파일을 포함하는 부모 디렉터리가 여러 개 있는 경우 Bicep은 가장 가까운 디렉터리의 구성 파일을 사용합니다. 예를 들어 각 폴더에 bicepconfig.json 파일이 있는 지정된 폴더 구조에서 다음이 적용됩니다.

A diagram showing resolving `bicepconfig.json` found in multiple parent folders.

child 폴더에서 main.bicep을 컴파일하는 경우 child 폴더의 bicepconfig.json 파일이 사용됩니다. parent 폴더 및 root 폴더의 구성 파일은 무시됩니다. child 폴더에 구성 파일이 없는 경우 Bicep은 parent 폴더에서 구성을 검색한 다음, root 폴더를 검색합니다. 폴더에 구성 파일이 없는 경우 Bicep은 기본적으로 기본값을 사용합니다.

여러 모듈을 호출하는 Bicep 파일의 컨텍스트에서 각 모듈은 가장 가까운 bicepconfig.json을 사용하여 컴파일을 거칩니다. 그런 다음, 주 Bicep 파일이 해당 bicepconfig.json으로 컴파일됩니다. 다음 시나리오에서 modA.bicepA 폴더에 있는 bicepconfig.json를 사용하여 컴파일되고, modB.bicepB 폴더의 bicepconfig.json으로 컴파일되고, 마지막으로 main.biceproot 폴더의 bicepconfig.json을 사용하여 컴파일됩니다.

A diagram showing resolving `bicepconfig.json` found in multiple parent folders with the module scenario.

AB 폴더에 bicepconfig.json 파일이 없는 경우 세 개의 Bicep 파일은 모두 root 폴더에 있는 bicepconfig.json을 사용하여 컴파일됩니다. 폴더에 bicepconfig.json이 없는 경우 컴파일 프로세스는 기본적으로 기본값을 사용합니다.

Bicep 모듈 구성

모듈로 작업할 때 모듈 경로에 대한 별칭을 추가할 수 있습니다. 이러한 별칭은 복잡한 경로를 반복할 필요가 없기 때문에 Bicep 파일을 단순화합니다. Bicep CLI 및 Visual Studio Code에서 Azure에 인증하기 위한 클라우드 프로필 및 자격 증명 우선 순위를 구성할 수도 있습니다. 자격 증명은 모듈을 레지스트리에 게시하고 리소스 삽입 기능을 사용할 때 외부 모듈을 로컬 캐시로 복원하는 데 사용됩니다. 자세한 내용은 Bicep 구성에 모듈 설정 추가를 참조하세요.

Linter 규칙 구성

Bicep Linter는 Bicep 파일에서 구문 오류 및 모범 사례 위반을 확인합니다. bicepconfig.json을 수정하여 Bicep 파일 유효성 검사에 대한 기본 설정을 재정의할 수 있습니다. 자세한 내용은 Bicep 구성에 Linter 설정 추가를 참조하세요.

실험적 기능 사용

다음 섹션을 bicepconfig.json 파일에 추가하여 실험적 기능을 사용하도록 설정할 수 있습니다.

다음은 'compileTimeImports' 및 'userDefinedFunctions' 기능을 사용하도록 설정하는 예제입니다.

{
  "experimentalFeaturesEnabled": {
    "compileTimeImports": true,
    "userDefinedFunctions": true
  }
}

현재 실험적 기능 집합에 대한 내용은 실험적 기능을 참조하세요.

다음 단계