티스토리 뷰

<참조>

https://docs.microsoft.com/ko-kr/azure/azure-resource-manager/template-tutorial-add-parameters?tabs=azure-powershell

https://docs.microsoft.com/ko-kr/azure/azure-resource-manager/template-tutorial-add-parameters?tabs=azure-powershell

 

 

 

 

이전 자습서에서는 템플릿에 스토리지 계정을 추가하여 배포하는 방법을 알아보았다. 이번에는 매개 변수를 추가하여 템플릿을 개선하는 방법을 알아본다.

 

 

 

필수 조건

Resource Manager Tools 확장이 포함된 Visual Studio Code 및 Azure PowerShell 또는 Azure CLI가 있어야 한다.

준비가 안되었다면, Azure 실습을 위한 Visual Studio Code 환경 구성과 Linux용 Windows 하위 시스템 설치를 참고하여 실습 준비를 마친다.

 

 

 

템플릿 검토

다음은 이전 자습서에서 활용한 템플릿이다.

   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "zeroteststg",
            "location": "koreacentral",
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "StorageV2",
            "properties": {
                "supportsHttpsTrafficOnly": true
            }
        }
    ]
}

 

이 템플릿에는 스토리지 계정 이름이 하드코딩 되어 있다. 이 템플릿은 매번 동일한 스토리지 계정을 배포하는 데에만 사용할 수 있다. 다른 이름의 스토리지 계정을 배포하려면, 새 템플릿을 만들어야 하며, 이것은 배포를 자동화하기에 타당한 방법이 아니다.

 

 

템플릿을 재사용할 수 있도록 설정

템플릿을 재사용할 수 있도록, 스토리지 계정 이름을 전달하는 데 사용할 수 있는 매개변수를 추가하겠다. 다음 예제에 강조 표시되어 있는 JSON은 템플릿에서 변경된 내용을 보여준다. storageName 매개변수는 문자열로 식별된다. 너무 긴 이름은 피하기 위해 최대 길이는 24자로 설정되어 있다.

전체 파일을 복사하고 템플릿을 해당 콘텐츠로 바꾼다.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "storageName": {
            "type": "string",
            "minLength": 3,
            "maxLength": 24
        }
    },
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[parameters('storageName')]",
            "location": "koreacentral",
            "sku": {
                "name": "Standard_LRS"
            },
            "kind": "StorageV2",
            "properties": {
                "supportsHttpsTrafficOnly": true
            }
        }
    ]
}

 

 

템플릿 배포

템플릿을 배포해보겠다. 다음 예제는 Azure CLI 또는 PowerShell을 사용하여 템플릿을 배포한다. 

 

실습 디렉토리에서 탐색기 메뉴 중 Open with Code를 선택해 VS Code를 연다.

 

Ctrl + Shift + p를 누르고 화면 상단 터미널 선택 창에서 PowerShell Core를 선택하여 shell을 구동한다.

이전 실습에서 사용했던 powershell.ps1 파일을 이용하거나 새로 하나 생성하여 다음 코드를 붙여 넣는다.

$resourceGroup 이나 $templateFile은 각자 상황에 맞게 수정하고 -storageName의 값은 중복되지 않는 임의의 값으로 정해 입력해 준다. 

참고로 이전 실습에서 생성되었던 리소스 그룹(zeroRG)은 모두 정리되었다고 가정하지만, 정리가 안되었더라도 코드 실행 과정에서 업데이트 여부를 물을 때 Y(기본값)를 눌러 진행하면 된다.

$location = "koreacentral"
$resourceGroup = "zeroRG"
New-AzResourceGroup -Name $resourceGroup -Location $location

$templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
  New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName $resourceGroup `
  -TemplateFile $templateFile `
  -storageName "zerotempstorage"

 

위 코드 전체를 선택하고 F8을 눌러 코드를 실행한다.

이상이 없다면 ProvisioningState가 Succeeded 상태로 확인 될 것이다.

PS C:\AzureDevOps-Excercise> $location = "koreacentral"
PS C:\AzureDevOps-Excercise> $resourceGroup = "zeroRG"
PS C:\AzureDevOps-Excercise> New-AzResourceGroup -Name $resourceGroup -Location $location

