Azure CLI를 사용하여 Bicep 파일 배포
이 문서에서는 Bicep 파일과 함께 Azure CLI를 사용하여 Azure에 리소스를 배포하는 방법을 설명합니다. Azure 솔루션을 배포하고 관리하는 데 익숙하지 않은 경우 Bicep이란?을 참조하세요.
필수 조건
배포하려면 Bicep 파일이 필요하며 파일은 로컬이어야 합니다. 또한 Azure CLI가 필요하고 Azure에 연결해야 합니다.
- 로컬 컴퓨터에 Azure CLI 명령을 설치합니다. Bicep 파일을 배포하려면 Azure CLI 버전 2.20.0 이상이 필요합니다.
- Azure에 연결하는 데 사용합니다
az login
. 여러 Azure 구독이 있는 경우 실행az account set
해야 할 수도 있습니다.
Azure CLI 샘플은 bash
셸용으로 작성됩니다. Windows PowerShell 또는 명령 프롬프트(cmd)에서 이 샘플을 실행하려면 스크립트의 요소를 변경해야 할 수 있습니다.
Azure CLI가 설치되어 있지 않은 경우 Azure Cloud Shell을 사용할 수 있습니다. 자세한 내용은 Azure Cloud Shell을 사용하여 Bicep 파일 배포를 참조하세요.
필요한 사용 권한
Bicep 파일 또는 ARM 템플릿을 배포하려면 배포하는 리소스에 대한 쓰기 액세스 및 Microsoft.Resources/deployments 리소스 형식의 모든 작업에 대한 액세스가 필요합니다. 예를 들어 가상 머신을 배포하려면 Microsoft.Compute/virtualMachines/write
및 Microsoft.Resources/deployments/*
권한이 필요합니다. 가상 작업에는 동일한 사용 권한 요구 사항이 있습니다.
역할 및 사용 권한 목록은 Azure 기본 제공 역할을 참조하세요.
배포 범위
리소스 그룹, 구독, 관리 그룹 또는 테넌트를 배포 대상으로 지정할 수 있습니다. 배포 범위에 따라 다른 명령을 사용하며 Bicep 파일을 배포하는 사용자에게는 모든 범위에 대한 리소스를 만드는 데 필요한 권한이 있어야 합니다.
리소스 그룹에 배포하려면 다음을 사용합니다
az deployment group create
.az deployment group create --resource-group <resource-group-name> --template-file <path-to-bicep>
구독에 배포하려면 다음을 사용합니다
az deployment sub create
.az deployment sub create --location <location> --template-file <path-to-bicep>
구독 수준 배포에 대한 자세한 내용은 Bicep을 사용하여 구독에 리소스 배포를 참조하세요.
관리 그룹에 배포하려면 다음을 사용합니다
az deployment mg create
.az deployment mg create --location <location> --template-file <path-to-bicep>
관리 그룹 수준 배포에 대한 자세한 내용은 Bicep을 사용하여 관리 그룹에 리소스를 배포하는 방법을 참조하세요.
테넌트에 배포하려면 다음을 사용합니다
az deployment tenant create
.az deployment tenant create --location <location> --template-file <path-to-bicep>
테넌트 수준 배포에 대한 자세한 내용은 Bicep을 사용하여 테넌트에 리소스를 배포하는 방법을 참조하세요.
로컬 Bicep 파일 배포
로컬 컴퓨터 또는 외부 컴퓨터에서 Bicep 파일을 배포할 수 있습니다. 이 섹션에서는 로컬 Bicep 파일을 배포하는 방법을 설명합니다.
존재하지 않는 리소스 그룹에 배포하는 경우 리소스 그룹을 만듭니다. 리소스 그룹의 이름은 영숫자, 마침표, 밑줄, 하이픈 및 괄호만 포함할 수 있습니다. 최대 90자까지 가능하며 마침표로 끝날 수 없습니다.
az group create --name ExampleGroup --location "Central US"
로컬 Bicep 파일을 배포하려면 배포 명령에 --template-file
스위치를 사용합니다. 다음 예제에서는 매개 변수 값을 설정하는 방법도 보여줍니다.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file <path-to-bicep> \
--parameters storageAccountType=Standard_GRS
배포가 완료될 때까지 몇 분 정도 걸릴 수 있습니다. 완료되면 다음 결과가 포함된 메시지가 표시됩니다.
"provisioningState": "Succeeded",
원격 Bicep 파일 배포
Azure CLI는 현재 원격 Bicep 파일 배포를 지원하지 않습니다. Bicep CLI를 사용하여 Bicep 파일을 JSON 템플릿에 빌드한 다음, JSON 파일을 원격 위치에 로드할 수 있습니다. 자세한 내용은 원격 템플릿 배포를 참조 하세요.
매개 변수
매개 변수 값을 전달하려면 인라인 매개 변수 또는 매개 변수 파일을 사용할 수 있습니다. 매개 변수 파일은 Bicep 매개 변수 파일 또는 JSON 매개 변수 파일일 수 있습니다.
인라인 매개 변수입니다.
인라인 매개 변수를 전달하려면 parameters
에 값을 제공합니다. 예를 들어 Bash 셸에서 문자열 및 배열을 Bicep 파일에 전달하려면 다음을 사용합니다.
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters exampleString='inline string' exampleArray='["value1", "value2"]'
cmd 또는 PowerShell과 함께 Azure CLI를 사용하는 경우 배열을 다음 형식 exampleArray="['value1','value2']"
으로 전달합니다.
파일의 콘텐츠를 가져와 해당 콘텐츠를 인라인 매개 변수로 제공할 수도 있습니다. 파일 이름 앞에 다음을 입력합니다 @.
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters exampleString=@stringContent.txt exampleArray=@arrayContent.json
파일에서 매개 변수 값을 가져오면 구성 값을 제공해야 하는 경우에 유용합니다. 예를 들어, Linux 가상 머신에 대한 Cloud-Init 값을 제공할 수 있습니다.
arrayContent.json 형식은 다음과 같습니다.
[
"value1",
"value2"
]
개체를 전달하려면 JSON을 사용합니다(예: 태그를 설정할 때). Bicep 파일에는 다음과 같은 매개 변수가 포함될 수 있습니다.
"resourceTags": {
"type": "object",
"defaultValue": {
"Cost Center": "IT Department"
}
}
다음 Bash 스크립트와 같이 JSON 문자열을 전달하여 매개 변수를 설정할 수도 있습니다. 개체에 전달하려는 JSON 주위에 큰따옴표를 사용합니다.
tags='{"Owner":"Contoso","Cost Center":"2345-324"}'
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags="$tags"
cmd 또는 PowerShell에서 Azure CLI를 사용하는 경우 다음 형식으로 개체를 전달합니다.
$tags="{'Owner':'Contoso','Cost Center':'2345-324'}"
az deployment group create --name addstorage --resource-group myResourceGroup \
--template-file $bicepFile \
--parameters resourceName=abcdef4556 resourceTags=$tags
변수를 사용하여 매개 변수 값을 포함할 수 있습니다. 변수를 Bash 스크립트의 모든 매개 변수 값으로 설정하고 배포 명령에 추가합니다.
params="prefix=start suffix=end"
az deployment group create \
--resource-group testgroup \
--template-file <path-to-bicep> \
--parameters $params
그러나 cmd 또는 PowerShell과 함께 Azure CLI를 사용하는 경우 변수를 JSON 문자열로 설정합니다. 따옴표를 이스케이프합니다(예: $params = '{ \"prefix\": {\"value\":\"start\"}, \"suffix\": {\"value\":\"end\"} }'
).
매개 변수 평가는 순차적 순서를 따릅니다. 즉, 값이 여러 번 할당된 경우 마지막으로 할당된 값만 사용됩니다. 매개 변수를 올바르게 할당하려면 처음에 매개 변수 파일을 제공한 다음 KEY=VALUE 구문을 사용하여 특정 매개 변수를 선택적으로 재정의하는 것이 좋습니다. 매개 변수 파일을 제공하는 경우 이 인수를 .bicepparam
한 번만 사용할 수 있습니다.
Bicep 매개 변수 파일
스크립트에서 매개 변수를 인라인 값으로 전달하는 대신 Bicep 매개 변수 파일 또는 매개 변수 값이 포함된 JSON 매개 변수 파일을 사용하는 것이 더 쉬울 수 있습니다. Azure CLI는 외부 매개 변수 파일을 지원하지 않으므로 매개 변수 파일은 로컬 파일이어야 합니다. 매개 변수 파일에 대한 자세한 내용은 Bicep 배포를 위한 매개 변수 파일 만들기를 참조하세요.
Bicep 매개 변수 파일을 사용하여 Azure CLI 버전 2.53.0 이상 및 Bicep CLI 버전 0.22.X 이상을 사용하여 Bicep 파일을 배포할 수 있습니다. using
Bicep 매개 변수 파일 내의 문을 사용하면 스위치에 대한 Bicep 매개 변수 파일을 지정할 때 스위치를 --parameters
제공할 --template-file
필요가 없습니다. 스위치를 --template-file
포함하면 ".bicepparam 파일로 .bicep 템플릿만 허용됩니다."라는 메시지가 표시됩니다.
다음 예제에서는 storage.bicepparam이라는 매개 변수 파일을 보여 줍니다. 이 파일은 명령이 실행되는 동일한 디렉터리에 있습니다.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--parameters storage.bicepparam
JSON 매개 변수 파일
다음 예제에서는 storage.parameters.json이라는 매개 변수 파일을 보여 줍니다. 이 파일은 명령이 실행되는 동일한 디렉터리에 있습니다.
az deployment group create \
--name ExampleDeployment \
--resource-group ExampleGroup \
--template-file storage.bicep \
--parameters '@storage.parameters.json'
동일한 배포 작업에서 인라인 매개 변수 및 위치 매개 변수 파일을 사용할 수 있습니다. 자세한 내용은 매개 변수 우선 순위를 참조하세요.
변경 미리 보기
Bicep 파일을 배포하기 전에 Bicep 파일이 환경에 적용할 변경 사항을 미리 볼 수 있습니다. 가상 작업을 사용하여 Bicep 파일이 예상대로 변경 사항을 적용하는지 확인합니다. 가상 작업은 Bicep 파일의 오류도 확인합니다.
템플릿 사양 배포
현재 Azure CLI는 템플릿 사양을 만드는 데 도움이 되는 Bicep 파일을 제공하지 않습니다. 그러나 Microsoft.Resources/templateSpecs 리소스를 사용하여 Bicep 파일을 만들어 템플릿 사양을 배포할 수 있습니다. 템플릿 사양 만들기 샘플은 Bicep 파일에서 템플릿 사양을 만드는 방법을 보여줍니다. 또한 Bicep CLI를 사용한 다음 JSON 템플릿을 사용하여 JSON에 Bicep 파일을 빌드하여 템플릿 사양을 만들 수도 있습니다.
배포 이름
Bicep 파일을 배포할 때 배포에 이름을 지정할 수 있습니다. 해당 이름은 배포 기록에서 배포를 검색하는 데 도움이 될 수 있습니다. 배포 이름을 제공하지 않으면 해당 이름이 Bicep 파일의 이름이 됩니다. 예를 들어 main.bicep이라는 Bicep 파일을 배포하고 배포 이름을 지정하지 않으면 배포 이름이 지정main
됩니다.
배포를 실행할 때마다 리소스 그룹의 배포 기록에 항목이 배포 이름과 함께 추가됩니다. 다른 배포를 실행하고 동일한 이름을 지정하는 경우 이전 항목이 현재 배포로 바뀝니다. 배포 기록에서 고유한 항목을 유지하려면 각 배포에 고유한 이름을 지정합니다.
고유한 이름을 만들려면 난수를 할당할 수 있습니다.
deploymentName='ExampleDeployment'$RANDOM
또는 날짜 값을 추가합니다.
deploymentName='ExampleDeployment'$(date +"%d-%b-%Y")
같은 배포 이름의 동일한 리소스 그룹에 동시 배포를 실행하는 경우 마지막 배포만 완료됩니다. 완료되지 않은 동일한 이름의 배포는 마지막 배포로 대체됩니다. 예를 들어 명명 storage1
된 스토리지 계정을 배포하는 배포 newStorage
를 실행하고 동시에 명명 storage2
된 스토리지 계정을 배포하는 다른 newStorage
배포를 실행하는 경우 하나의 스토리지 계정만 배포합니다. 결과 스토리지 계정의 이름은 storage2
입니다.
그러나 명명 storage1
된 스토리지 계정을 배포하는 배포 newStorage
를 실행하고 첫 번째 배포가 완료된 후 명명된 storage2
스토리지 계정을 배포하는 다른 newStorage
배포를 즉시 실행하는 경우 두 개의 스토리지 계정이 있습니다. 하나는 storage1
이고 다른 하나는 storage2
입니다. 그러나 배포 기록에는 하나의 항목만 기록됩니다.
각 배포에 고유한 이름을 지정하는 경우 충돌 없이 동시에 실행할 수 있습니다. 명명 storage1
된 스토리지 계정을 배포하는 배포 newStorage1
를 실행하고 동시에 명명된 storage2
스토리지 계정을 배포하는 다른 newStorage2
배포를 실행하는 경우 두 개의 스토리지 계정과 두 개의 항목이 배포 기록에 있습니다.
동시 배포와의 충돌을 방지하고 배포 기록에서 고유한 항목이 기록되게 하려면 각 배포에 고유한 이름을 지정합니다.
다음 단계
파일에서 매개 변수를 정의하는 방식을 이해하려면 Bicep 파일의 구조 및 구문 이해를 참조하세요.