Automatizace nasazení prostředků pro vaši aplikaci funkcí ve službě Azure Functions

Pomocí souboru Bicep nebo šablony Azure Resource Manageru můžete automatizovat proces nasazení aplikace funkcí na nové nebo existující prostředky Azure. Tato automatizace poskytuje skvělý způsob, jak integrovat nasazení prostředků se zdrojovým kódem v DevOps, obnovit aplikaci funkcí a související prostředky ze zálohy nebo několikrát nasadit topologii aplikace aplikace.

V tomto článku se dozvíte, jak automatizovat vytváření prostředků a nasazení pro Azure Functions. V závislosti na aktivačních událostech a vazbách používaných vašimi funkcemi možná budete muset nasadit další prostředky, které jsou mimo rozsah tohoto článku.

Konkrétní kód šablony závisí na tom, jak je vaše aplikace funkcí hostovaná, ať už nasazujete kód nebo kontejnerizovanou aplikaci funkcí, a operační systém používaný vaší aplikací. Tento článek podporuje následující možnosti hostování:

Možnost hostování Typ nasazení Další informace najdete v tématu...
Plán Consumption služby Azure Functions Pouze kód Plán Consumption
Plán Elastic Premium pro Azure Functions Kód | Kontejner Plán Premium
Plán Azure Functions Dedicated (App Service) Kód | Kontejner Vyhrazený plán
Azure Container Apps Pouze kontejner Hostování Služby Container Apps ve službě Azure Functions
Azure Arc Kód | Kontejner App Service, Functions a Logic Apps ve službě Azure Arc (Preview)

Požadované prostředky

Nasazení hostované službou Azure Functions se obvykle skládá z těchto prostředků:

Prostředek Požadavek Odkaz na syntaxi a vlastnosti
Účet úložiště Požaduje se Microsoft.Storage/storageAccounts
Komponenta Přehledy aplikace Doporučené Microsoft. Přehledy/komponenty
Plán hostování Požadováno1 Microsoft.Web/serverfarms
Aplikace funkcí Požaduje se Microsoft.Web/sites

Nasazení služby Azure Functions pro plán Consumption se obvykle skládá z těchto prostředků:

Prostředek Požadavek Odkaz na syntaxi a vlastnosti
Účet úložiště Požaduje se Microsoft.Storage/storageAccounts
Komponenta Přehledy aplikace Doporučené Microsoft. Přehledy/komponenty
Aplikace funkcí Požaduje se Microsoft.Web/sites

Nasazení hostované službou Azure Container Apps se obvykle skládá z těchto prostředků:

Prostředek Požadavek Odkaz na syntaxi a vlastnosti
Účet úložiště Požaduje se Microsoft.Storage/storageAccounts
Komponenta Přehledy aplikace Doporučené Microsoft. Přehledy/komponenty
Spravované prostředí Požaduje se Microsoft.App/managedEnvironments
Aplikace funkcí Požaduje se Microsoft.Web/sites

Nasazení hostované službou Azure Arc se obvykle skládá z těchto prostředků:

Prostředek Požadavek Odkaz na syntaxi a vlastnosti
Účet úložiště Požaduje se Microsoft.Storage/storageAccounts
Komponenta Přehledy aplikace Doporučené Microsoft. Přehledy/komponenty
Prostředí Kubernetes služby App Service Požaduje se Microsoft.ExtendedLocation/customLocations
Aplikace funkcí Požaduje se Microsoft.Web/sites

1Explicitní plán hostování se nevyžaduje, pokud se rozhodnete hostovat aplikaci funkcí v plánu Consumption.

Když nasadíte více prostředků do jednoho souboru Bicep nebo šablony ARM, je důležité pořadí, ve kterém se prostředky vytvoří. Tento požadavek je výsledkem závislostí mezi prostředky. U takových závislostí nezapomeňte použít dependsOn element k definování závislosti v závislém prostředku. Další informace najdete v tématu Definování pořadí nasazení prostředků v šablonách ARM nebo závislostech prostředků v Bicep.

Tento článek předpokládá, že máte základní znalosti o vytváření souborů Bicep nebo vytváření šablon Azure Resource Manageru a příklady se zobrazují jako jednotlivé části pro konkrétní prostředky. Širokou sadu kompletních příkladů souborů Bicep a šablon ARM najdete v těchto příkladech nasazení aplikace funkcí.

Požadavky

Tento článek předpokládá, že jste už vytvořili spravované prostředí v Azure Container Apps. K vytvoření aplikace funkcí hostované v Container Apps potřebujete název i ID spravovaného prostředí.

