Azure Functions의 함수 앱에 대한 리소스 배포 자동화Automate resource deployment for your function app in Azure Functions

Azure Resource Manager 템플릿을 사용하여 함수 앱을 배포할 수 있습니다.You can use an Azure Resource Manager template to deploy a function app. 이 문서에서는 이 작업을 수행하는 데 필요한 리소스와 매개 변수를 간략히 설명합니다.This article outlines the required resources and parameters for doing so. 함수 앱의 트리거 및 바인딩에 따라 추가 리소스를 배포해야 할 수 있습니다.You might need to deploy additional resources, depending on the triggers and bindings in your function app.

템플릿을 만드는 더 자세한 내용은 Azure Resource Manager 템플릿 작성하기를 참조하십시오.For more information about creating templates, see Authoring Azure Resource Manager templates.

샘플 템플릿은 다음을 참조하세요.For sample templates, see:

필요한 리소스Required resources

Azure Functions 배포는 일반적으로 다음 리소스로 구성 됩니다.An Azure Functions deployment typically consists of these resources:

리소스Resource 요구 사항Requirement 구문 및 속성 참조Syntax and properties reference
함수 앱A function app 필수Required Microsoft.Web/sitesMicrosoft.Web/sites
Azure Storage 계정An Azure Storage account 필수Required Microsoft.Storage/storageAccountsMicrosoft.Storage/storageAccounts
Application Insights 구성 요소An Application Insights component OptionalOptional Microsoft 인 사이트/구성 요소Microsoft.Insights/components
호스팅 계획A hosting plan 선택 사항1Optional1 Microsoft.Web/serverfarmsMicrosoft.Web/serverfarms

1 호스팅 계획은 프리미엄 계획이App Service 계획에서 함수 앱을 실행 하도록 선택 하는 경우에만 필요 합니다.1A hosting plan is only required when you choose to run your function app on a Premium plan or on an App Service plan.

필수는 아니지만 앱에 대 한 Application Insights를 구성 하는 것이 좋습니다.While not required, it is strongly recommended that you configure Application Insights for your app.

스토리지 계정Storage account

함수 앱에는 Azure Storage 계정이 필요합니다.An Azure storage account is required for a function app. Blob, 테이블, 큐 및 파일을 지원하는 일반 용도의 계정이 있어야 합니다.You need a general purpose account that supports blobs, tables, queues, and files. 자세한 내용은 Azure Functions 스토리지 계정 요구 사항을 참조하세요.For more information, see Azure Functions storage account requirements.

{
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[variables('storageAccountName')]",
    "apiVersion": "2019-06-01",
    "location": "[resourceGroup().location]",
    "kind": "StorageV2",
    "sku": {
        "name": "[parameters('storageAccountType')]"
    }
}

또한 속성 AzureWebJobsStorage가 사이트 구성에서 앱 설정으로 지정되어야 합니다.In addition, the property AzureWebJobsStorage must be specified as an app setting in the site configuration. 함수 앱이 Application Insights를 모니터링에 사용하지 않으면 AzureWebJobsDashboard도 앱 설정으로 지정되어야 합니다.If the function app doesn't use Application Insights for monitoring, it should also specify AzureWebJobsDashboard as an app setting.

Azure Functions 런타임에서는 AzureWebJobsStorage 연결 문자열을 사용하여 내부 큐를 만듭니다.The Azure Functions runtime uses the AzureWebJobsStorage connection string to create internal queues. Application Insights가 활성화되지 않은 경우 런타임은 AzureWebJobsDashboard 연결 문자열을 사용하여 Azure Table Storage에 로그온하고 포털의 모니터 탭에 전원을 공급합니다.When Application Insights is not enabled, the runtime uses the AzureWebJobsDashboard connection string to log to Azure Table storage and power the Monitor tab in the portal.

이러한 속성은 siteConfig 개체의 appSettings 컬렉션에서 지정됩니다.These properties are specified in the appSettings collection in the siteConfig object:

"appSettings": [
    {
        "name": "AzureWebJobsStorage",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
    },
    {
        "name": "AzureWebJobsDashboard",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
    }
]

Application InsightsApplication Insights