ResourceGroupName : zeroRG
Location          : koreacentral
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zeroRG


PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise>   New-AzResourceGroupDeployment `
>>   -Name addnameparameter `
>>   -ResourceGroupName $resourceGroup `
>>   -TemplateFile $templateFile `
>>   -storageName "zerotempstorage"

DeploymentName          : addnameparameter
ResourceGroupName       : zeroRG
ProvisioningState       : Succeeded
Timestamp               : 11/24/2019 7:34:37 AM
Mode                    : Incremental
TemplateLink            :
Parameters              :
                          Name             Type                       Value
                          ===============  =========================  ==========
                          storageName      String                     zerotempstorage

Outputs                 :
DeploymentDebugLogLevel :


PS C:\AzureDevOps-Excercise>

 

터미널 창 우측 셀렉트 박스에 wsl이 있다면 그것을 선택한다.

없다면, 최하단의 Select Default Shell을 선택한다.

화면 상단에 wsl을 선택할 수 있도록 가용한 shell 리스트가 나열될 것이며 그 중에서 WSL Bash를 선택한다.

현재 실습 디렉토리 내 azurecli.azcli라는 파일을 만들고 다음 코드를 붙여 넣는다.

볼딕으로 표기된 부분은 각자의 상황에 맞게 resourceGroup과 templateFile 등의 값을 수정하여 저장한다.

resourceGroup="zerobigRG"
location="koreacentral"

az group create \
  --resource-group $resourceGroup \
  --location $location

templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"

az group deployment create \
  --name addnameparameter \
  --resource-group $resourceGroup \
  --template-file $templateFile \
  --parameters storageName=zerobigtempstorage

 

위 코드 전체를 선택하고 Ctrl + '를 눌러 코드를 실행한다.

zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ resourceGroup="zerobigRG"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ location="koreacentral"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group create \
>   --resource-group $resourceGroup \
>   --location $location
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG",
  "location": "koreacentral",
  "managedBy": null,
  "name": "zerobigRG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group deployment create \
>   --name addnameparameter \
>   --resource-group $resourceGroup \
>   --template-file $templateFile \
>   --parameters storageName=zerobigtempstg
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Resources/deployments/addnameparameter",
  "location": null,
  "name": "addnameparameter",
  "properties": {
    "correlationId": "138056b2-5b1f-48c5-9d5e-6a161e148d70",
    "debugSetting": null,
    "dependencies": [],
    "duration": "PT29.0784675S",
    "mode": "Incremental",
    "onErrorDeployment": null,
    "outputResources": [
      {
        "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Storage/storageAccounts/zerobigtempstg",
        "resourceGroup": "zerobigRG"
      }
    ],
    "outputs": null,
    "parameters": {
      "storageName": {
        "type": "String",
        "value": "zerobigtempstg"
      }
    },
    "parametersLink": null,
    "providers": [
      {
        "id": null,
        "namespace": "Microsoft.Storage",
        "registrationPolicy": null,
        "registrationState": null,
        "resourceTypes": [
          {
            "aliases": null,
            "apiVersions": null,
            "capabilities": null,
            "locations": [
              "koreacentral"
            ],
            "properties": null,
            "resourceType": "storageAccounts"
          }
        ]
      }
    ],
    "provisioningState": "Succeeded",
    "template": null,
    "templateHash": "480628016527446015",
    "templateLink": null,
    "timestamp": "2019-11-24T08:26:24.824652+00:00"
  },
  "resourceGroup": "zerobigRG",
  "type": "Microsoft.Resources/deployments"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$

 

 

 

리소스 업데이트 이해

이전 섹션에서는 이전에 만든 것과 동일한 이름으로 스토리지 계정을 배포했다. 재배포에 의해 리소스가 어떻게 영향을 받는지 궁금할 수 있다.

리소스가 이미 있고 속성에서 변경 내용이 검색되지 않으면 아무 동작도 수행되지 않는다. 리소스가 이미 있고 속성이 변경된 경우에는 리소스가 업데이트 된다. 리소스가 존재하지 않으면 만들어진다.