Tento článek předpokládá, že jste už vytvořili vlastní umístění s podporou služby App Service v clusteru Kubernetes s podporou Služby Azure Arc. K vytvoření aplikace funkcí hostované ve vlastním umístění Azure Arc potřebujete ID vlastního umístění i ID prostředí Kubernetes.

Vytvoření účtu úložiště

Všechny aplikace funkcí vyžadují účet úložiště Azure. Potřebujete účet pro obecné účely, který podporuje objekty blob, tabulky, fronty a soubory. Další informace najdete v požadavcích na účet úložiště Azure Functions.

Důležité

Účet úložiště slouží k ukládání důležitých dat aplikace, někdy včetně samotného kódu aplikace. Přístup z jiných aplikací a uživatelů byste měli omezit na účet úložiště.

V této ukázkové části se vytvoří účet úložiště úrovně Standard pro obecné účely verze 2:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-05-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    "kind": "StorageV2",
    "sku": {
      "name": "[parameters('storageAccountType')]"
    },
    "properties": {
      "supportsHttpsTrafficOnly": true,
      "defaultToOAuthAuthentication": true
    }
  }
]

Další kontext najdete v kompletním azuredeploy.json souboru v úložišti šablon.

Musíte nastavit připojovací řetězec tohoto účtu úložiště jako AzureWebJobsStorage nastavení aplikace, které funkce vyžadují. Šablony v tomto článku vytvářejí tuto hodnotu připojovací řetězec na základě vytvořeného účtu úložiště, což je osvědčený postup. Další informace naleznete v tématu Konfigurace aplikace.

Povolení protokolů úložiště

Vzhledem k tomu, že se účet úložiště používá pro důležitá data aplikace funkcí, měli byste monitorovat, jestli účet upravuje daný obsah. Pokud chcete monitorovat účet úložiště, musíte nakonfigurovat protokoly prostředků služby Azure Monitor pro Službu Azure Storage. V této ukázkové části se pracovní prostor myLogAnalytics služby Log Analytics používá jako cíl pro tyto protokoly.

"resources": [
  {
    "type": "Microsoft.Insights/diagnosticSettings",
    "apiVersion": "2021-05-01-preview",
    "scope": "[format('Microsoft.Storage/storageAccounts/{0}/blobServices/default', parameters('storageAccountName'))]",
    "name": "[parameters('storageDataPlaneLogsName')]",
    "properties": {
        "workspaceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('myLogAnalytics'))]",
        "logs": [
          {
            "category": "StorageWrite",
            "enabled": true
          }
        ],
        "metrics": [
          {
            "category": "Transaction",
            "enabled": true
          }
        ]
    }
  }
]

Stejný pracovní prostor lze použít pro prostředek aplikace Přehledy definovaný později. Další informace, včetně toho, jak s těmito protokoly pracovat, najdete v tématu Monitorování služby Azure Storage.

Vytvoření Přehledy aplikace

Přehledy aplikace se doporučuje monitorovat spouštění aplikací funkcí. V této ukázkové části je prostředek Přehledy aplikace definován s typem Microsoft.Insights/components a druhemweb:

{
  "type": "Microsoft.Insights/components",
  "apiVersion": "2020-02-02",
  "name": "[variables('applicationInsightsName')]",
  "location": "[parameters('appInsightsLocation')]",
  "tags": {
    "[format('hidden-link:{0}', resourceId('Microsoft.Web/sites', parameters('functionAppName')))]": "Resource"
  },
  "properties": {
    "Application_Type": "web"
  },
  "kind": "web"
},

Další kontext najdete v kompletním azuredeploy.json souboru v úložišti šablon.

Připojení musí být k aplikaci funkcí poskytováno pomocí APPLICATIONINSIGHTS_CONNECTION_STRING nastavení aplikace. Další informace najdete v tématu Nastavení aplikace.

Příklady v tomto článku získávají hodnotu připojovací řetězec vytvořené instance. Starší verze se místo toho můžou použít APPINSIGHTS_INSTRUMENTATIONKEY k nastavení klíče instrumentace, který se už nedoporučuje.

Vytvoření plánu hostování

Aplikace hostované v plánu Azure Functions Premium nebo plánu Dedicated (App Service) musí mít plán hostování explicitně definovaný.

Plán Premium nabízí stejné škálování jako plán Consumption, ale zahrnuje vyhrazené prostředky a další funkce. Další informace najdete v plánu Azure Functions Premium.

