다음을 통해 공유


자습서: Azure 빠른 시작 템플릿 사용

Azure 빠른 시작 템플릿은 커뮤니티 제공 템플릿의 리포지토리입니다. 템플릿 개발에 샘플 템플릿을 사용할 수 있습니다. 이 자습서에서는 웹 사이트 리소스 정의를 찾아서 자체 템플릿에 추가합니다. 이 지침을 완료하는 데 12분이 걸립니다.

필수 조건

내보낸 템플릿에 대한 자습서를 완료하는 것이 좋지만 필수는 아닙니다.

Resource Manager 도구 확장이 있는 Visual Studio Code와 Azure PowerShell 또는 Azure CLI(명령줄 인터페이스)가 있어야 합니다. 자세한 내용은 템플릿 도구를 참조하세요.

템플릿 검토

이전 자습서의 끝 부분에 템플릿에는 다음 JSON 파일이 있습니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-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]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

이 템플릿은 스토리지 계정 및 App Service 계획을 배포하는 데 사용되지만 여기에 웹 사이트를 추가할 수도 있습니다. 미리 빌드된 템플릿을 사용하여 리소스를 배포하는 데 필요한 JSON을 신속하게 검색할 수 있습니다.

템플릿 찾기

  1. Azure 빠른 시작 템플릿을 엽니다.

  2. 제목이 기본 Linux 웹앱 배포인 타일을 선택합니다. 찾는 데 문제가 있으면 직접 링크를 사용하세요.

  3. GitHub에서 찾아보기를 선택합니다.

  4. azuredeploy.json을 선택합니다.

  5. 템플릿을 검토합니다. Microsoft.Web/sites 리소스를 찾습니다.

    Resource Manager template quickstart web site

기존 템플릿 수정

빠른 시작 템플릿을 기존 템플릿과 병합합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-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]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      ],
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

웹앱 이름은 Azure에서 고유해야 합니다. 이름이 중복되는 것을 방지하기 위해 webAppPortalName 변수가 "webAppPortalName": "[concat(parameters('webAppName'), '-webapp')]"에서 "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"로 업데이트됩니다.

Microsoft.Web/serverfarms 정의의 끝에 쉼표를 추가하여 Microsoft.Web/sites 정의와 리소스 정의를 구분합니다.

이 새 리소스에는 몇 가지 중요한 기능이 있습니다.

App Service 요금제로 설정된 dependsOn이라는 요소가 있습니다. 웹앱을 만들기 전에 App Service 요금제가 있어야 하기 때문에 이 설정이 필요합니다. dependsOn 요소는 Resource Manager에 배포용 리소스를 주문하는 방법을 알려줍니다.

serverFarmId 속성은 resourceId 함수를 사용합니다. 이 함수는 리소스의 고유 식별자를 가져옵니다. 이 경우 App Service 계획의 고유 식별자를 가져옵니다. 웹앱은 하나의 특정 App Service 계획과 연결됩니다.

템플릿 배포

Azure CLI 또는 Azure PowerShell을 사용하여 템플릿을 배포합니다.

리소스 그룹을 만들지 않은 경우 리소스 그룹 만들기를 참조하세요. 이 예제에서는 첫 번째 자습서에 표시된 대로 templateFile 변수를 템플릿 파일의 경로로 설정했다고 가정합니다.

New-AzResourceGroupDeployment `
  -Name addwebapp `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storagePrefix "store" `
  -storageSKU Standard_LRS `
  -webAppName demoapp

참고 항목

배포에 실패한 경우 verbose 스위치를 사용하여 생성 중인 리소스에 대한 정보를 가져옵니다. 디버깅에 대한 자세한 정보를 보려면 debug 스위치를 사용합니다.

리소스 정리

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

지금 중지하는 경우 리소스 그룹을 삭제하는 것이 좋습니다.

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택합니다.
  2. 모든 필드에 대한 필터... 텍스트 필드에 리소스 그룹 이름을 입력합니다.
  3. myResourceGroup 옆에 있는 확인란을 선택하고 myResourceGroup 또는 리소스 그룹 이름을 선택합니다.
  4. 위쪽 메뉴에서 리소스 그룹 삭제를 선택합니다.

다음 단계

템플릿 개발에 빠른 시작 템플릿을 사용하는 방법을 알아보았습니다. 다음 자습서에서는 리소스에 태그를 추가합니다.