템플릿을 이런 방식으로 처리하면 Azure 솔루션에 필요한 모든 리소스를 템플릿에 포함할 수 있다. 템플릿을 안전하게 재배포할 수 있고 필요한 경우에만 리소스가 변경되거나 생성되는 것을 알 수 있다. 예를 들어 스토리지 계정에 파일을 추가한 경우 파일 유실 없이  스토리지 계정을 다시 배포할 수 있다.

 

 

 

 

환경에 따라 사용자 지정

매개변수를 사용하면 특정 환경에 맞게 조정된 값을 제공하여 배포를 사용자 정의할 수 있다. 예를 들어 개발, 테스트 및 프로덕션을 위해 환경에 배포하는지 여부에 따라 다른 값을 전달할 수 있다.

이전 템플릿은 항상 Standard_LRS 스토리지 계정을 배포했다. 환경에 따라 다른 SKU를 배포하는 유연성이 필요할 수도 있다. 다음 예제는 SKU에 대한 매개변수를 추가하기 위한 변경 내용을 보여준다.. 전체 파일을 복사하여 템플릿에 붙여넣는다.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "storageName": {
            "type": "string",
            "minLength": 3,
            "maxLength": 24
        },
        "storageSKU": {
            "type": "string",
            "defaultValue": "Standard_LRS",
            "allowedValues": [
                "Standard_LRS",
                "Standard_GRS",
                "Standard_RAGRS",
                "Standard_ZRS",
                "Premium_LRS",
                "Premium_ZRS",
                "Standard_GZRS",
                "Standard_RAGZRS"
            ]
        }
    },
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[parameters('storageName')]",
            "location": "koreacentral",
            "sku": {
                "name": "[parameters('storageSKU')]"
            },
            "kind": "StorageV2",
            "properties": {
                "supportsHttpsTrafficOnly": true
            }
        }
    ]
}

storageSKU 매개변수에는 기본값이 있다. 이 값은 배포 중에 값을 지정되지 않은 경우 사용된다. 허용되는 값 목록도 있다. 이 값은 스토리지 계정을 만드는데 필요한 값과 일치한다. 작동하지 않는 SKU는 템플릿 사용자가 전달하지 않도록 한다.

 

 

 

템플릿 다시 배포

 

다시 배포할 준비가 되었다. 기본 SKU가 Standard_LRS로 설정되어 있기 때문에 해당 매개변수에 대한 값을 제공할 필요가 없다.

$location = "koreacentral"
$resourceGroup = "zeroRG"
New-AzResourceGroup -Name $resourceGroup -Location $location

$templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
  New-AzResourceGroupDeployment `
  -Name addskuparameter `
  -ResourceGroupName $resourceGroup `
  -TemplateFile $templateFile `
  -storageName "zerotempstorage"

 

위 코드 전체를 선택하고 F8을 눌러 코드를 실행한다.

PS C:\AzureDevOps-Excercise> $location = "koreacentral"
PS C:\AzureDevOps-Excercise> $resourceGroup = "zeroRG"
PS C:\AzureDevOps-Excercise> New-AzResourceGroup -Name $resourceGroup -Location $location

Confirm
Provided resource group already exists. Are you sure you want to update it?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

ResourceGroupName : zeroRG
Location          : koreacentral
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zeroRG


PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise>   New-AzResourceGroupDeployment `
>>   -Name addskuparameter `
>>   -ResourceGroupName $resourceGroup `
>>   -TemplateFile $templateFile `
>>   -storageName "zerotempstorage"

DeploymentName          : addskuparameter
ResourceGroupName       : zeroRG
ProvisioningState       : Succeeded
Timestamp               : 11/24/2019 8:08:08 AM
Mode                    : Incremental
TemplateLink            :
Parameters              :
                          Name             Type                       Value
                          ===============  =========================  ==========
                          storageName      String                     zerotempstorage
                          storageSKU       String                     Standard_LRS

Outputs                 :
DeploymentDebugLogLevel :


