Azure Functions の関数アプリのリソース デプロイを自動化

Azure Resource Manager テンプレートを使用して、関数アプリをデプロイできます。 この記事では、これを行う際に必要なリソースとパラメーターについて説明します。 関数アプリのトリガーとバインドによっては、その他のリソースのデプロイが必要になる可能性があります。

テンプレートの作成の詳細については、「 Azure Resource Manager のテンプレートの作成」を参照してください。

サンプル テンプレートについては、以下を参照してください。

必要なリソース

Azure Functions のデプロイは通常、次のリソースで構成されています。

リソース 要件 構文とプロパティの参照
関数アプリ 必須 Microsoft.Web/sites
Azure Storage アカウント 必須 Microsoft.Storage/storageAccounts
Application Insights コンポーネント 省略可能 Microsoft.Insights/components
ホスティング プラン 省略可能1 Microsoft.Web/serverfarms

1ホスティング プランは、Premium プラン または App Service プランで関数アプリを実行することを選択する場合にのみ必要です。

ヒント

必須ではありませんが、Application Insights をアプリ用に構成することを強くお勧めします。

ストレージ アカウント

関数アプリには、Azure ストレージ アカウントが必要です。 必要なのは BLOB、テーブル、キュー、およびファイルをサポートする汎用アカウントです。 詳細については、Azure Functions ストレージ アカウント要件に関するページをご覧ください。

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

また、 AzureWebJobsStorage プロパティをサイト構成のアプリ設定として指定する必要があります。 関数アプリで監視に Application Insights を使用していない場合は、AzureWebJobsDashboard もアプリ設定として指定する必要があります。

AzureWebJobsStorage 接続文字列は、Azure Functions ランタイムが内部キューを作成するときに使用します。 Application Insights が有効でない場合、ランタイムでは AzureWebJobsDashboard 接続文字列を使用して、Azure Table Storage にログを記録し、ポータルの [監視] タブをオンにします。

こうしたプロパティは、siteConfig オブジェクトの appSettings コレクションで指定します。

"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 Insights

Application Insights は、関数アプリを監視するために推奨されます。 Application Insights リソースは、タイプが Microsoft.Insights/components、サブタイプが 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 のアプリケーション設定を使用して、関数アプリにインストルメンテーション キーを提供する必要があります。 このプロパティは、siteConfig オブジェクト内の appSettings コレクションで指定されます。

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

ホスティング プラン

ホスティング プランの定義はさまざまあり、次のいずれかを指定できます。

関数アプリ

関数アプリのリソースは、タイプが Microsoft.Web/sites、サブタイプが 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'))]"

関数アプリには、次のアプリケーション設定を含める必要があります。

設定名 説明 値の例
AzureWebJobsStorage Functions ランタイムが内部キューイングのために使用するストレージ アカウントへの接続文字列 ストレージ アカウント」を参照
FUNCTIONS_EXTENSION_VERSION Azure Functions ランタイムのバージョン ~3
FUNCTIONS_WORKER_RUNTIME このアプリ内の関数で使用される言語スタック dotnetnodejavapython、または powershell
WEBSITE_NODE_DEFAULT_VERSION node 言語スタックを使用している場合にのみ必要、使用するバージョンを指定します 10.14.1

これらのプロパティは、siteConfig プロパティ内の appSettings コレクションで指定されます。

"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": "~3"
            }
        ]
    }
}

従量課金プランでデプロイする

従量課金プランでは、コードの実行時にコンピューティング能力を自動的に割り当て、負荷の処理の必要性に応じてスケールアウトし、コードを実行していないときはスケールインします。 アイドル状態の VM に対して支払う必要はなく、事前に容量を予約する必要もありません。 詳細については、「Azure Functions のスケールとホスティング」を参照してください。

Azure Resource Manager テンプレートのサンプルについては、従量課金プランの関数アプリに関するページをご覧ください。

従量課金プランを作成する

従量課金プランを定義する必要はありません。 関数アプリのリソース自体を作成したときに、このプランがリージョンごとに自動的に作成または選択されます。

従量課金プランは、特殊なタイプの "serverfarm" リソースです。 Windows では、computeMode および sku プロパティに Dynamic 値を使用して指定できます。

{
   "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 では、従量課金プランを明示的に定義できません。 これは自動的に作成されます。

従量課金プランを明示的に定義する場合は、アプリで serverFarmId プロパティを設定して、それがプランのリソース ID を指すようにする必要があります。 関数アプリにプランに対する dependsOn 設定も含まれていることを確認する必要があります。

Function App を作成する

従量課金プランで実行されている関数アプリに必要な設定は、Windows と Linux の間で異なります。

Windows

Windows の場合、従量課金プランでは、サイト構成にその他の設定 (WEBSITE_CONTENTAZUREFILECONNECTIONSTRING) が必要です。 このプロパティによって、関数アプリのコードと構成が格納されているストレージ アカウントが構成されます。

{
    "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": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~3"
                }
            ]
        }
    }
}