Application Insights 함수 앱 모니터링에 권장 됩니다.Application Insights is recommended for monitoring your function apps. Application Insights 리소스 는 다음과 같은형식으로 지정 됩니다 .The Application Insights resource is defined with the type Microsoft.Insights/components and the kind web:

        {
            "apiVersion": "2015-05-01",
            "name": "[variables('appInsightsName')]",
            "type": "Microsoft.Insights/components",
            "kind": "web",
            "location": "[resourceGroup().location]",
            "tags": {
                "[concat('hidden-link:', resourceGroup().id, '/providers/Microsoft.Web/sites/', variables('functionAppName'))]": "Resource"
            },
            "properties": {
                "Application_Type": "web",
                "ApplicationId": "[variables('appInsightsName')]"
            }
        },

또한 응용 프로그램 설정을 사용 하 여 함수 앱에 계측 키를 제공 해야 합니다 APPINSIGHTS_INSTRUMENTATIONKEY .In addition, the instrumentation key needs to be provided to the function app using the APPINSIGHTS_INSTRUMENTATIONKEY application setting. 이 속성은 appSettings 개체의 컬렉션에서 지정 됩니다 siteConfig .This property is specified in the appSettings collection in the siteConfig object:

"appSettings": [
    {
        "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
        "value": "[reference(resourceId('microsoft.insights/components/', variables('appInsightsName')), '2015-05-01').InstrumentationKey]"
    }
]

호스팅 계획Hosting plan

호스팅 계획의 정의는 다양 하며 다음 중 하나일 수 있습니다.The definition of the hosting plan varies, and can be one of the following:

함수 앱Function app

함수 앱 리소스 는 다음과 같은형식의 리소스를 사용 하 여 정의 됩니다 .The function app resource is defined by using a resource of type Microsoft.Web/sites and kind functionapp:

{
    "apiVersion": "2015-08-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]"
    ]
}

중요

호스팅 계획을 명시적으로 정의 하는 경우 dependsOn 배열에 추가 항목이 필요 합니다. "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"If you are explicitly defining a hosting plan, an additional item would be needed in the dependsOn array: "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]"

함수 앱에는 다음과 같은 응용 프로그램 설정이 포함 되어야 합니다.A function app must include these application settings:

설정 이름Setting name 설명Description 예제 값Example values
AzureWebJobsStorageAzureWebJobsStorage 함수 런타임에서 내부 큐에 사용 하는 저장소 계정에 대 한 연결 문자열입니다.A connection string to a storage account that the Functions runtime uses for internal queueing 저장소 계정 을 참조 하세요.See Storage account
FUNCTIONS_EXTENSION_VERSIONFUNCTIONS_EXTENSION_VERSION Azure Functions 런타임의 버전입니다.The version of the Azure Functions runtime ~2
FUNCTIONS_WORKER_RUNTIMEFUNCTIONS_WORKER_RUNTIME 이 앱의 함수에 사용할 언어 스택입니다.The language stack to be used for functions in this app dotnet, node, java, python 또는 powershelldotnet, node, java, python, or powershell
WEBSITE_NODE_DEFAULT_VERSIONWEBSITE_NODE_DEFAULT_VERSION 언어 스택을 사용 하는 경우에만 node 사용할 버전을 지정 합니다.Only needed if using the node language stack, specifies the version to use 10.14.1

이러한 속성은 appSettings 속성의 컬렉션에서 지정 됩니다 siteConfig .These properties are specified in the appSettings collection in the siteConfig property:

"properties": {
    "siteConfig": {
        "appSettings": [
            {
                "name": "AzureWebJobsStorage",
                "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
            },
            {
                "name": "FUNCTIONS_WORKER_RUNTIME",
                "value": "node"
            },
            {
                "name": "WEBSITE_NODE_DEFAULT_VERSION",
                "value": "10.14.1"
            },
            {
                "name": "FUNCTIONS_EXTENSION_VERSION",
                "value": "~2"
            }
        ]
    }
}

소비 계획에 배포Deploy on Consumption plan