PS C:\AzureDevOps-Excercise>

storageSKU 매개변수가 기본값인 Standard_LRS의 값으로 추가되었음을 확인할 수 있다.

 

 

resourceGroup="zerobigRG"
location="koreacentral"

az group create \
--resource-group $resourceGroup \
--location $location

templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"

az group deployment create \
--name addnameparameter \
--resource-group $resourceGroup \
--template-file $templateFile \
--parameters storageSKU=Standard_GRS storageName=zerobigtempstg

 

위 코드 전체를 선택하고 Ctrl + '를 눌러 코드를 실행한다.

zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ resourceGroup="zerobigRG"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ location="koreacentral"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group create \
>   --resource-group $resourceGroup \
>   --location $location
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG",
  "location": "koreacentral",
  "managedBy": null,
  "name": "zerobigRG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group deployment create \
>   --name addnameparameter \
>   --resource-group $resourceGroup \
>   --template-file $templateFile \
>   --parameters storageName=zerobigtempstg
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Resources/deployments/addnameparameter",
  "location": null,
  "name": "addnameparameter",
  "properties": {
    "correlationId": "6dd69df4-7298-47e0-9104-17a73ac150e2",
    "debugSetting": null,
    "dependencies": [],
    "duration": "PT2.1649258S",
    "mode": "Incremental",
    "onErrorDeployment": null,
    "outputResources": [
      {
        "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Storage/storageAccounts/zerobigtempstg",
        "resourceGroup": "zerobigRG"
      }
    ],
    "outputs": null,
    "parameters": {
      "storageName": {
        "type": "String",
        "value": "zerobigtempstg"
      },
      "storageSKU": {
        "type": "String",
        "value": "Standard_LRS"
      }
    },
    "parametersLink": null,
    "providers": [
      {
        "id": null,
        "namespace": "Microsoft.Storage",
        "registrationPolicy": null,
        "registrationState": null,
        "resourceTypes": [
          {
            "aliases": null,
            "apiVersions": null,
            "capabilities": null,
            "locations": [
              "koreacentral"
            ],
            "properties": null,
            "resourceType": "storageAccounts"
          }
        ]
      }
    ],
    "provisioningState": "Succeeded",
    "template": null,
    "templateHash": "11280371580217052027",
    "templateLink": null,
    "timestamp": "2019-11-24T08:30:05.448536+00:00"
  },
  "resourceGroup": "zerobigRG",
  "type": "Microsoft.Resources/deployments"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$

역시 StorageSKU 매개변수가 기본값인 Standard_LRS로 추가되었음을 확인할 수 있다.

 

템플릿의 유연성을 보기 위해 다시 배포하겠다. 이번에는 SKU 매개변수를 Standard_GRS로 설정한다. 새 이름을 전달하여 다른 스토리지 계정을 만들거나 같은 이름을 사용하여 기존 스토리지 계정을 업데이트할 수 있다. 두 옵션 모두 괜찮지만, 여기서는 기존 스토리지 계정 업데이트로 진행하겠다.

 

$location = "koreacentral"
$resourceGroup = "zeroRG"
New-AzResourceGroup -Name $resourceGroup -Location $location

$templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
  New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName $resourceGroup `
  -TemplateFile $templateFile `
  -storageName "zerotempstorage" `
  -storageSKU Standard_GRS

 

위 코드 전체를 선택하고 F8을 눌러 코드를 실행한다.

PS C:\AzureDevOps-Excercise> $location = "koreacentral"
PS C:\AzureDevOps-Excercise> $resourceGroup = "zeroRG"
PS C:\AzureDevOps-Excercise> New-AzResourceGroup -Name $resourceGroup -Location $location

Confirm
Provided resource group already exists. Are you sure you want to update it?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

ResourceGroupName : zeroRG
Location          : koreacentral
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zeroRG


PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise>   New-AzResourceGroupDeployment `
>>   -Name addnameparameter `
>>   -ResourceGroupName $resourceGroup `
>>   -TemplateFile $templateFile `
>>   -storageName "zerotempstorage" `
>>   -storageSKU Standard_GRS

