템플릿 모듈화
Azure Resource Manager 템플릿을 사용하는 경우 개별 구성 요소로 분할하여 모듈화하는 것이 가장 좋습니다.
사용할 기본 방법은 연결된 템플릿을 사용하는 것입니다.
솔루션을 대상 구성 요소로 분리하고 다양한 배포에서 이러한 다양한 요소를 다시 사용할 수 있습니다.
연결된 템플릿
기본 템플릿에 배포 리소스를 추가하여 한 템플릿을 다른 템플릿에 연결합니다.
"resources": [
{
"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
<link-to-external-template>
}
}
]
중첩된 템플릿
기본 템플릿 내에 템플릿을 중첩하고, 템플릿 속성을 사용하고, 템플릿 구문을 지정할 수도 있습니다.
모듈화는 다소 도움이 되지만, 다양한 구성 요소를 분할하면 모든 요소가 해당 단일 파일 내에 있으므로 크기가 큰 주 파일이 발생할 수 있습니다.
"resources": [
{
"apiVersion": "2017-05-10",
"name": "nestedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"name": "[variables('storageName')]",
"apiVersion": "2015-06-15",
"location": "West US",
"properties": {
"accountType": "Standard_LRS"
}
}
]
}
}
}
]
메모
중첩된 템플릿 자체에 정의된 매개 변수 또는 변수는 중첩된 템플릿에 사용할 수 없습니다. 기본 템플릿의 매개 변수 및 변수만 사용할 수 있습니다.
배포 리소스에 제공하는 속성은 외부 템플릿에 연결하거나 기본 템플릿 내의 인라인 템플릿 중첩에 따라 달라집니다.
배포 모드
템플릿을 사용하여 리소스를 배포하는 경우 다음 세 가지 옵션이 있습니다.
- 은을 유효성 검사합니다. 이 옵션은 템플릿을 컴파일하고, 배포의 유효성을 검사하고, 템플릿이 작동하고(예: 순환 종속성이 없음) 올바른 구문을 확인합니다.
- 증분 모드(기본값) . 이 옵션은 템플릿에 정의된 모든 항목만 배포합니다. 템플릿에 정의되지 않은 리소스는 제거하거나 수정하지 않습니다. 예를 들어 템플릿을 통해 VM을 배포한 다음 템플릿에서 VM의 이름을 바꾼 경우 템플릿을 다시 실행한 후에도 배포된 첫 번째 VM이 유지됩니다. 기본 모드입니다.
- 전체 모드: Resource Manager는 리소스 그룹에 있지만 템플릿에 지정되지 않은 리소스를 삭제합니다. 예를 들어 템플릿이 배포된 후 템플릿에 정의된 리소스만 리소스 그룹에 표시됩니다. 프로덕션 환경에 이 모드를 사용하여 배포 템플릿에서 멱등성을 달성하는 것이 가장 좋습니다.
PowerShell을 사용하여 배포할 때 배포 모드를 설정하려면 이 항목의 앞부분에 있는 중첩된 템플릿 예제에 따라 Mode 매개 변수를 사용합니다.
메모
배포당 하나의 리소스 그룹을 사용하는 것이 가장 좋습니다.
메모
연결된 템플릿과 중첩된 템플릿 모두에 incremental
배포 모드만 사용할 수 있습니다.
외부 템플릿 및 외부 매개 변수
외부 템플릿 및 매개 변수 파일에 연결하려면 templateLink 및 parametersLink사용합니다.
템플릿에 연결할 때 Resource Manager 서비스에서 액세스할 수 있는지 확인합니다.
예를 들어 로컬 파일 또는 로컬 네트워크에서만 사용할 수 있는 파일을 지정할 수 없습니다.
HTTP 또는 HTTPS를 포함하는 URI(Uniform Resource Identifier) 값만 제공할 수 있습니다.
한 가지 옵션은 연결된 템플릿을 스토리지 계정에 배치하고 해당 항목에 대한 URI를 사용하는 것입니다.
매개 변수를 인라인으로 제공할 수도 있습니다. 그러나 인라인 매개 변수와 매개 변수 파일에 대한 링크를 모두 사용할 수는 없습니다.
다음 예제에서는 templateLink 매개 변수를 사용합니다.
"resources": [
{
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri":"https://linkedtemplateek1store.blob.core.windows.net/linkedtemplates/linkedStorageAccount.json?sv=2018-03-28&sr=b&sig=dO9p7XnbhGq56BO%2BSW3o9tX7E2WUdIk%2BpF1MTK2eFfs%3D&se=2018-12-31T14%3A32%3A29Z&sp=r"
},
"parameters": {
"storageAccountName":{"value": "[variables('storageAccountName')]"},
"location":{"value": "[parameters('location')]"}
}
}
},
외부 템플릿 보안
연결된 템플릿은 외부에서 사용할 수 있어야 하지만 공개적으로 사용할 수 있도록 할 필요는 없습니다.
대신 스토리지 계정 소유자만 액세스할 수 있는 프라이빗 스토리지 계정에 템플릿을 추가하여 배포 중에 액세스를 사용하도록 SAS(공유 액세스 서명) 토큰을 만들 수 있습니다.
연결된 템플릿의 URI에 해당 SAS 토큰을 추가합니다.
토큰이 보안 문자열로 전달되더라도 SAS 토큰을 포함한 연결된 템플릿의 URI는 배포 작업에 기록됩니다.
노출을 제한하기 위해 토큰의 만료 날짜를 설정할 수도 있습니다.