重要

WEBSITE_CONTENTSHARE 設定は、サイトが最初に作成されるときに生成されるため、設定しないでください。

Linux

Linux の場合、関数アプリは kindfunctionapp,linux に設定され、reserved プロパティが 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": "~3"
                }
            ]
        },
        "reserved": true
    }
}

WEBSITE_CONTENTAZUREFILECONNECTIONSTRING および WEBSITE_CONTENTSHARE の設定は、Linux ではサポートされていません。

Premium プランでデプロイする

Premium プランでは、従量課金プランと同じスケーリングが提供されますが、専用リソースとその他の機能が含まれています。 詳細については、「Azure Functions の Premium プラン」を参照してください。

Premium プランを作成する

Premium プランは、特殊なタイプの "serverfarm" リソースです。 これは、sku 説明オブジェクトName プロパティ値に EP1EP2、または EP3 のいずれかを使用することで指定できます。

{
    "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"
    }
}

Function App を作成する

Premium プランでの関数アプリは、serverFarmId プロパティが、前に作成されたプランのリソース ID に設定されている必要があります。 さらに、Premium プランでは、サイト構成にその他の設定 (WEBSITE_CONTENTAZUREFILECONNECTIONSTRING) が必要です。 このプロパティによって、関数アプリのコードと構成が格納されているストレージ アカウントが構成されます。

{
    "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": "FUNCTIONS_WORKER_RUNTIME",
                    "value": "node"
                },
                {
                    "name": "WEBSITE_NODE_DEFAULT_VERSION",
                    "value": "10.14.1"
                },
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~3"
                }
            ]
        }
    }
}

重要

WEBSITE_CONTENTSHARE 設定は、サイトが最初に作成されるときに生成されるため、設定しないでください。

App Service プランでデプロイする

App Service プランでは、関数アプリは、Web アプリと同様に、Basic、Standard、および Premium SKU の専用 VM 上で実行されます。 App Service プランの仕組みの詳細については、「Azure App Service プランの詳細な概要」を参照してください。

Azure Resource Manager テンプレートのサンプルについては、Azure App Service プランの関数アプリに関するページをご覧ください。

App Service プランを作成する

App Service プランは、"serverfarm" リソースによって定義されます。

{
    "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 でアプリを実行するには、kindLinux に設定することも必要です。

{
    "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
    }
}

Function App を作成する

App Service プランでの関数アプリは、serverFarmId プロパティが、前に作成されたプランのリソース ID に設定されている必要があります。

{
    "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": "~3"
                }
            ]
        }
    }
}

Linux アプリでは、siteConfig の下に linuxFxVersion プロパティも含める必要があります。 単にコードをデプロイしている場合、この値は、目的のランタイム スタックによって決まります (runtime|runtimeVersion の形式)。

スタック 値の例
Python python|3.7
JavaScript node|12
.NET dotnet|3.1
{
    "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": "~3"
                }
            ],
            "linuxFxVersion": "node|12"
        }
    }
}

カスタム コンテナー イメージをデプロイしている場合は、それを linuxFxVersion で指定し、Web App for Containers のように、イメージをプルできるようにする構成を含める必要があります。 また、アプリのコンテンツはコンテナー自体で提供されるため、WEBSITES_ENABLE_APP_SERVICE_STORAGEfalse に設定します。

{
    "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": "~3"
                },
                {
                    "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"
        }
    }
}

Azure Arc にデプロイ

Azure Functions は、 Azure Arc 対応 Kubernetesにデプロイできます。 このプロセスは、主に「deploying to an App Service plan」\ (App Service プランへのデプロイ) に従いますが、いくつかの違いがあります。

アプリを作成し、リソースを計画するには、Azure Arc 対応 Kubernetes クラスター用の App Service Kubernetes 環境 をあらかじめ作成しておく必要があります。 これらの例では、デプロイ先のカスタムの場所と App Service Kubernetes 環境のリソース ID があることを前提としています。 ほとんどのテンプレートでは、これらをパラメーターとして指定できます。

{
    "parameters": {
        "kubeEnvironmentId" : {
            "type": "string"
        },
        "customLocationId" : {
            "type": "string"
        }
    }
}

サイトとプランの両方で、extendedLocation フィールドを使用してカスタムの場所を参照する必要があります。 このブロックは、properties の外部にあり、kindlocation をピアリングします。