소비 계획은 코드가 실행 중일 때 계산 능력을 자동으로 할당 하 고, 로드를 처리 하는 데 필요한 만큼 확장 한 다음 코드가 실행 되지 않을 때 확장 됩니다.The Consumption plan automatically allocates compute power when your code is running, scales out as necessary to handle load, and then scales in when code is not running. 유휴 Vm에 대 한 비용을 지불할 필요가 없으며, 용량을 미리 예약할 필요가 없습니다.You don't have to pay for idle VMs, and you don't have to reserve capacity in advance. 자세한 내용은 Azure Functions 크기 조정 및 호스팅을 참조하세요.To learn more, see Azure Functions scale and hosting.

샘플 Azure Resource Manager 템플릿은 소비 계획의 함수 앱을 참조하세요.For a sample Azure Resource Manager template, see Function app on Consumption plan.

소비 계획 만들기Create a Consumption plan

소비 계획을 정의할 필요가 없습니다.A Consumption plan does not need to be defined. 함수 앱 리소스 자체를 만들 때 지역 별로 자동으로 만들어지거나 선택 됩니다.One will automatically be created or selected on a per-region basis when you create the function app resource itself.

소비 계획은 특수 한 유형의 "서버 팜" 리소스입니다.The Consumption plan is a special type of "serverfarm" resource. Windows의 경우 Dynamic 및 속성에 대 한 값을 사용 하 여 지정할 수 있습니다 computeMode sku .For Windows, you can specify it by using the Dynamic value for the computeMode and sku properties:

{  
   "type":"Microsoft.Web/serverfarms",
   "apiVersion":"2016-09-01",
   "name":"[variables('hostingPlanName')]",
   "location":"[resourceGroup().location]",
   "properties":{  
      "name":"[variables('hostingPlanName')]",
      "computeMode":"Dynamic"
   },
   "sku":{  
      "name":"Y1",
      "tier":"Dynamic",
      "size":"Y1",
      "family":"Y",
      "capacity":0
   }
}

참고

Linux에 대해 소비 계획을 명시적으로 정의할 수 없습니다.The Consumption plan cannot be explicitly defined for Linux. 자동으로 생성 됩니다.It will be created automatically.

소비 계획을 명시적으로 정의 하는 경우 serverFarmId 계획의 리소스 ID를 가리키도록 앱에 대 한 속성을 설정 해야 합니다.If you do explicitly define your Consumption plan, you will need to set the serverFarmId property on the app so that it points to the resource ID of the plan. 함수 앱에 dependsOn 계획에 대 한 설정도 있는지 확인 해야 합니다.You should ensure that the function app has a dependsOn setting for the plan as well.

함수 앱 만들기Create a function app

WindowsWindows

Windows에서 소비 계획에는 사이트 구성에 및의 두 가지 추가 설정이 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING 필요 WEBSITE_CONTENTSHARE 합니다.On Windows, a Consumption plan requires two additional settings in the site configuration: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE. 이러한 속성은 함수 앱 코드와 구성이 저장되는 스토리지 계정 및 파일 경로를 구성합니다.These properties configure the storage account and file path where the function app code and configuration are stored.

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "WEBSITE_CONTENTSHARE",
                    "value": "[toLower(variables('functionAppName'))]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        }
    }
}

LinuxLinux

Linux에서 함수 앱은를 kind 로 설정 하 고 속성을로 설정 해야 합니다 functionapp,linux reserved true .On Linux, the function app must have its kind set to functionapp,linux, and it must have the reserved property set to true:

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp,linux",
    "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountName'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        },
        "reserved": true
    }
}

프리미엄 계획에 배포Deploy on Premium plan

프리미엄 요금제는 소비 계획과 동일한 크기 조정을 제공 하지만 전용 리소스 및 추가 기능을 포함 합니다.The Premium plan offers the same scaling as the Consumption plan but includes dedicated resources and additional capabilities. 자세한 내용은 Azure Functions Premium 요금제를 참조 하세요.To learn more, see Azure Functions Premium Plan.

프리미엄 플랜 만들기Create a Premium plan