Plán Premium je speciální typ serverfarm prostředku. Můžete ho zadat buď pomocí EP1, EP2nebo EP3 pro Name hodnotu vlastnosti ve sku vlastnosti. Způsob, jakým definujete plán hostování funkcí, závisí na tom, jestli vaše aplikace funkcí běží ve Windows nebo Linuxu. Tento ukázkový oddíl vytvoří EP1 plán:

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "sku": {
      "name": "EP1",
      "tier": "ElasticPremium",
      "family": "EP"
    },
    "kind": "elastic",
    "properties": {
      "maximumElasticWorkerCount": 20
    }
  }
]

Další kontext najdete v kompletním azuredeploy.json souboru v úložišti šablon.

Další informace o objektu sku naleznete SkuDefinition nebo zkontrolujte ukázkové šablony.

V plánu Dedicated (App Service) běží vaše aplikace funkcí na vyhrazených virtuálních počítačích v cenách Basic, Standard a Premium v plánech služby App Service, podobně jako u webových aplikací. Další informace najdete v tématu Vyhrazený plán.

Ukázkový soubor Bicep nebo šablona Azure Resource Manageru najdete v tématu Aplikace funkcí v plánu služby Aplikace Azure Service.

Ve službě Functions je vyhrazený plán pouze běžným plánem služby App Service, který je definovaný prostředkem serverfarm . Musíte zadat alespoň name hodnotu. Seznam podporovaných názvů plánů najdete --sku v az appservice plan create nastavení aktuálního seznamu podporovaných hodnot pro vyhrazený plán.

Způsob, jakým definujete plán hostování, závisí na tom, jestli vaše aplikace funkcí běží ve Windows nebo v Linuxu:

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "sku": {
      "tier": "Standard",
      "name": "S1",
      "size": "S1",
      "family": "S",
      "capacity": 1
    }
  }
]

Další kontext najdete v kompletním azuredeploy.json souboru v úložišti šablon.

Vytvoření plánu hostování

Nemusíte explicitně definovat prostředek plánu hostování Consumption. Když tuto definici prostředku přeskočíte, při vytváření samotného prostředku aplikace funkcí se automaticky vytvoří nebo vybere plán na základě jednotlivých oblastí.

Plán Consumption můžete explicitně definovat jako speciální typ serverfarm prostředku, který zadáte pomocí hodnoty Dynamic pro dané computeMode prostředky a sku vlastnosti. V této ukázkové části se dozvíte, jak explicitně definovat plán Consumption. Způsob, jakým definujete plán hostování, závisí na tom, jestli vaše aplikace funkcí běží ve Windows nebo v Linuxu.

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

Další kontext najdete v kompletním azuredeploy.json souboru v úložišti šablon.

Prostředí Kubernetes

Azure Functions je možné nasadit do Kubernetes s podporou Služby Azure Arc buď jako projekt kódu, nebo do kontejnerizované aplikace funkcí.

Pokud chcete vytvořit prostředky aplikace a plánu, musíte už pro cluster Kubernetes s podporou Azure Arc vytvořit prostředí Kubernetes služby App Service. V příkladech v tomto článku se předpokládá, že máte ID prostředku vlastního umístění (customLocationId) a prostředí Kubernetes služby App Service (kubeEnvironmentId), do kterého nasazujete, které jsou nastavené v tomto příkladu:

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

Weby i plány musí odkazovat na vlastní umístění prostřednictvím extendedLocation pole. Jak je znázorněno v tomto zkráceném příkladu, extendedLocation sedí mimo properties, jako partnerský vztah kind a location:

{
  "type": "Microsoft.Web/serverfarms",
  ...
  {
    "extendedLocation": {
      "name": "[parameters('customLocationId')]"
    },
  }
}

Prostředek plánu by měl používat hodnotu Kubernetes (K1) pro SKUpole kind a linux,kubernetesreserved vlastnost by měla být true, protože se jedná o nasazení Linuxu. Musíte také nastavit extendedLocation ID vlastního kubeEnvironmentProfile.id umístění a ID prostředí Kubernetes, což může vypadat jako v této ukázkové části:

"resources": [
  {
    "type": "Microsoft.Web/serverfarms",
    "apiVersion": "2022-03-01",
    "name": "[parameters('hostingPlanName')]",
    "location": "[parameters('location')]",
    "kind": "linux,kubernetes",
    "sku": {
      "name": "K1",
      "tier": "Kubernetes"
    },
    "extendedLocation": {
      "name": "[parameters('customLocationId')]"
    },
    "properties": {
      "kubeEnvironmentProfile": {
        "id": "[parameters('kubeEnvironmentId')]"
      },
      "reserved": true
    }
  }
]

