概要
クイック スタートを参考にARMテンプレートを使用して、Azure Functions
をリソースグループにデプロイする
前提
- デプロイ先のリソースグループの作成
- VSCode拡張機能
Azure Resource Manager (ARM) Tools
のインストール
Azure Resource Manager (ARM) Tools
でARM テンプレートのひな型作成、値の検証、入力候補表示等が可能(参考)
作成対象リソース
Azure Portal
からAzure Functions
を作成した場合、以下画像のように
Azure Functions
以外に、ストレージアカウント、プラン、Application Insightsが含まれる
そのため、ARMテンプレートに、これら4つのリソースを定義する
進め方
クイック スタートにサンプルがあるが、バージョン等が古い場合があるため、以下のような手順でARMテンプレートを作成していく
以下ストレージアカウントの場合
1. 拡張機能でひな型を生成する
以下画像のようにresources
以下でsto
等を入力すると候補が出てくるのでEnter
でひな型が生成される
以下自動生成されたひな形
2. サンプルを参考にする
Azure Functions
のARM テンプレートからリソースを生成するクイック スタートにあるサンプルを参考にする
3. テンプレートエクスポートを参考にする
Azure Portal
からAzure Functions
と共に生成されたストレージアカウントのテンプレートのエクスポートで出力されたARMテンプレートを参考にする
※ 必須パラメータ以外も出力されるので必要な値のみ参照する
※ Azure Functions
のテンプレートエクスポートでは環境変数が含まれていない等、必要なプロパティが全て含まれているたけではない
4. ARMテンプレートのドキュメントから調べる
ARMテンプレートのドキュメントでプロパティの値を調べるなどして適切な設定を行う
リソースタイプMicrosoft.Storage/storageAccounts
のドキュメント:https://docs.microsoft.com/en-us/azure/templates/microsoft.storage/storageaccounts?tabs=bicep
テンプレート
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS"
},
"functions_name": {
"type": "String",
"defaultValue": "arm-test-functions"
}
},
"functions": [],
"variables": {
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'azfunctions')]",
"hostingPlanName": "[parameters('functions_name')]",
"applicationInsightsName": "[parameters('functions_name')]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-04-01",
"kind": "Storage",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
}
},
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2020-12-01",
"name": "[variables('hostingPlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Y1",
"tier": "Dynamic"
},
"properties": {
"name": "[variables('hostingPlanName')]"
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2020-12-01",
"kind": "functionapp",
"name": "[parameters('functions_name')]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
],
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('hostingPlanName'))]",
"siteConfig": {
"appSettings": [
{
"name": "APPINSIGHTS_INSTRUMENTATIONKEY",
"value": "[reference(resourceId('microsoft.insights/components', variables('applicationInsightsName')), '2020-02-02-preview').InstrumentationKey]"
},
{
"name": "AzureWebJobsDashboard",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';EndpointSuffix=', environment().suffixes.storage, ';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value)]"
},
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';EndpointSuffix=', environment().suffixes.storage, ';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value)]"
},
{
"name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageAccountName'), ';EndpointSuffix=', environment().suffixes.storage, ';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2019-06-01').keys[0].value)]"
},
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~4"
},
{
"name": "FUNCTIONS_WORKER_RUNTIME",
"value": "node"
},
{
"name": "WEBSITE_CONTENTSHARE",
"value": "[toLower('functionName')]"
},
{
"name": "WEBSITE_NODE_DEFAULT_VERSION",
"value": "~14"
}
]
}
}
},
{
"type": "microsoft.insights/components",
"apiVersion": "2020-02-02",
"name": "[variables('applicationInsightsName')]",
"location": "[parameters('location')]",
"kind": "web",
"tags": {
"[concat('hidden-link:', resourceId('Microsoft.Web/sites', variables('applicationInsightsName')))]": "Resource"
},
"properties": {
"Application_Type": "web",
"ApplicationId": "[variables('applicationInsightsName')]"
}
}
],
"outputs": {}
}
Microsoft.Storage/storageAccounts(ストレージアカウント)
sku
に関しては、SKU の種類と、
以下Azure Portal
からAzure Functions
を作成した場合に生成されるストレージアカウントのARMテンプレートを参考に決定
Microsoft.Web/serverfarms(プラン)
sku
に関しては、
以下Azure Portal
からAzure Functions
を作成した場合に生成されるプランのARMテンプレートを参考に決定
Microsoft.Web/sites(Funcitons)
基本的にはサンプルを参照
appSettings
が環境変数の設定になるが、以下の値は開発/実行環境に合わせて要変更
-
FUNCTIONS_EXTENSION_VERSION
:Funcitonsのランタイムバージョン
-
FUNCTIONS_WORKER_RUNTIME
:ランタイムスタック(プログラム言語) -
WEBSITE_NODE_DEFAULT_VERSION
:nodeバージョン
microsoft.insights/components
基本的にはサンプルを参照
欠けていた必須プロパティ(kind
, Application_Type
)の追加等を行っている
デプロイ
デプロイコマンド
az deployment group create --name <デプロイ名> --resource-group <デプロイ先リソースグループ名> --template-file <ARMテンプレートパス>
デプロイが完了するとリソースグループにリソースが追加される
デプロイ時に指定したデプロイ名でデプロイ結果が確認できる
Funcitonsの環境変数で指定したランタイムバージョン等は以下から確認できる