0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Resource Manager - 基本+Functionsのデプロイ

Posted at

概要

クイック スタートを参考にARMテンプレートを使用して、Azure Functionsをリソースグループにデプロイする

前提

  • デプロイ先のリソースグループの作成
  • VSCode拡張機能Azure Resource Manager (ARM) Toolsのインストール

Azure Resource Manager (ARM) ToolsでARM テンプレートのひな型作成、値の検証、入力候補表示等が可能(参考

image-20211125112244786.png

作成対象リソース

Azure PortalからAzure Functionsを作成した場合、以下画像のように
Azure Functions以外に、ストレージアカウント、プラン、Application Insightsが含まれる
そのため、ARMテンプレートに、これら4つのリソースを定義する

image-20211125114328412.png

進め方

クイック スタートサンプルがあるが、バージョン等が古い場合があるため、以下のような手順でARMテンプレートを作成していく
以下ストレージアカウントの場合

1. 拡張機能でひな型を生成する

以下画像のようにresources以下でsto等を入力すると候補が出てくるのでEnterでひな型が生成される

image-20211125130946155.png

以下自動生成されたひな形

image-20211125132249312.png

2. サンプルを参考にする

Azure FunctionsのARM テンプレートからリソースを生成するクイック スタートにあるサンプルを参考にする

3. テンプレートエクスポートを参考にする

Azure PortalからAzure Functionsと共に生成されたストレージアカウントのテンプレートのエクスポートで出力されたARMテンプレートを参考にする
※ 必須パラメータ以外も出力されるので必要な値のみ参照する
Azure Functionsのテンプレートエクスポートでは環境変数が含まれていない等、必要なプロパティが全て含まれているたけではない

image-20211125141958493.png

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テンプレートを参考に決定

image-20211125141958493.png

Microsoft.Web/serverfarms(プラン)

skuに関しては、
以下Azure PortalからAzure Functionsを作成した場合に生成されるプランのARMテンプレートを参考に決定

image-20211125145105038.png

Microsoft.Web/sites(Funcitons)

基本的にはサンプルを参照
appSettingsが環境変数の設定になるが、以下の値は開発/実行環境に合わせて要変更

  • FUNCTIONS_EXTENSION_VERSION:Funcitonsのランタイムバージョン

image-20211125154402961.png

  • FUNCTIONS_WORKER_RUNTIMEランタイムスタック(プログラム言語)
  • WEBSITE_NODE_DEFAULT_VERSION:nodeバージョン

microsoft.insights/components

基本的にはサンプルを参照
欠けていた必須プロパティ(kind, Application_Type)の追加等を行っている

デプロイ

デプロイコマンド

az deployment group create --name <デプロイ名> --resource-group <デプロイ先リソースグループ名> --template-file <ARMテンプレートパス>

デプロイが完了するとリソースグループにリソースが追加される

image-20211125155450786.png

デプロイ時に指定したデプロイ名でデプロイ結果が確認できる

image-20211125155616445.png

Funcitonsの環境変数で指定したランタイムバージョン等は以下から確認できる

image-20211125155810885.png

image-20211125155827532.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?