Vytvoření aplikace funkcí

Prostředek aplikace funkcí je definován prostředkem typu Microsoft.Web/sites , kind který zahrnuje functionappminimálně .

Způsob, jakým definujete prostředek aplikace funkcí, závisí na tom, jestli hostujete v Linuxu nebo ve Windows:

Seznam nastavení aplikací požadovaných při spuštění ve Windows najdete v tématu Konfigurace aplikace. Ukázkový soubor Bicep nebo šablona Azure Resource Manageru najdete v šabloně plánu Consumption v aplikaci funkcí hostované ve Windows.

Seznam nastavení aplikací požadovaných při spuštění ve Windows najdete v tématu Konfigurace aplikace.

Poznámka:

Pokud se rozhodnete volitelně definovat plán Consumption, musíte vlastnost v aplikaci nastavit serverFarmId tak, aby odkazovat na ID prostředku plánu. Ujistěte se, že aplikace funkcí má dependsOn nastavení, které odkazuje také na plán. Pokud jste plán explicitně nedefinovali, vytvoří se pro vás.

serverFarmId Nastavte vlastnost v aplikaci tak, aby odkazovat na ID prostředku plánu. Ujistěte se, že aplikace funkcí má dependsOn nastavení, které odkazuje také na plán.

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "location": "[parameters('location')]",
    "kind": "functionapp",
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "siteConfig": {
        "appSettings": [
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', parameters('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', parameters('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "WEBSITE_CONTENTSHARE",
            "value": "[toLower(parameters('functionAppName'))]"
          },
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "name": "FUNCTIONS_WORKER_RUNTIME",
            "value": "node"
          },
          {
            "name": "WEBSITE_NODE_DEFAULT_VERSION",
            "value": "~14"
          }
        ]
      }
    }
  }
]

Kompletní příklad najdete v této azuredeploy.json šabloně.

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "location": "[parameters('location')]",
    "kind": "functionapp",
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "siteConfig": {
        "alwaysOn": true,
        "appSettings": [
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', parameters('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "name": "FUNCTIONS_WORKER_RUNTIME",
            "value": "node"
          },
          {
            "name": "WEBSITE_NODE_DEFAULT_VERSION",
            "value": "~14"
          }
        ]
      }
    }
  }
]

Kompletní příklad najdete v této azuredeploy.json šabloně.

Zdroje nasazení

Soubor Bicep nebo šablona ARM můžou volitelně také definovat nasazení kódu funkce, které můžou zahrnovat tyto metody:

Zdroje nasazení

Soubor Bicep nebo šablona ARM můžou volitelně také definovat nasazení kódu funkce pomocí balíčku pro nasazení zip.

Pokud chcete úspěšně nasadit aplikaci pomocí Azure Resource Manageru, je důležité pochopit, jak se prostředky nasazují v Azure. Ve většině příkladů se konfigurace nejvyšší úrovně používají pomocí .siteConfig Tyto konfigurace je důležité nastavit na nejvyšší úrovni, protože sdělují informace modulu runtime a modulu nasazení Functions. Před uplatněním podřízeného sourcecontrols/web prostředku se vyžadují informace nejvyšší úrovně. I když je možné tato nastavení nakonfigurovat v prostředku podřízené úrovně config/appSettings , v některých případech musí být vaše aplikace funkcí nasazená dříve, nežconfig/appSettings se použije.

Balíček pro nasazení zip

Nasazení zip je doporučený způsob nasazení kódu aplikace funkcí. Ve výchozím nastavení se funkce, které používají nasazení zip, spouští v samotném balíčku nasazení. Další informace, včetně požadavků na balíček pro nasazení, najdete v tématu Nasazení zip pro Azure Functions. Při použití automatizace nasazení prostředků můžete odkazovat na balíček nasazení .zip v šabloně Bicep nebo ARM.

Pokud chcete v šabloně použít nasazení zip, nastavte WEBSITE_RUN_FROM_PACKAGE nastavení v aplikaci tak, aby 1 zahrnovalo definici /zipDeploy prostředku.

Pro plán Consumption v Linuxu místo toho nastavte identifikátor URI balíčku nasazení přímo v WEBSITE_RUN_FROM_PACKAGE nastavení, jak je znázorněno v této ukázkové šabloně.

