快速入门:使用 ARM 模板创建应用服务应用

使用 Azure 资源管理器模板(ARM 模板)和 Cloud Shell 中的 Azure CLI 将应用部署到云,以便开始使用 Azure 应用服务。 资源管理器模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 由于使用的是免费应用服务层,完成本快速入门不会产生费用。

若要完成本快速入门,需要一个包含有效订阅的 Azure 帐户。 如果没有 Azure 帐户,可以免费创建一个

跳到末尾

如果熟悉使用 ARM 模板,可选择此 Deploy to Azure 按钮跳到末尾。 此按钮会在 Azure 门户中打开 ARM 模板。

Screenshot of the ARM Template in the Azure portal.

在 Azure 门户中,选择“新建”来创建新的资源组,然后选择“查看 + 创建”按钮来部署应用。

使用 Azure 资源管理器模板(ARM 模板)和 Cloud Shell 中的 Azure CLI 将应用部署到云,以便开始使用 Azure 应用服务。 资源管理器模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 由于使用的是免费应用服务层,完成本快速入门不会产生费用。

若要完成本快速入门,需要一个包含有效订阅的 Azure 帐户。 如果没有 Azure 帐户,可以免费创建一个

跳到末尾

如果熟悉使用 ARM 模板,可选择此 Deploy to Azure 按钮跳到末尾。 此按钮会在 Azure 门户中打开 ARM 模板。

Screenshot of the ARM Template in the Azure portal.

在 Azure 门户中,选择“新建”来创建新的资源组,然后选择“查看 + 创建”按钮来部署应用。

使用 Azure 资源管理器模板(ARM 模板)和 Cloud Shell 中的 Azure CLI 将应用部署到云,以便开始使用 Azure 应用服务。 资源管理器模板是定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 要部署 Windows 容器应用,需要高级计划。 有关定价详细信息,请参阅应用服务定价页

跳到末尾

如果熟悉使用 ARM 模板,可选择此 Deploy to Azure 按钮跳到末尾。 此按钮会在 Azure 门户中打开 ARM 模板。

Screenshot of the ARM Template in the Azure portal.

在 Azure 门户中,选择“新建”来创建新的资源组,然后选择“查看 + 创建”按钮来部署应用。

查看模板

本快速入门中使用的模板来自 Azure 快速启动模板。 它在 Windows 上部署应用服务计划和应用服务应用。 它与 .NET Core、.NET Framework、PHP、Node.js 和静态 HTML 应用兼容。 对于 Java,请参阅创建 Java 应用

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.25.53.49325",
      "templateHash": "16144177164140676603"
    }
  },
  "parameters": {
    "webAppName": {
      "type": "string",
      "defaultValue": "[format('webApp-{0}', uniqueString(resourceGroup().id))]",
      "minLength": 2,
      "metadata": {
        "description": "Web app name."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "sku": {
      "type": "string",
      "defaultValue": "F1",
      "metadata": {
        "description": "The SKU of App Service Plan."
      }
    },
    "language": {
      "type": "string",
      "defaultValue": ".net",
      "allowedValues": [
        ".net",
        "php",
        "node",
        "html"
      ],
      "metadata": {
        "description": "The language stack of the app."
      }
    },
    "helloWorld": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "true = deploy a sample Hello World app."
      }
    },
    "repoUrl": {
      "type": "string",
      "defaultValue": "",
      "metadata": {
        "description": "Optional Git Repo URL"
      }
    }
  },
  "variables": {
    "appServicePlanPortalName": "[format('AppServicePlan-{0}', parameters('webAppName'))]",
    "gitRepoReference": {
      ".net": "https://github.com/Azure-Samples/app-service-web-dotnet-get-started",
      "node": "https://github.com/Azure-Samples/nodejs-docs-hello-world",
      "php": "https://github.com/Azure-Samples/php-docs-hello-world",
      "html": "https://github.com/Azure-Samples/html-docs-hello-world"
    },
    "gitRepoUrl": "[if(bool(parameters('helloWorld')), variables('gitRepoReference')[toLower(parameters('language'))], parameters('repoUrl'))]",
    "configReference": {
      ".net": {
        "comments": ".Net app. No additional configuration needed."
      },
      "html": {
        "comments": "HTML app. No additional configuration needed."
      },
      "php": {
        "phpVersion": "7.4"
      },
      "node": {
        "appSettings": [
          {
            "name": "WEBSITE_NODE_DEFAULT_VERSION",
            "value": "12.15.0"
          }
        ]
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2023-01-01",
      "name": "[variables('appServicePlanPortalName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('sku')]"
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2023-01-01",
      "name": "[parameters('webAppName')]",
      "location": "[parameters('location')]",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "siteConfig": "[variables('configReference')[parameters('language')]]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanPortalName'))]",
        "httpsOnly": true
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanPortalName'))]"
      ]
    },
    {
      "condition": "[contains(variables('gitRepoUrl'), 'http')]",
      "type": "Microsoft.Web/sites/sourcecontrols",
      "apiVersion": "2023-01-01",
      "name": "[format('{0}/{1}', parameters('webAppName'), 'web')]",
      "properties": {
        "repoUrl": "[variables('gitRepoUrl')]",
        "branch": "master",
        "isManualIntegration": true
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', parameters('webAppName'))]"
      ]
    }
  ]
}