{
    "extendedLocation": {
        "type": "customlocation",
        "name": "[parameters('customLocationId')]"
    },
}

プラン リソースは Kubernetes (K1) SKU を使用する必要があり、その kind フィールドは「linux, Kubernetes」である必要があります。 properties 内で reserved は "true" である必要があり、kubeEnvironmentProfile.id は App Service KUBERNETES 環境リソース ID に設定する必要があります。 サンプル プランは、次のようになります。

{
    "type": "Microsoft.Web/serverfarms",
    "name": "[variables('hostingPlanName')]",
    "location": "[parameters('location')]",
    "apiVersion": "2020-12-01",
    "kind": "linux,kubernetes",
    "sku": {
        "name": "K1",
        "tier": "Kubernetes"
    },
    "extendedLocation": {
        "type": "customlocation",
        "name": "[parameters('customLocationId')]"
    },
    "properties": {
        "name": "[variables('hostingPlanName')]",
        "location": "[parameters('location')]",
        "workerSizeId": "0",
        "numberOfWorkers": "1",
        "kubeEnvironmentProfile": {
            "id": "[parameters('kubeEnvironmentId')]"
        },
        "reserved": true
    }
}

関数アプリ リソースの kind フィールドは、コードまたはコンテナーを使用して配置するかどうかによって、"functionapp, linux, kubernetes" または "functionapp, linux, kubernetes, container" に設定されている必要があります。 たとえば、関数アプリは次のようになります。

 {
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Web/sites",
    "name": "[variables('appName')]",
    "kind": "kubernetes,functionapp,linux,container",
    "location": "[parameters('location')]",
    "extendedLocation": {
        "type": "customlocation",
        "name": "[parameters('customLocationId')]"
    },
    "dependsOn": [
        "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
        "[variables('hostingPlanId')]"
    ],
    "properties": {
        "serverFarmId": "[variables('hostingPlanId')]",
        "siteConfig": {
            "linuxFxVersion": "DOCKER|mcr.microsoft.com/azure-functions/dotnet:3.0-appservice-quickstart",
            "appSettings": [
                {
                    "name": "FUNCTIONS_EXTENSION_VERSION",
                    "value": "~3"
                },
                {
                    "name": "AzureWebJobsStorage",
                    "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';AccountKey=', listKeys(variables('storageAccountid'),'2015-05-01-preview').key1)]"

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

デプロイのカスタマイズ

関数アプリには、アプリ設定オプション、ソース管理オプションなど、デプロイで使用できる子リソースが多数含まれます。 sourcecontrols 子リソースを削除して、別の デプロイ オプションを代わりに使用することもできます。

重要

Azure Resource Manager を使用して、アプリケーションを適切にデプロイするには、リソースが Azure でどのようにデプロイされているかを理解することが重要です。 次の例では、siteConfig を使用して最上位レベル構成が適用されます。 この構成は、情報を Functions ランタイムとデプロイ エンジンに提供するため、最上位レベルで設定することが重要です。 sourcecontrols/web 子リソースが適用される前に、最上位の情報が必要です。 これらの設定は、子レベルの config/appSettings リソースで構成できますが、場合によっては、関数アプリを、config/appSettings が適用される "" にデプロイする必要があります。 たとえば、Logic Apps で関数を使用している場合、関数は他のリソースと依存関係にあります。

{
  "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": "~3"
            },
            {
                "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": "~3",
          "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')]"
          }
     }
  ]
}

ヒント

このテンプレートでは、プロジェクト アプリの設定値を使用します。これによって、Functions デプロイ エンジン (Kudu) がデプロイ可能なコードを検索するベース ディレクトリを設定します。 リポジトリでは、関数は src フォルダーのサブフォルダーにあります。 したがって、この例では、アプリ設定値を src に設定します。 関数がリポジトリのルートにある場合、またはソース管理からデプロイしない場合、このアプリ設定値は削除できます。

テンプレートのデプロイ

次のいずれかの方法を使用して、テンプレートをデプロイできます。

[Azure にデプロイ] ボタン

<url-encoded-path-to-azuredeploy-json> を、GitHub の azuredeploy.json ファイルの生のパスのエンコードされた URL で置き換えます。

マークダウンを使用する例を次に示します。

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

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 を使用したデプロイ

次の PowerShell コマンドを実行すると、リソース グループが作成され、必要なリソースを使って関数アプリを作成するテンプレートがデプロイされます。 ローカルで実行するには、Azure PowerShell がインストールされている必要があります。 Connect-AzAccount を実行してサインインします。

# 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 上に関数アプリを作成するこのようなテンプレートを使用できます。 <function-app-name> は、関数アプリの一意の名前に置き換えてください。

次のステップ

Azure Functions を開発および構成する方法について学習します。