빠른 시작: ARM 템플릿을 사용하여 Azure App Configuration 저장소 만들기

이 빠른 시작에서는 다음을 수행하는 방법을 설명합니다.

  • ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 App Configuration 저장소를 배포합니다.
  • ARM 템플릿을 사용하여 App Configuration 저장소에서 키-값을 만듭니다.
  • ARM 템플릿에서 App Configuration 저장소의 키-값을 읽습니다.

기능 플래그 및 Key Vault 참조는 특수한 유형의 키-값입니다. ARM 템플릿을 사용하여 만드는 예제는 다음 단계를 확인하세요.

Azure Resource Manager 템플릿은 프로젝트에 대한 인프라 및 구성을 정의하는 JSON(JavaScript Object Notation) 파일입니다. 이 템플릿은 선언적 구문을 사용합니다. 배포를 만들기 위한 프로그래밍 명령의 시퀀스를 작성하지 않고 의도하는 배포를 설명합니다.

환경이 필수 구성 요소를 충족하고 ARM 템플릿 사용에 익숙한 경우 Azure에 배포 단추를 선택합니다. 그러면 Azure Portal에서 템플릿이 열립니다.

Resource Manager 템플릿을 Azure에 배포하는 단추

필수 조건

Azure 구독이 없는 경우 시작하기 전에 체험 계정을 만듭니다.

권한 부여

ARM 템플릿 내에서 Azure App Configuration 리소스를 관리하려면 기여자 또는 소유자와 같은 Azure Resource Manager 역할이 필요합니다. Azure App Configuration 데이터(키-값, 스냅샷)에 액세스하려면 Azure Resource Manager 역할 및 Azure App Configuration 데이터 평면 역할통과 ARM 인증 모드에서 필요합니다.

템플릿 검토

이 빠른 시작에서 사용되는 템플릿은 Azure 빠른 시작 템플릿에서 나온 것입니다. 두 개의 키-값이 내부에 있는 새 App Configuration 저장소를 만듭니다. 그런 다음, reference 함수를 사용하여 두 개의 키-값 리소스에 대한 값을 출력합니다. 키의 값을 이러한 방식으로 읽으면 템플릿의 다른 위치에서 키를 사용할 수 있습니다.

빠른 시작에서는 copy 요소를 사용하여 키-값 리소스의 여러 인스턴스를 만듭니다. copy 요소에 대한 자세한 내용은 ARM 템플릿의 리소스 반복을 참조하세요.

Important

이 템플릿에는 App Configuration 리소스 공급자 버전 2020-07-01-preview 이상이 필요합니다. 이 버전에서는 reference 함수를 사용하여 키-값을 읽습니다. 이전 버전에서 키-값을 읽는 데 사용된 listKeyValue 함수는 2020-07-01-preview 버전부터 사용할 수 없습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "2173262573838896712"
    }
  },
  "parameters": {
    "configStoreName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the App Configuration store."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the Azure location where the app configuration store should be created."
      }
    },
    "keyValueNames": {
      "type": "array",
      "defaultValue": [
        "myKey",
        "myKey$myLabel"
      ],
      "metadata": {
        "description": "Specifies the names of the key-value resources. The name is a combination of key and label with $ as delimiter. The label is optional."
      }
    },
    "keyValueValues": {
      "type": "array",
      "defaultValue": [
        "Key-value without label",
        "Key-value with label"
      ],
      "metadata": {
        "description": "Specifies the values of the key-value resources. It's optional"
      }
    },
    "contentType": {
      "type": "string",
      "defaultValue": "the-content-type",
      "metadata": {
        "description": "Specifies the content type of the key-value resources. For feature flag, the value should be application/vnd.microsoft.appconfig.ff+json;charset=utf-8. For Key Value reference, the value should be application/vnd.microsoft.appconfig.keyvaultref+json;charset=utf-8. Otherwise, it's optional."
      }
    },
    "tags": {
      "type": "object",
      "defaultValue": {
        "tag1": "tag-value-1",
        "tag2": "tag-value-2"
      },
      "metadata": {
        "description": "Adds tags for the key-value resources. It's optional"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.AppConfiguration/configurationStores",
      "apiVersion": "2021-10-01-preview",
      "name": "[parameters('configStoreName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "standard"
      }
    },
    {
      "copy": {
        "name": "configStoreKeyValue",
        "count": "[length(parameters('keyValueNames'))]"
      },
      "type": "Microsoft.AppConfiguration/configurationStores/keyValues",
      "apiVersion": "2021-10-01-preview",
      "name": "[format('{0}/{1}', parameters('configStoreName'), parameters('keyValueNames')[copyIndex()])]",
      "properties": {
        "value": "[parameters('keyValueValues')[copyIndex()]]",
        "contentType": "[parameters('contentType')]",
        "tags": "[parameters('tags')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.AppConfiguration/configurationStores', parameters('configStoreName'))]"
      ]
    }
  ],
  "outputs": {
    "reference_key_value_value": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.AppConfiguration/configurationStores/keyValues', parameters('configStoreName'), parameters('keyValueNames')[0])).value]"
    },
    "reference_key_value_object": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.AppConfiguration/configurationStores/keyValues', parameters('configStoreName'), parameters('keyValueNames')[1]), '2021-10-01-preview', 'full')]"
    }
  }
}