Tento příklad přidá zdroj nasazení zip do existující aplikace:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "functionAppName": {
      "type": "string",
      "metadata": {
        "description": "The name of the Azure Function app."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location into which the resources should be deployed."
      }
    },
    "packageUri": {
      "type": "string",
      "metadata": {
        "description": "The zip content url."
      }
    }
  },
  "resources": [
    {
      "name": "[concat(parameters('functionAppName'), '/ZipDeploy')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "location": "[parameters('location')]",
      "properties": {
        "packageUri": "[parameters('packageUri')]"
      }
    }
  ]
}

Při zahrnutí prostředků nasazení zip do šablony mějte na paměti následující skutečnosti:

  • Plány Consumption v Linuxu nepodporují WEBSITE_RUN_FROM_PACKAGE = 1. Místo toho musíte nastavit identifikátor URI balíčku nasazení přímo v WEBSITE_RUN_FROM_PACKAGE nastavení. Další informace najdete v tématu WEBSITE_RUN_FROM_PACKAGE. Příklad šablony najdete v tématu Aplikace funkcí hostovaná v Linuxu v plánu Consumption.
  • Musí packageUri to být umístění, ke kterému má funkce přístup. Zvažte použití úložiště objektů blob v Azure se sdíleným přístupovým podpisem (SAS). Po vypršení platnosti sdíleného přístupového podpisu už nebudou mít funkce přístup ke sdílené složce pro nasazení. Když sas znovu vygenerujete, nezapomeňte nastavení aktualizovat WEBSITE_RUN_FROM_PACKAGE novou hodnotou identifikátoru URI.

  • Při nastavování WEBSITE_RUN_FROM_PACKAGE identifikátoru URI je nutné ručně synchronizovat triggery.

  • Při přidávání nebo aktualizaci nastavení nezapomeňte vždy nastavit všechna požadovaná nastavení aplikace v appSettings kolekci. Aktualizace odebere stávající nastavení, která nejsou explicitně nastavená. Další informace naleznete v tématu Konfigurace aplikace.

  • Služba Functions nepodporuje nasazení webu (msdeploy) pro nasazení balíčků. Místo toho musíte použít nasazení zip v kanálech nasazení a automatizaci. Další informace najdete v tématu Nasazení zip pro Azure Functions.

Vzdálená sestavení

Proces nasazení předpokládá, že soubor .zip, který používáte, nebo nasazení zip obsahuje aplikaci připravenou ke spuštění. To znamená, že ve výchozím nastavení nejsou spuštěna žádná vlastní nastavení.

Existují však scénáře, které vyžadují vzdálené sestavení aplikace, například když potřebujete načíst balíčky specifické pro Linux v Pythonu nebo Node.js aplikace, které jste vytvořili na počítači s Windows. V takovém případě můžete službu Functions nakonfigurovat tak, aby po nasazení zip prováděla vzdálené sestavení kódu.

Způsob vyžádání vzdáleného sestavení závisí na operačním systému, do kterého nasazujete:

Když se aplikace nasadí do Windows, spustí se příkazy specifické pro jazyk (například dotnet restore pro aplikace v jazyce C# nebo npm install pro Node.js aplikace).

Pokud chcete povolit stejné procesy sestavení, které získáte s kontinuální integrací, přidejte SCM_DO_BUILD_DURING_DEPLOYMENT=true do nastavení aplikace v kódu nasazení a úplně odeberte WEBSITE_RUN_FROM_PACKAGE .

Linuxové kontejnery

Pokud nasazujete kontejnerizovanou aplikaci funkcí do plánu Azure Functions Premium nebo Dedicated, musíte:

Další informace naleznete v tématu Konfigurace aplikace.

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "location": "[parameters('location')]",
    "kind": "functionapp",
    "dependsOn": [
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "siteConfig": {
        "appSettings": [
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}', parameters('storageAccountName'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "FUNCTIONS_WORKER_RUNTIME",
            "value": "node"
          },
          {
            "name": "WEBSITE_NODE_DEFAULT_VERSION",
            "value": "~14"
          },
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "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"
      }
    }
  }
]

Při nasazování kontejnerizovaných funkcí do Azure Container Apps musí vaše šablona:

  • kind Nastavte pole na hodnotu functionapp,linux,container,azurecontainerapps.
  • managedEnvironmentId Nastavte vlastnost webu na plně kvalifikovaný identifikátor URI prostředí Container Apps.
  • Přidejte odkaz na prostředek v kolekci webu dependsOn při vytváření Microsoft.App/managedEnvironments prostředku ve stejnou dobu jako web.