DeploymentName          : addnameparameter
ResourceGroupName       : zeroRG
ProvisioningState       : Succeeded
Timestamp               : 11/24/2019 8:36:45 AM
Mode                    : Incremental
TemplateLink            :
Parameters              :
                          Name             Type                       Value
                          ===============  =========================  ==========
                          storageName      String                     zerotempstorage
                          storageSKU       String                     Standard_GRS

Outputs                 :
DeploymentDebugLogLevel :


PS C:\AzureDevOps-Excercise>

storageSKU 매개변수가 Standard_GRS로 업데이트 된 것을 확인할 수 있다.

 

 

resourceGroup="zerobigRG"
location="koreacentral"

az group create \
--resource-group $resourceGroup \
--location $location

templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"

az group deployment create \
--name addnameparameter \
--resource-group $resourceGroup \
--template-file $templateFile \
--parameters storageSKU=Standard_GRS storageName=zerobigtempstg

 

위 코드 전체를 선택하고 Ctrl + '를 눌러 코드를 실행한다.

zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ resourceGroup="zerobigRG"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ location="koreacentral"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group create \
>   --resource-group $resourceGroup \
>   --location $location
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG",
  "location": "koreacentral",
  "managedBy": null,
  "name": "zerobigRG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group deployment create \
>   --name addnameparameter \
>   --resource-group $resourceGroup \
>   --template-file $templateFile \
>   --parameters storageSKU=Standard_GRS storageName=zerobigtempstg
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Resources/deployments/addnameparameter",
  "location": null,
  "name": "addnameparameter",
  "properties": {
    "correlationId": "ae11337c-3834-4b04-a2c7-88ad807969ea",
    "debugSetting": null,
    "dependencies": [],
    "duration": "PT3.0204347S",
    "mode": "Incremental",
    "onErrorDeployment": null,
    "outputResources": [
      {
        "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Storage/storageAccounts/zerobigtempstg",
        "resourceGroup": "zerobigRG"
      }
    ],
    "outputs": null,
    "parameters": {
      "storageName": {
        "type": "String",
        "value": "zerobigtempstg"
      },
      "storageSKU": {
        "type": "String",
        "value": "Standard_GRS"
      }
    },
    "parametersLink": null,
    "providers": [
      {
        "id": null,
        "namespace": "Microsoft.Storage",
        "registrationPolicy": null,
        "registrationState": null,
        "resourceTypes": [
          {
            "aliases": null,
            "apiVersions": null,
            "capabilities": null,
            "locations": [
              "koreacentral"
            ],
            "properties": null,
            "resourceType": "storageAccounts"
          }
        ]
      }
    ],
    "provisioningState": "Succeeded",
    "template": null,
    "templateHash": "11280371580217052027",
    "templateLink": null,
    "timestamp": "2019-11-24T08:40:55.439179+00:00"
  },
  "resourceGroup": "zerobigRG",
  "type": "Microsoft.Resources/deployments"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$

역시 StorageSKU 매개변수가 기본값인 Standard_LRS로 추가되었음을 확인할 수 있다.

 

마지막으로 한 가지 테스트를 더 실행하여 허용된 값에 속하지 않는 SKU를 전달하면 어떻게 되는지 살펴보겠다. 템플릿 사용자가 basic이 SKU 중 하나의 값으로 생각하여 값으로 basic을 전달하는 시나리오를 테스트한다.

 

$location = "koreacentral"
$resourceGroup = "zeroRG"
New-AzResourceGroup -Name $resourceGroup -Location $location

$templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
  New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName $resourceGroup `
  -TemplateFile $templateFile `
  -storageName "zerotempstorage" `
  -storageSKU basic

 

위 코드 전체를 선택하고 F8을 눌러 코드를 실행한다.

PS C:\AzureDevOps-Excercise> $location = "koreacentral"
PS C:\AzureDevOps-Excercise> $resourceGroup = "zeroRG"
PS C:\AzureDevOps-Excercise> New-AzResourceGroup -Name $resourceGroup -Location $location

Confirm
Provided resource group already exists. Are you sure you want to update it?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

ResourceGroupName : zeroRG
Location          : koreacentral
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zeroRG


PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise>   New-AzResourceGroupDeployment `
>>   -Name addnameparameter `
>>   -ResourceGroupName $resourceGroup `
>>   -TemplateFile $templateFile `
>>   -storageName "zerotempstorage" `
>>   -storageSKU basic
New-AzResourceGroupDeployment : 5:44:06 PM - Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The provided value 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Common.Entities.TemplateGenericProperty`1[Newtonsoft.Json.Linq.JToken]' for the template parameter 'storageSKU' at line '15' and column '28' is not valid. The parameter value is not part of the allowed value(s): 'Standard_LRS,Standard_GRS,Standard_RAGRS,Standard_ZRS,Premium_LRS,Premium_ZRS,Standard_GZRS,Standard_RAGZRS'.'.
At line:1 char:3
+   New-AzResourceGroupDeployment `
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [New-AzResourceGroupDeployment], Exception
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet
 
New-AzResourceGroupDeployment : The deployment validation failed
At line:1 char:3
+   New-AzResourceGroupDeployment `
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : CloseError: (:) [New-AzResourceGroupDeployment], InvalidOperationException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet
 
PS C:\AzureDevOps-Excercise>

The parameter value is not part of the allowed value(s)... 라는 메시지를 출력하며 에러가 발생한다. storageSKU에 허용되지 않은 값을 전달했기 때문이다.

Resource Manager는 배포가 시작되기 전에 오류를 식별한다.

 

resourceGroup="zerobigRG"
location="koreacentral"

az group create \
--resource-group $resourceGroup \
--location $location

templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"

az group deployment create \
--name addnameparameter \
--resource-group $resourceGroup \
--template-file $templateFile \
--parameters storageSKU=basic storageName=zerobigtempstg

 

위 코드 전체를 선택하고 Ctrl + '를 눌러 코드를 실행한다.

zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ resourceGroup="zerobigRG"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ location="koreacentral"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group create \
>   --resource-group $resourceGroup \
>   --location $location
{
  "id": "/subscriptions/2e5d848e-8dfe-42ae-95a5-fd25ae915bcd/resourceGroups/zerobigRG",
  "location": "koreacentral",
  "managedBy": null,
  "name": "zerobigRG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ templateFile="/mnt/c/AzureDevOps-Excercise/azuredeploy.json"
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$ az group deployment create \
>   --name addnameparameter \
>   --resource-group $resourceGroup \
>   --template-file $templateFile \
>   --parameters storageSKU=basic storageName=zerobigtempstg
Azure Error: InvalidTemplate
Message: Deployment template validation failed: 'The provided value 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Common.Entities.TemplateGenericProperty`1[Newtonsoft.Json.Linq.JToken]' for the template parameter 'storageSKU' at
line '1' and column '318' is not valid. The parameter value is not part of the allowed value(s): 'Standard_LRS,Standard_GRS,Standard_RAGRS,Standard_ZRS,Premium_LRS,Premium_ZRS,Standard_GZRS,Standard_RAGZRS'.'.
Additional Information:
        Type: TemplateViolation
        Info: {
            "lineNumber": 1,
            "linePosition": 318,
            "path": "properties.template.parameters.storageSKU.allowedValues"
        }
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$

마찬가지로 The parameter value is not part of the allowed value(s)... 라는 메시지를 출력하며 에러가 발생한다. 

Resource Manager는 배포가 시작되기 전에 오류를 식별한다.

 

 

 

리소스 정리

다음 자습서로 이동하는 경우에는 리소스 그룹을 삭제할 필요가 없다.

지금 중지하는 경우에는 리소스 그룹을 삭제하여 배포된 리소스를 정리하는 것이 좋다.

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택한다.
  2. 이름으로 필터링 필드에서 리소스 그룹 이름을 입력한다.
  3. 해당 리소스 그룹 이름을 선택한다.
  4. 위쪽 메뉴에서 리소스 그룹 삭제를 선택한다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함