该模板中定义了两个 Azure 资源:

为了便于你使用,此模板包含多个预定义的参数。 有关参数默认值及其说明,请参阅下表:

参数 类型 默认值 DESCRIPTION
webAppName string webApp-<uniqueString> 基于唯一字符串值的应用名称
appServicePlanName string webAppPlan-<uniqueString> 基于唯一字符串值的应用服务计划名称
location string [resourceGroup().location] 应用区域
sku string F1 实例大小(F1 = 免费层)
语言 string .NET 编程语言堆栈(.NET、php、node、html)
helloWorld boolean False True = 部署“Hello World”应用
repoUrl string 外部 Git 存储库(可选)

本快速入门中使用的模板来自 Azure 快速启动模板。 它在 Linux 上部署应用服务计划和应用服务应用。 它与应用服务上所有受支持的编程语言兼容。

{
  "$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": "10602523904429381366"
    }
  },
  "parameters": {
    "webAppName": {
      "type": "string",
      "defaultValue": "[format('webApp-{0}', uniqueString(resourceGroup().id))]",
      "minLength": 2,
      "metadata": {
        "description": "Web app name."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "sku": {
      "type": "string",
      "defaultValue": "F1",
      "metadata": {
        "description": "The SKU of App Service Plan."
      }
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "DOTNETCORE|3.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "repoUrl": {
      "type": "string",
      "defaultValue": " ",
      "metadata": {
        "description": "Optional Git Repo URL"
      }
    }
  },
  "variables": {
    "appServicePlanPortalName": "[format('AppServicePlan-{0}', parameters('webAppName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-02-01",
      "name": "[variables('appServicePlanPortalName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('sku')]"
      },
      "kind": "linux",
      "properties": {
        "reserved": true
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-02-01",
      "name": "[parameters('webAppName')]",
      "location": "[parameters('location')]",
      "properties": {
        "httpsOnly": true,
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanPortalName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]",
          "minTlsVersion": "1.2",
          "ftpsState": "FtpsOnly"
        }
      },
      "identity": {
        "type": "SystemAssigned"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanPortalName'))]"
      ]
    },
    {
      "condition": "[contains(parameters('repoUrl'), 'http')]",
      "type": "Microsoft.Web/sites/sourcecontrols",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}', parameters('webAppName'), 'web')]",
      "properties": {
        "repoUrl": "[parameters('repoUrl')]",
        "branch": "master",
        "isManualIntegration": true
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', parameters('webAppName'))]"
      ]
    }
  ]
}

该模板中定义了两个 Azure 资源:

为了便于你使用,此模板包含多个预定义的参数。 有关参数默认值及其说明,请参阅下表:

参数 类型 默认值 DESCRIPTION
webAppName string webApp-<uniqueString> 基于唯一字符串值的应用名称
appServicePlanName string webAppPlan-<uniqueString> 基于唯一字符串值的应用服务计划名称
location string [resourceGroup().location] 应用区域
sku string F1 实例大小(F1 = 免费层)
linuxFxVersion string DOTNETCORE|3.0 "编程语言堆栈 | 版本"
repoUrl string 外部 Git 存储库(可选)