템플릿에는 두 개의 Azure 리소스가 정의되어 있습니다.

keyValues 리소스의 이름은 키와 레이블의 조합입니다. 키와 레이블은 $ 구분 기호로 조인됩니다. 레이블은 선택 사항입니다. 위의 예제에서 이름이 myKeykeyValues 리소스는 레이블이 없는 키-값을 만듭니다.

URL 인코딩이라고도 하는 퍼센트 인코딩을 사용하면 ARM 템플릿 리소스 이름에 허용되지 않는 문자를 키 또는 레이블에 포함할 수 있습니다. %도 허용되는 문자가 아니므로 ~가 대신 사용됩니다. 이름을 올바르게 인코딩하려면 다음 단계를 수행합니다.

  1. URL 인코딩을 적용합니다.
  2. ~~7E으로 대체합니다.
  3. %~으로 대체합니다.

예를 들어 키 이름이 AppName:DbEndpoint이고 레이블 이름이 Test인 키-값 쌍을 만들려면 리소스 이름이 AppName~3ADbEndpoint$Test여야 합니다.

참고 항목

앱 구성을 사용하면 가상 네트워크에서 프라이빗 링크를 통해 키-값 데이터에 액세스할 수 있습니다. 기본적으로 이 기능을 사용하도록 설정하면 공용 네트워크를 통한 앱 구성 데이터에 대한 모든 요청이 거부됩니다. ARM 템플릿은 가상 네트워크 외부에서 실행되므로 ARM 템플릿에서의 데이터 액세스는 허용되지 않습니다. 프라이빗 링크를 사용할 때 ARM 템플릿에서 데이터 액세스를 허용하려면 다음 Azure CLI 명령을 사용하여 공용 네트워크 액세스를 사용하도록 설정하면 됩니다. 이 시나리오에서는 공용 네트워크 액세스를 활성화하는 보안 관련 사항을 고려해야 합니다.

az appconfig update -g MyResourceGroup -n MyAppConfiguration --enable-public-network true

템플릿 배포

다음 이미지를 선택하고 Azure에 로그인하여 템플릿을 엽니다. 템플릿에서 두 개의 키-값이 내부에 있는 App Configuration 저장소를 만듭니다.

Resource Manager 템플릿을 Azure에 배포하는 단추

다음 PowerShell cmdlet을 사용하여 템플릿을 배포할 수도 있습니다. 키-값은 PowerShell 콘솔의 출력에 있습니다.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.appconfiguration/app-configuration-store-kv/azuredeploy.json"

$resourceGroupName = "${projectName}rg"

New-AzResourceGroup -Name $resourceGroupName -Location "$location"
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri

Read-Host -Prompt "Press [ENTER] to continue ..."

배포된 리소스 검토

  1. Azure Portal에 로그인합니다.
  2. Azure Portal 검색 상자에서 App Configuration을 입력합니다. 목록에서 App Configuration을 선택합니다.
  3. 새로 만든 App Configuration 리소스를 선택합니다.
  4. 작업 아래에서 구성 탐색기를 클릭합니다.
  5. 두 개의 키-값이 있는지 확인합니다.

리소스 정리

더 이상 필요하지 않은 경우 리소스 그룹, App Configuration 저장소 및 모든 관련 리소스를 삭제합니다. 나중에 App Configuration 저장소를 사용하려는 경우 삭제를 건너뛸 수 있습니다. 이 저장소를 계속 사용하지 않으려면 다음과 같은 cmdlet을 실행하여 이 빠른 시작에서 만든 리소스를 모두 삭제합니다.

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
Remove-AzResourceGroup -Name $resourceGroupName
Write-Host "Press [ENTER] to continue..."

다음 단계

기능 플래그 및 Key Vault 참조를 App Configuration 저장소에 추가하는 방법에 대해 알아보려면 ARM 템플릿 예제를 참조하세요.