프리미엄 요금제는 특수 한 유형의 "서버 팜" 리소스입니다.A Premium plan is a special type of "serverfarm" resource. EP1 EP2 EP3 Name sku 설명 개체의 속성 값에, 또는 중 하나를 사용 하 여 지정할 수 있습니다.You can specify it by using either EP1, EP2, or EP3 for the Name property value in the sku description object.

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2018-02-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "properties": {
        "name": "[parameters('hostingPlanName')]",
        "workerSize": "[parameters('workerSize')]",
        "workerSizeId": "[parameters('workerSizeId')]",
        "numberOfWorkers": "[parameters('numberOfWorkers')]",
        "hostingEnvironment": "[parameters('hostingEnvironment')]",
        "maximumElasticWorkerCount": "20"
    },
    "sku": {
        "Tier": "ElasticPremium",
        "Name": "EP1"
    }
}

함수 앱 만들기Create a function app

프리미엄 계획의 함수 앱은 속성을 앞에서 serverFarmId 만든 계획의 리소스 ID로 설정 해야 합니다.A function app on a Premium plan must have the serverFarmId property set to the resource ID of the plan created earlier. 또한 프리미엄 계획에는 사이트 구성에 및의 두 가지 추가 설정이 필요 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING 합니다 WEBSITE_CONTENTSHARE .In addition, a Premium plan requires two additional settings in the site configuration: WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE. 이러한 속성은 함수 앱 코드와 구성이 저장되는 스토리지 계정 및 파일 경로를 구성합니다.These properties configure the storage account and file path where the function app code and configuration are stored.

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",            
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "WEBSITE_CONTENTSHARE",
                    "value": "[toLower(variables('functionAppName'))]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        }
    }
}

App Service 계획에 배포Deploy on App Service plan

App Service 계획에서 함수 앱은 웹앱과 유사하게 기본, 표준, 프리미엄 SKU의 전용 VM에서 실행됩니다.In the App Service plan, your function app runs on dedicated VMs on Basic, Standard, and Premium SKUs, similar to web apps. App Service 계획의 작동 원리에 대한 자세한 내용은 Azure App Service 계획의 포괄 개요를 참조하세요.For details about how the App Service plan works, see the Azure App Service plans in-depth overview.

샘플 Azure Resource Manager 템플릿은 Azure App Service 계획의 함수 앱을 참조하세요.For a sample Azure Resource Manager template, see Function app on Azure App Service plan.

App Service 플랜 만들기Create an App Service plan

App Service 계획은 "서버 팜" 리소스에 의해 정의 됩니다.An App Service plan is defined by a "serverfarm" resource.

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2018-02-01",
    "name": "[variables('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "sku": {
        "name": "S1",
        "tier": "Standard",
        "size": "S1",
        "family": "S",
        "capacity": 1
    }
}

Linux에서 앱을 실행 하려면도로 설정 해야 합니다 kind Linux .To run your app on Linux, you must also set the kind to Linux:

{
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2018-02-01",
    "name": "[variables('hostingPlanName')]",
    "location": "[resourceGroup().location]",
    "kind": "Linux",
    "sku": {
        "name": "S1",
        "tier": "Standard",
        "size": "S1",
        "family": "S",
        "capacity": 1
    }
}

함수 앱 만들기Create a function app

App Service 계획의 함수 앱에는 serverFarmId 앞에서 만든 계획의 리소스 ID로 설정 된 속성이 있어야 합니다.A function app on an App Service plan must have the serverFarmId property set to the resource ID of the plan created earlier.

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ]
        }
    }
}

또한 Linux 앱에는에 속성이 포함 되어야 합니다 linuxFxVersion siteConfig .Linux apps should also include a linuxFxVersion property under siteConfig. 코드를 배포 하는 경우이 값은 원하는 런타임 스택에 의해 결정 됩니다.If you are just deploying code, the value for this is determined by your desired runtime stack:

스택Stack 예제 값Example value
PythonPython DOCKER|microsoft/azure-functions-python3.6:2.0
JavaScriptJavaScript DOCKER|microsoft/azure-functions-node8:2.0
.NET.NET DOCKER|microsoft/azure-functions-dotnet-core2.0:2.0
{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                }
            ],
            "linuxFxVersion": "DOCKER|microsoft/azure-functions-node8:2.0"
        }
    }
}