本快速入门中使用的模板来自 Azure 快速启动模板。 它在 Windows 容器上部署应用服务计划和应用服务应用。

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.25.53.49325",
      "templateHash": "10193476814580854111"
    }
  },
  "parameters": {
    "appServiceWebAppName": {
      "type": "string",
      "defaultValue": "[format('webApp-{0}', uniqueString(resourceGroup().id))]",
      "minLength": 2,
      "metadata": {
        "description": "Web App name."
      }
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "[format('webApp-{0}', uniqueString(resourceGroup().id))]",
      "minLength": 2,
      "metadata": {
        "description": "App Service Plan name."
      }
    },
    "skuTier": {
      "type": "string",
      "defaultValue": "P1v3"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2023-01-01",
      "name": "[parameters('appServiceWebAppName')]",
      "location": "[parameters('location')]",
      "tags": {
        "[format('hidden-related:{0}', resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName')))]": "empty"
      },
      "properties": {
        "siteConfig": {
          "appSettings": [
            {
              "name": "PORT",
              "value": "8080"
            }
          ],
          "appCommandLine": "",
          "windowsFxVersion": "DOCKER|mcr.microsoft.com/dotnet/samples:aspnetapp"
        },
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      ]
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2023-01-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuTier')]"
      },
      "kind": "windows",
      "properties": {
        "hyperV": true
      }
    }
  ]
}

该模板中定义了两个 Azure 资源:

为了便于你使用,此模板包含多个预定义的参数。 有关参数默认值及其说明,请参阅下表:

参数 类型 默认值 DESCRIPTION
webAppName string webApp-<uniqueString> 基于唯一字符串值的应用名称
appServicePlanName string webAppPlan-<uniqueString> 基于唯一字符串值的应用服务计划名称
location string [resourceGroup().location] 应用区域
skuTier string P1v3 实例大小(查看可用的 SKU
appSettings string [{"name": "PORT","value": "8080"}] 应用服务侦听端口。 需为 8080。
kind string windows 操作系统
hyperv string true 隔离模式
windowsFxVersion string DOCKER|mcr.microsoft.com/dotnet/samples:aspnetapp 容器映像

部署模板

此处使用 Azure CLI 来部署模板。 还可以使用 Azure 门户、Azure PowerShell 和 REST API。 若要了解其他部署方法,请参阅部署模板

以下代码将创建一个资源组、一个应用服务计划和一个 Web 应用。 已为你设置了默认资源组、应用服务计划和位置。 请将 <app-name> 替换为全局唯一的应用名称(有效字符是 a-z0-9-)。

运行以下命令,在 Windows 上部署 .NET Framework 应用。

az group create --name myResourceGroup --location "chinaeast" &&

az deployment group create --resource-group myResourceGroup \
--parameters language=".NET" helloWorld="true" webAppName="<app-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.web/app-service-docs-windows/azuredeploy.json"

运行以下命令,在 Linux 上创建 Python 应用:

az group create --name myResourceGroup --location "chinaeast" &&

az deployment group create --resource-group myResourceGroup --parameters webAppName="<app-name>" linuxFxVersion="PYTHON|3.9" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.web/app-service-docs-linux/azuredeploy.json"

若要部署其他语言堆栈,请使用相应的值更新 linuxFxVersion。 示例如表所示。 若要显示当前版本,请在 Azure CLI 中运行以下命令:az webapp config show --resource-group myResourceGroup --name <app-name> --query linuxFxVersion

语言 示例:
.NET linuxFxVersion="DOTNETCORE|3.0"
PHP linuxFxVersion="PHP|7.4"
Node.js linuxFxVersion="NODE|10.15"
Java linuxFxVersion="JAVA|1.8 |TOMCAT|9.0"
Python linuxFxVersion="PYTHON|3.7"

运行以下命令,在 Windows 容器上部署 .NET 应用

az group create --name myResourceGroup --location "chinanorth2"

az deployment group create --resource-group myResourceGroup \
--parameters webAppName="<app-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.web/app-service-docs-windows-container/azuredeploy.json"

验证部署

浏览到 http://<app_name>.chinacloudsites.cn/ 并验证它是否已创建。

Screenshot of the Windows code experience.

Screenshot of the Linux experience.

Screenshot of the Windows container experience.

清理资源

不再需要资源组时,可将其删除

后续步骤

 从本地 Git 进行部署

 将 Python 与 Postgres 配合使用