Definice kontejnerizované aplikace funkcí nasazené z privátního registru kontejneru do existujícího prostředí Container Apps může vypadat jako v tomto příkladu:

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "kind": "functionapp,linux,container,azurecontainerapps",
    "location": "[parameters('location')]",
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[parameters('hostingPlanName')]",
      "siteConfig": {
        "linuxFxVersion": "DOCKER|myacr.azurecr.io/myimage:mytag",
        "appSettings": [
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}', parameters('storageAccountName'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          }
        ],
      },
      "managedEnvironmentId": "[parameters('managedEnvironmentId')]"
    }
  }
]

Při nasazování funkcí do Azure Arc závisí hodnota nastavená pro kind pole prostředku aplikace funkcí na typ nasazení:

Typ nasazení kind hodnota pole
Nasazení jen s kódem functionapp,linux,kubernetes
Nasazení kontejnerů functionapp,linux,kubernetes,container

Musíte také nastavit customLocationId , jak jste to udělali pro prostředek plánu hostování.

Definice kontejnerizované aplikace funkcí využívající image rychlého startu .NET 6 může vypadat jako v tomto příkladu:

"resources": [
  {
    "type": "Microsoft.Web/sites",
    "apiVersion": "2022-03-01",
    "name": "[parameters('functionAppName')]",
    "kind": "kubernetes,functionapp,linux,container",
    "location": "[parameters('location')]",
    "extendedLocation": {
      "name": "[parameters('customLocationId')]"
    },
    "dependsOn": [
      "[resourceId('Microsoft.Insights/components', parameters('applicationInsightsName'))]",
      "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]",
      "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    ],
    "properties": {
      "serverFarmId": "[parameters('hostingPlanName')]",
      "siteConfig": {
        "linuxFxVersion": "DOCKER|mcr.microsoft.com/azure-functions/4-dotnet-isolated6.0-appservice-quickstart",
        "appSettings": [
          {
            "name": "FUNCTIONS_EXTENSION_VERSION",
            "value": "~4"
          },
          {
            "name": "AzureWebJobsStorage",
            "value": "[format('DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}', parameters('storageAccountName'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-09-01').keys[0].value)]"
          },
          {
            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
            "value": "[reference(resourceId('Microsoft.Insights/components', parameters('applicationInsightsName')), '2020-02-02').ConnectionString]"
          }
        ],
        "alwaysOn": true
      }
    }
  }
]

Konfigurace aplikací

Služba Functions nabízí následující možnosti konfigurace aplikace funkcí v Azure:

Konfigurace Microsoft.Web/sites Vlastnost
Nastavení webu siteConfig
Nastavení aplikace siteConfig.appSettings Kolekce

U vlastnosti jsou vyžadována siteConfig následující nastavení webu:

Tato nastavení aplikace jsou povinná (nebo doporučená) pro konkrétní operační systém a možnost hostování:

Pro nasazení kontejnerů se vyžadují tato nastavení aplikace:

Tato nastavení se vyžadují jenom při nasazování z privátního registru kontejneru:

Při práci s nastavením webu a aplikace pomocí souborů Bicep nebo šablon ARM mějte na paměti tyto aspekty:

  • Je potřeba vzít v úvahu důležité aspekty, kdy byste měli nastavit WEBSITE_CONTENTSHARE automatizované nasazení. Podrobné pokyny najdete v referenčních informacích WEBSITE_CONTENTSHARE .
  • Nastavení aplikace byste měli vždy definovat jako siteConfig/appSettings kolekci vytvářeného Microsoft.Web/sites prostředku, jak je to v příkladech v tomto článku. Tím se zajistí, že nastavení, která vaše aplikace funkcí potřebuje ke spuštění, jsou k dispozici při počátečním spuštění.

  • Při přidávání nebo aktualizaci nastavení aplikace pomocí šablon nezapomeňte do aktualizace zahrnout všechna existující nastavení. Musíte to udělat, protože základní volání rozhraní REST API aktualizace nahrazují celý /config/appsettings prostředek. Pokud odeberete existující nastavení, vaše aplikace funkcí se nespustí. Pokud chcete aktualizovat nastavení jednotlivých aplikací prostřednictvím kódu programu, můžete k provedení těchto změn použít Azure CLI, Azure PowerShell nebo Azure Portal. Další informace naleznete v tématu Práce s nastavením aplikace.

Nasazení slotů

Funkce umožňují nasadit různé verze kódu do jedinečných koncových bodů ve vaší aplikaci funkcí. To usnadňuje vývoj, ověřování a nasazování aktualizací funkcí bez dopadu na funkce spuštěné v produkčním prostředí. Sloty nasazení jsou funkcí služby Aplikace Azure Service. Počet dostupných slotů závisí na vašem plánu hostování. Další informace najdete v tématu Funkce slotů nasazení služby Azure Functions.

Prostředek slotu se definuje stejným způsobem jako prostředek aplikace funkcí (Microsoft.Web/sites), ale místo toho použijete Microsoft.Web/sites/slots identifikátor prostředku. Příklad nasazení (v šablonách Bicep i ARM), které vytvoří produkční i přípravný slot v plánu Premium, najdete v tématu Aplikace funkcí Azure s slotem nasazení.

Informace o tom, jak provést prohození pomocí šablon, najdete v tématu Automatizace pomocí šablon Resource Manageru.

Při práci s nasazeními slotů mějte na paměti následující skutečnosti:

  • Nenastavujte WEBSITE_CONTENTSHARE explicitně nastavení v definici slotu nasazení. Toto nastavení se pro vás vygeneruje při vytváření aplikace v slotu nasazení.

  • Když prohodíte sloty, některá nastavení aplikace se považují za "lepivé", protože zůstanou s slotem a ne s prohozením kódu. Toto nastavení slotu můžete definovat zahrnutím "slotSetting":true do definice konkrétního nastavení aplikace v šabloně. Další informace najdete v tématu Správa nastavení.

Zabezpečená nasazení

Aplikaci funkcí můžete vytvořit v nasazení, ve kterém byla jedna nebo více prostředků zabezpečená integrací s virtuálními sítěmi. Integrace virtuální sítě pro vaši aplikaci funkcí je definována prostředkem Microsoft.Web/sites/networkConfig . Tato integrace závisí na odkazované aplikaci funkcí i prostředcích virtuální sítě. Vaše aplikace funkcí může také záviset na jiných privátních síťových prostředcích, jako jsou privátní koncové body a trasy. Další informace najdete v tématu Možnosti sítě Azure Functions.

Při vytváření nasazení, které používá zabezpečený účet úložiště, musíte nastavení explicitně nastavit WEBSITE_CONTENTSHARE a vytvořit prostředek sdílené složky pojmenovaný v tomto nastavení. Ujistěte se, že vytvoříte Microsoft.Storage/storageAccounts/fileServices/shares prostředek pomocí hodnoty WEBSITE_CONTENTSHARE, jak je znázorněno v tomto příkladu (soubor BIcep šablony|ARM). Budete také muset nastavit vlastnost vnetContentShareEnabled webu na true.

Poznámka:

Pokud tato nastavení nejsou součástí nasazení, které používá zabezpečený účet úložiště, zobrazí se tato chyba při ověřování nasazení: Could not access storage account using provided connection string.

Tyto projekty poskytují příklady nasazení aplikací funkcí ve virtuální síti jak bicep, tak šablony ARM, včetně omezení přístupu k síti:

Scénář s omezeným přístupem Popis
Vytvoření aplikace funkcí s integrací virtuální sítě Vaše aplikace funkcí se vytvoří ve virtuální síti s úplným přístupem k prostředkům v této síti. Příchozí a odchozí přístup k vaší aplikaci funkcí není omezený. Další informace najdete v tématu Integrace virtuální sítě.
Vytvoření aplikace funkcí, která přistupuje k zabezpečenému účtu úložiště Vytvořená aplikace funkcí používá zabezpečený účet úložiště, ke kterému funkce přistupuje pomocí privátních koncových bodů. Další informace najdete v části Omezení účtu úložiště na virtuální síť.
Vytvoření aplikace funkcí a účtu úložiště, které používají privátní koncové body K vytvořené aplikaci funkcí se dá přistupovat jenom pomocí privátních koncových bodů a používá privátní koncové body pro přístup k prostředkům úložiště. Další informace najdete v tématu Privátní koncové body.

Omezené nastavení sítě

Tato nastavení možná budete muset použít i v případě, že má vaše aplikace funkcí omezení sítě:

Nastavení Hodnota Popis
WEBSITE_CONTENTOVERVNET 1 Nastavení aplikace, které vaší aplikaci funkcí umožňuje škálovat, když je účet úložiště omezený na virtuální síť. Další informace najdete v části Omezení účtu úložiště na virtuální síť.
vnetrouteallenabled 1 Nastavení webu, které vynutí veškerý provoz z aplikace funkcí k používání virtuální sítě. Další informace najdete v tématu Integrace místní virtuální sítě. Toto nastavení webu nahrazuje nastavení WEBSITE_VNET_ROUTE_ALLaplikace .

Důležité informace o omezeních sítě

Pokud omezujete přístup k účtu úložiště prostřednictvím privátních koncových bodů, nebudete mít přístup k účtu úložiště prostřednictvím portálu ani k žádnému zařízení mimo virtuální síť. Přístup k zabezpečené IP adrese nebo virtuální síti v účtu úložiště můžete udělit správou výchozího pravidla přístupu k síti.

Vytvoření šablony

Odborníci s bicepem nebo šablonami ARM můžou ručně zakódovat nasazení pomocí jednoduchého textového editoru. Pro ostatní z nás existuje několik způsobů, jak usnadnit proces vývoje:

  • Visual Studio Code: K dispozici jsou rozšíření, která vám pomůžou pracovat se soubory Bicep a šablonami ARM. Pomocí těchto nástrojů můžete zajistit správnost kódu a poskytnout základní ověření.

  • Azure Portal: Když vytvoříte aplikaci funkcí a související prostředky na portálu, poslední obrazovka Kontrola a vytvoření obsahuje odkaz Ke stažení šablony pro automatizaci .

    Odkaz na šablonu si můžete stáhnout z procesu vytváření azure Functions na webu Azure Portal.

    Tento odkaz ukazuje šablonu ARM vygenerovanou na základě možností, které jste zvolili na portálu. I když tato šablona může být při vytváření aplikace funkcí s mnoha novými prostředky trochu složitá, může poskytnout dobrý přehled o tom, jak může šablona ARM vypadat.

Ověření šablony

Při ručním vytvoření souboru šablony nasazení je důležité před nasazením šablonu ověřit. Všechny metody nasazení ověřují syntaxi šablony a vyvolají chybovou validation failed zprávu, jak je znázorněno v následujícím příkladu ve formátu JSON:

{"error":{"code":"InvalidTemplate","message":"Deployment template validation failed: 'The resource 'Microsoft.Web/sites/func-xyz' is not defined in the template. Please see https://aka.ms/arm-template for usage details.'.","additionalInfo":[{"type":"TemplateViolation","info":{"lineNumber":0,"linePosition":0,"path":""}}]}}

K ověření šablony před nasazením můžete použít následující metody:

Následující úloha nasazení skupiny prostředků Azure v2 s pokynem deploymentMode: 'Validation' azure Pipelines k ověření šablony.

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    subscriptionId: # Required subscription ID
    action: 'Create Or Update Resource Group'
    resourceGroupName: # Required resource group name
    location: # Required when action == Create Or Update Resource Group
    templateLocation: 'Linked artifact'
    csmFile: # Required when  TemplateLocation == Linked Artifact
    csmParametersFile: # Optional
    deploymentMode: 'Validation'

Můžete také vytvořit testovací skupinu prostředků, která vyhledá chyby předběžného nasazení a chyby nasazení .

Nasazení šablony

K nasazení souboru a šablony Bicep můžete použít libovolný z následujících způsobů:

Tlačítko pro nasazení do Azure

Poznámka:

Tato metoda v současné době nepodporuje nasazování souborů Bicep.

Nahraďte <url-encoded-path-to-azuredeploy-json> adresou URL zakódovanou verzí nezpracované cesty azuredeploy.json k souboru na GitHubu.

Tady je příklad, který používá Markdown:

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

Tady je příklad, který používá 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>

Nasazení pomocí PowerShellu

Následující příkazy PowerShellu vytvoří skupinu prostředků a nasadí soubor Bicep nebo šablonu ARM, která vytvoří aplikaci funkcí s požadovanými prostředky. Pokud chcete spustit místně, musíte mít nainstalovaný Azure PowerShell . Spusťte Connect-AzAccount přihlášení.

# 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'

# Deploy the template
New-AzResourceGroupDeployment -ResourceGroupName "MyResourceGroup" -TemplateFile azuredeploy.json  -Verbose

K otestování tohoto nasazení můžete použít šablonu, jako je tato , která vytvoří aplikaci funkcí ve Windows v plánu Consumption.

Další kroky

Přečtěte si další informace o tom, jak vyvíjet a konfigurovat Azure Functions.