사용자 지정 컨테이너 이미지를 배포하는 경우에는를 사용 하 여 지정 해야 linuxFxVersion 하며, Web App for Containers처럼 이미지를 끌어올 수 있도록 하는 구성을 포함 해야 합니다.If you are deploying a custom container image, you must specify it with linuxFxVersion and include configuration that allows your image to be pulled, as in Web App for Containers. 또한 WEBSITES_ENABLE_APP_SERVICE_STORAGE false 앱 콘텐츠는 컨테이너 자체에 제공 되므로를로 설정 합니다.Also, set WEBSITES_ENABLE_APP_SERVICE_STORAGE to false, since your app content is provided in the container itself:

{
    "apiVersion": "2016-03-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('functionAppName')]",
    "location": "[resourceGroup().location]",
    "kind": "functionapp",
    "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
    ],
    "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
        "siteConfig": {
            "appSettings": [
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]"
                },
                {
                    "name": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~2"
                },
                {
                    "name": "DOCKER_REGISTRY_SERVER_URL",
                    "value": "[parameters('dockerRegistryUrl')]"
                },
                {
                    "name": "DOCKER_REGISTRY_SERVER_USERNAME",
                    "value": "[parameters('dockerRegistryUsername')]"
                },
                {
                    "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
                    "value": "[parameters('dockerRegistryPassword')]"
                },
                {
                    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
                    "value": "false"
                }
            ],
            "linuxFxVersion": "DOCKER|myacr.azurecr.io/myimage:mytag"
        }
    }
}

배포 사용자 지정Customizing a deployment

함수 앱에는 앱 설정 및 소스 제어 옵션을 포함하여 배포에 사용할 수 있는 자식 리소스가 많이 있습니다.A function app has many child resources that you can use in your deployment, including app settings and source control options. Sourcecontrols 자식 리소스를 제거 하 고 대신 다른 배포 옵션 을 사용 하도록 선택할 수도 있습니다.You also might choose to remove the sourcecontrols child resource, and use a different deployment option instead.

중요

Azure Resource Manager를 사용하여 애플리케이션을 성공적으로 배포하려면 Azure에서 리소스가 배포되는 방식을 이해하는 것이 중요합니다.To successfully deploy your application by using Azure Resource Manager, it's important to understand how resources are deployed in Azure. 다음 예제에서는 siteConfig를 사용하여 최상위 수준 구성을 적용합니다.In the following example, top-level configurations are applied by using siteConfig. Functions 런타임 및 배포 엔진에 정보를 전달하기 때문에 최상위 수준에서 이러한 구성을 설정하는 것이 중요합니다.It's important to set these configurations at a top level, because they convey information to the Functions runtime and deployment engine. sourcecontrols/web 자식 리소스를 적용하기 전에 최상위 수준 정보가 필요합니다.Top-level information is required before the child sourcecontrols/web resource is applied. 자식 수준 구성/appsettings 리소스에서 이러한 설정을 구성할 수 있지만, 경우에 따라 config/appsettings 를 적용 하기 전에 함수 앱을 배포 해야 합니다.Although it's possible to configure these settings in the child-level config/appSettings resource, in some cases your function app must be deployed before config/appSettings is applied. 예를 들어 Logic Apps에서 함수를 사용하는 경우 함수는 다른 리소스의 종속성입니다.For example, when you are using functions with Logic Apps, your functions are a dependency of another resource.

{
  "apiVersion": "2015-08-01",
  "name": "[parameters('appName')]",
  "type": "Microsoft.Web/sites",
  "kind": "functionapp",
  "location": "[parameters('location')]",
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Web/serverfarms', parameters('appName'))]"
  ],
  "properties": {
     "serverFarmId": "[variables('appServicePlanName')]",
     "siteConfig": {
        "alwaysOn": true,
        "appSettings": [
            {
                "name": "FUNCTIONS_EXTENSION_VERSION",
                "value": "~2"
            },
            {
                "name": "Project",
                "value": "src"
            }
        ]
     }
  },
  "resources": [
     {
        "apiVersion": "2015-08-01",
        "name": "appsettings",
        "type": "config",
        "dependsOn": [
          "[resourceId('Microsoft.Web/Sites', parameters('appName'))]",
          "[resourceId('Microsoft.Web/Sites/sourcecontrols', parameters('appName'), 'web')]",
          "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
        ],
        "properties": {
          "AzureWebJobsStorage": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]",
          "AzureWebJobsDashboard": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2019-06-01').keys[0].value)]",
          "FUNCTIONS_EXTENSION_VERSION": "~2",
          "FUNCTIONS_WORKER_RUNTIME": "dotnet",
          "Project": "src"
        }
     },
     {
          "apiVersion": "2015-08-01",
          "name": "web",
          "type": "sourcecontrols",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites/', parameters('appName'))]"
          ],
          "properties": {
            "RepoUrl": "[parameters('sourceCodeRepositoryURL')]",
            "branch": "[parameters('sourceCodeBranch')]",
            "IsManualIntegration": "[parameters('sourceCodeManualIntegration')]"
          }
     }
  ]
}

