티스토리 뷰

<참조>

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

https://docs.microsoft.com/en-us/azure/azure-resource-manager/template-tutorial-add-variables?tabs=azure-powershell

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

https://docs.microsoft.com/en-us/azure/azure-resource-manager/template-tutorial-add-outputs?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",
    "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"
            ]
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[parameters('storageName')]",
            "location": "[parameters('location')]",
            "sku": {
                "name": "[parameters('storageSKU')]"
            },
            "kind": "StorageV2",
            "properties": {
                "supportsHttpsTrafficOnly": true
            }
        }
    ]
}

스토리지 계정 이름에는 고유한 이름을 제공해야 하므로 매개 변수를 사용하기 어렵다.이전 자습서 수행 과정에 고유한 이름을 추측하여 만들어 내는 것이 불편했을 것이다. 스토리지 계정의 고유한 이름을 생성하는 변수를 추가한다면 이 문제를 해결할 수 있다.

 

 

 

 

변수 사용 및 출력 추가

다음 예에서는 고유한 스토리지 계정 이름을 만드는 변수를 템플릿에 추가하는 변경 사항이 강조 표시되어 있다. 

더불어 새 스토리지 계정에 대한 엔드포인트를 가져오도록 출력을 사용하여 값을 반환할 수 있다. 

출력 값을 추가하는 템플릿에 대한 변경 사항도 강조 표시되어 있다. 전체 파일을 복사하고 템플릿을 해당 콘텐츠로 바꾼다.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "storagePrefix": {
            "type": "string",
            "minLength": 3,
            "maxLength": 11
        },
        "storageSKU": {
            "type": "string",
            "defaultValue": "Standard_LRS",
            "allowedValues": [
                "Standard_LRS",
                "Standard_GRS",
                "Standard_RAGRS",
                "Standard_ZRS",
                "Premium_LRS",
                "Premium_ZRS",
                "Standard_GZRS",
                "Standard_RAGZRS"
            ]
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]"
        }
    },
    "variables": {
        "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
    },
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-04-01",
            "name": "[variables('uniqueStorageName')]",
            "location": "[parameters('location')]",
            "sku": {
                "name": "[parameters('storageSKU')]"
            },
            "kind": "StorageV2",
            "properties": {
                "supportsHttpsTrafficOnly": true
            }
        }
    ],
    "outputs": {
        "storageEndpoint": {
            "type": "object",
            "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
        }
    }
}

uniqueStorageName이라는 변수가 포함되어 있는 것을 확인한다. 이 변수는 4개의 함수를 사용하여 문자열 값을 생성한다.

이전 자습서에 표시된 것처럼 location 속성 대신 id 속성을 가져온다. id 속성은 구독 ID 및 리소스 그룹 이름을 포함한 리소스 그룹의 전체 식별자를 반환한다.

uniqueString 함수는 13자 해시 값을 만든다. 반환되는 값은 전달하는 매개 변수에 따라 달라진다. 이 자습서에서는 해시값에 대한 입력으로 리소스 그룹 ID를 사용한다. 즉, 이 템플릿을 여러 리소스 그룹에 배포하고 다른 고유한 문자열 값을 가져올 수 있다. 그러나 동일한 리소스 그룹에 배포하는 경우에는 동일한 값을 얻을 수 있다.

concat 함수는 값을 받아서 결합한다. 이 변수의 경우 매개변수의 문자열과 uniqueString 함수의 문자열을 받아서 하나의 문자열로 결합한다.

storagePrefix 매개 변수를 사용하면 스토리지 계정을 식별하는 데 도움이 되는 프리픽스를 전달할 수 있다. 긴 리소스 목록에서 배포한 후 스토리지 계정을 더욱 쉽게 식별할 수 있도록 고유한 명명 규칙을 만들 수 있다.

추가한 출력값과 관련하여 알아두어야 할 몇 가지 중요한 항목이 있다.

반환되는 값의 유형은 object로 설정된다. 즉, JSON 개체를 반환한다.

reference 함수를 사용하여 스토리지 계정의 런타임 상태를 가져온다. 리소스의 런타임 상태를 가져오려면 리소스의 이름 또는 ID를 전달한다. 이 경우 스토리지 계정의 이름을 만드는 데 사용한 것과 동일한 변수를 사용한다.

스토리지 계정에서 primaryEndpoints 속성을 반환한다.

마지막으로, 이제 스토리지 이름이 매개 변수 대신 변수로 설정되었는지 확인한다.

 

 

 

 

템플릿 배포

템플릿을 배포한다. 스토리지 이름의 접두사만 제공하기 때문에 이 템플릿을 이전 템플릿보다 쉽게 배포할 수 있다.

 

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

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

기존 powershell.ps1 이라는 파일을 이용하거나 새로 하나 생성하여 다음 코드를 붙여 넣는다.

위 함수 사용 섹션의  azuredeploy.json 코드도 기존 파일에 덮어 쓰거나 새로 하나 생성하여 붙여 넣는다.

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

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

$location = "koreacentral"
$resourceGroup = "zeroRG"
New-AzResourceGroup -Name $resourceGroup -Location $location
 
$templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
New-AzResourceGroupDeployment `
  -Name addvariablenoutput `
  -ResourceGroupName $resourceGroup `
  -TemplateFile $templateFile `
  -storagePrefix "store" `
  -storageSKU Standard_LRS

위 코드 전체를 선택하고 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-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/zeroRG


PS C:\AzureDevOps-Excercise>
PS C:\AzureDevOps-Excercise> $templateFile = "C:\AzureDevOps-Excercise\azuredeploy.json"
PS C:\AzureDevOps-Excercise> New-AzResourceGroupDeployment `
>>   -Name addvariablenoutput `
>>   -ResourceGroupName $resourceGroup `
>>   -TemplateFile $templateFile `
>>   -storagePrefix "store" `
>>   -storageSKU Standard_LRS

DeploymentName          : addvariablenoutput
ResourceGroupName       : zeroRG
ProvisioningState       : Succeeded
Timestamp               : 12/1/2019 1:39:16 AM
Mode                    : Incremental
TemplateLink            :
Parameters              :
                          Name             Type                       Value
                          ===============  =========================  ==========
                          storagePrefix    String                     store
                          storageSKU       String                     Standard_LRS
                          location         String                     koreacentral

Outputs                 :
                          Name               Type                       Value
                          =================  =========================  ==========
                          storageEndpoint    Object                     {
                            "dfs": "https://storece5bz5okhoqqg.dfs.core.windows.net/",
                            "web": "https://storece5bz5okhoqqg.z12.web.core.windows.net/",
                            "blob": "https://storece5bz5okhoqqg.blob.core.windows.net/",
                            "queue": "https://storece5bz5okhoqqg.queue.core.windows.net/",
                            "table": "https://storece5bz5okhoqqg.table.core.windows.net/",
                            "file": "https://storece5bz5okhoqqg.file.core.windows.net/"
                          }

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 addvariablenoutputs \
  --resource-group $resourceGroup \
  --template-file $templateFile \
  --parameters storagePrefix=store storageSKU=Standard_LRS

 

위 코드 전체를 선택하고 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-xxxx-xxxx-xxxx-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 addvariablenoutputs \
>   --resource-group $resourceGroup \
>   --template-file $templateFile \
>   --parameters storagePrefix=store storageSKU=Standard_LRS
{
  "id": "/subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Resources/deployments/addvariablenoutputs",
  "location": null,
  "name": "addvariablenoutputs",
  "properties": {
    "correlationId": "d8d34c30-66c4-4db6-b13a-9159b2c60756",
    "debugSetting": null,
    "dependencies": [],
    "duration": "PT28.2463963S",
    "mode": "Incremental",
    "onErrorDeployment": null,
    "outputResources": [
      {
        "id": "/subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/zerobigRG/providers/Microsoft.Storage/storageAccounts/storei3vprrc4ufywu",
        "resourceGroup": "zerobigRG"
      }
    ],
    "outputs": {
      "storageEndpoint": {
        "type": "Object",
        "value": {
          "blob": "https://storei3vprrc4ufywu.blob.core.windows.net/",
          "dfs": "https://storei3vprrc4ufywu.dfs.core.windows.net/",
          "file": "https://storei3vprrc4ufywu.file.core.windows.net/",
          "queue": "https://storei3vprrc4ufywu.queue.core.windows.net/",
          "table": "https://storei3vprrc4ufywu.table.core.windows.net/",
          "web": "https://storei3vprrc4ufywu.z12.web.core.windows.net/"
        }
      }
    },
    "parameters": {
      "location": {
        "type": "String",
        "value": "koreacentral"
      },
      "storagePrefix": {
        "type": "String",
        "value": "store"
      },
      "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": "6119218575200898981",
    "templateLink": null,
    "timestamp": "2019-12-01T01:49:42.377553+00:00"
  },
  "resourceGroup": "zerobigRG",
  "type": "Microsoft.Resources/deployments"
}
zerobig@zerovmw10:/mnt/c/AzureDevOps-Excercise$

 

 

 

 

배포 확인

Azure Portal에서 리소스 그룹을 탐색하여 배포를 확인할 수 있다.

  1. Azure Portal에 로그인한다.
  2. 왼쪽 메뉴에서 리소스 그룹을 선택한다.
  3. 배포한 리소스 그룹을 선택한다.
  4. 스토리지 계정 이름이 store에 임의의 문자 문자열을 더한 값으로 배포된 것을 확인할 수 있다.

더불어 배포 명령의 출력에 다음과 같이 primaryEndpoints 속성을 반환하고 있다.

 

 

 

 

작업 검토

지금까지 수행한 작업을 검토해 보겠다. 쉽게 제공할 수 있는 매개 변수를 사용하여 템플릿을 만들었다. 템플릿은 사용자 지정이 가능하고 필요한 값을 동적으로 만들 수 있으므로 여러 환경에서 재사용할 수 있다. 또한 스크립트에서 사용할 수 있는 스토리지 계정에 대한 정보도 반환한다.

  1. 모든 배포는 기록에 표시된다. Deployments의 1 Succeeded를 선택하고 addvariablenoutput이라는 Deployment name을 클릭한다.

  2. 입력을 검토할 수 있다.
  3. 출력을 검토할 수 있다.
  4. 템플릿을 검토할 수 있다.

 

 

 

 

리소스 정리

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

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

  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
글 보관함