이 템플릿에서는 프로젝트 앱 설정 값을 사용 하며,이 값은 Kudu (함수 배포 엔진)에서 배포 가능한 코드를 검색 하는 기본 디렉터리를 설정 합니다.This template uses the Project app settings value, which sets the base directory in which the Functions deployment engine (Kudu) looks for deployable code. 리포지토리에서 함수는 src 폴더의 하위 폴더에 있습니다.In our repository, our functions are in a subfolder of the src folder. 따라서 앞의 예제에서 앱 설정 값은 src로 설정합니다.So, in the preceding example, we set the app settings value to src. 함수가 리포지토리의 루트에 있거나 소스 제어에서 배포하지 않는 경우 이 앱 설정 값을 제거할 수 있습니다.If your functions are in the root of your repository, or if you are not deploying from source control, you can remove this app settings value.

템플릿 배포Deploy your template

다음 방법 중 하나를 사용하여 템플릿을 배포할 수 있습니다.You can use any of the following ways to deploy your template:

Azure 단추에 배포Deploy to Azure button

<url-encoded-path-to-azuredeploy-json>을 GitHub에 있는 azuredeploy.json 파일의 원시 경로에 대한 URL 인코딩 버전으로 바꿉니다.Replace <url-encoded-path-to-azuredeploy-json> with a URL-encoded version of the raw path of your azuredeploy.json file in GitHub.

markdown을 사용하는 예는 다음과 같습니다.Here is an example that uses markdown:

[![Deploy to Azure](https://azuredeploy.net/deploybutton.png)](https://portal.azure.com/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>)

HTML을 사용하는 예는 다음과 같습니다.Here is an example that uses HTML:

<a href="https://portal.azure.com/#create/Microsoft.Template/uri/<url-encoded-path-to-azuredeploy-json>" target="_blank"><img src="https://azuredeploy.net/deploybutton.png"></a>

PowerShell을 사용하여 배포Deploy using PowerShell

다음 PowerShell 명령은 리소스 그룹을 만들고 필요한 리소스를 사용 하 여 함수 앱을 만드는 템플릿을 배포 합니다.The following PowerShell commands create a resource group and deploy a template that create a function app with its required resources. 로컬로 실행 하려면 Azure PowerShell 설치 되어 있어야 합니다.To run locally, you must have Azure PowerShell installed. Connect-AzAccount을 실행 하 여 로그인 합니다.Run Connect-AzAccount to sign in.

# Register Resource Providers if they're not already registered
Register-AzResourceProvider -ProviderNamespace "microsoft.web"
Register-AzResourceProvider -ProviderNamespace "microsoft.storage"

# Create a resource group for the function app
New-AzResourceGroup -Name "MyResourceGroup" -Location 'West Europe'

# Create the parameters for the file, which for this template is the function app name.
$TemplateParams = @{"appName" = "<function-app-name>"}

# Deploy the template
New-AzResourceGroupDeployment -ResourceGroupName "MyResourceGroup" -TemplateFile template.json -TemplateParameterObject $TemplateParams -Verbose

이 배포를 테스트 하려면 소비 계획의 Windows에서 함수 앱을 만드는 것 과 같은 템플릿을 사용할 수 있습니다.To test out this deployment, you can use a template like this one that creates a function app on Windows in a Consumption plan. <function-app-name>함수 앱에 대 한 고유한 이름으로 대체 합니다.Replace <function-app-name> with a unique name for your function app.

다음 단계Next steps

Azure Functions를 개발하고 구성하는 방법에 대해 자세히 알아봅니다.Learn more about how to develop and configure Azure Functions.