Erőforrás-üzembe helyezés automatizálása a függvényalkalmazáshoz az Azure Functionsben

Bicep-fájl vagy Azure Resource Manager-sablon használatával automatizálhatja egy függvényalkalmazás üzembe helyezésének folyamatát az új vagy meglévő Azure-erőforrásokon. Az ilyen automatizálás nagyszerű lehetőséget nyújt az erőforrás-telepítések és a forráskód devOpsban való integrálására, a függvényalkalmazások és a kapcsolódó erőforrások biztonsági mentésből való visszaállítására vagy az alkalmazástopológiák többszöri üzembe helyezésére.

Ez a cikk bemutatja, hogyan automatizálhatja az erőforrások létrehozását és az Azure Functions üzembe helyezését. A függvények által használt triggertől és kötéstől függően előfordulhat, hogy más erőforrásokat is üzembe kell helyeznie, amelyek nem tartoznak a jelen cikk hatókörébe.

Az adott sablonkód attól függ, hogy miként üzemelteti a függvényalkalmazást, hogy kódot vagy tárolóalapú függvényalkalmazást helyez üzembe, valamint az alkalmazás által használt operációs rendszert. Ez a cikk a következő üzemeltetési lehetőségeket támogatja:

Üzemeltetési lehetőség Üzemelő példány típusa További információ:
Azure Functions-használati csomag Csak kóddal Használati terv
Azure Functions Elastic Premium-csomag Kód | Konténer Prémium csomag
Dedikált Azure Functions-csomag (App Service) Kód | Konténer Dedikált terv
Azure Container Apps Csak tároló Az Azure Functionst üzemeltető Container Apps
Azure Arc Kód | Konténer App Service, Functions és Logic Apps az Azure Arcon (előzetes verzió)

Szükséges erőforrások

Az Azure Functions által üzemeltetett üzemelő példányok általában az alábbi erőforrásokból állnak:

Erőforrás Követelmény Szintaxis és tulajdonságok referenciája
Tárfiók Kötelező Microsoft.Storage/storageAccounts
Alkalmazás Elemzések összetevő Ajánlott Microsoft. Elemzések/összetevők
Üzemeltetési terv Kötelező1 Microsoft.Web/serverfarms
Függvényalkalmazás Kötelező Microsoft.Web/sites

A használati csomaghoz tartozó Azure Functions-üzemelő példányok általában az alábbi erőforrásokból állnak:

Erőforrás Követelmény Szintaxis és tulajdonságok referenciája
Tárfiók Kötelező Microsoft.Storage/storageAccounts
Alkalmazás Elemzések összetevő Ajánlott Microsoft. Elemzések/összetevők
Függvényalkalmazás Kötelező Microsoft.Web/sites

Az Azure Container Apps által üzemeltetett üzemelő példányok általában az alábbi erőforrásokból állnak:

Erőforrás Követelmény Szintaxis és tulajdonságok referenciája
Tárfiók Kötelező Microsoft.Storage/storageAccounts
Alkalmazás Elemzések összetevő Ajánlott Microsoft. Elemzések/összetevők
Felügyelt környezet Kötelező Microsoft.App/managedEnvironments
Függvényalkalmazás Kötelező Microsoft.Web/sites

Az Azure Arc által üzemeltetett üzemelő példányok általában az alábbi erőforrásokból állnak:

Erőforrás Követelmény Szintaxis és tulajdonságok referenciája
Tárfiók Kötelező Microsoft.Storage/storageAccounts
Alkalmazás Elemzések összetevő Ajánlott Microsoft. Elemzések/összetevők
App Service Kubernetes-környezet Kötelező Microsoft.ExtendedLocation/customLocations
Függvényalkalmazás Kötelező Microsoft.Web/sites

1Nem szükséges explicit üzemeltetési csomag, ha a függvényalkalmazást használatalapú csomagban szeretné üzemeltetni.

Ha több erőforrást helyez üzembe egyetlen Bicep-fájlban vagy ARM-sablonban, fontos az erőforrások létrehozásának sorrendje. Ez a követelmény az erőforrások közötti függőségek eredménye. Ilyen függőségek esetén mindenképpen használja az elemet a dependsOn függőség meghatározására a függő erőforrásban. További információ: Az erőforrások ARM-sablonokban vagy erőforrásfüggőségekben való üzembe helyezésének sorrendje a Bicepben.

Ez a cikk feltételezi, hogy alapvető ismereteket nyújt a Bicep-fájlok létrehozásáról vagy az Azure Resource Manager-sablonok készítéséről, és a példák külön szakaszokként jelennek meg adott erőforrásokhoz. A teljes Bicep-fájl- és ARM-sablonpéldák széles halmazát az alábbi függvényalkalmazás-üzembehelyezési példákban tekinti meg.

Előfeltételek

Ez a cikk feltételezi, hogy már létrehozott egy felügyelt környezetet az Azure Container Appsben. A Container Appsben üzemeltetett függvényalkalmazás létrehozásához szüksége van a felügyelt környezet nevére és azonosítójára is.

Ez a cikk feltételezi, hogy már létrehozott egy App Service-kompatibilis egyéni helyet egy Azure Arc-kompatibilis Kubernetes-fürtön. Az Egyéni Azure Arc-helyen üzemeltetett függvényalkalmazás létrehozásához az egyéni helyazonosítóra és a Kubernetes-környezetazonosítóra is szükség van.

Storage-fiók létrehozása

Minden függvényalkalmazáshoz Azure Storage-fiók szükséges. Olyan általános célú fiókra van szüksége, amely támogatja a blobokat, táblákat, üzenetsorokat és fájlokat. További információ: Azure Functions Storage-fiókkövetelmények.

Fontos

A tárfiók fontos alkalmazásadatok tárolására szolgál, néha magában az alkalmazáskódban is. Korlátoznia kell a hozzáférést más alkalmazásoktól és felhasználóktól a tárfiókhoz.

Ez a példaszakasz létrehoz egy standard általános célú v2-tárfiókot:

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

További információt a sablonok adattárában található teljes azuredeploy.json fájlban talál.

Ennek a tárfióknak a kapcsolati sztring kell beállítania alkalmazásbeállításként, amelyet a AzureWebJobsStorage Functions igényel. A cikkben szereplő sablonok ezt a kapcsolati sztring értéket a létrehozott tárfiók alapján hozzák létre, ami ajánlott eljárás. További információ: Alkalmazáskonfiguráció.

Tárolási naplók engedélyezése

Mivel a tárfiókot a függvényalkalmazás fontos adataihoz használják, figyelnie kell a fiókot a tartalom módosításához. A tárfiók figyeléséhez konfigurálnia kell az Azure Monitor-erőforrásnaplókat az Azure Storage-hoz. Ebben a példában a naplók célhelyeként egy log Analytics-munkaterületet myLogAnalytics használunk.

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

Ugyanez a munkaterület használható az alkalmazás Elemzések később definiált erőforráshoz. További információkért, beleértve a naplók kezelését, tekintse meg az Azure Storage monitorozását.

Alkalmazás Elemzések létrehozása

A függvényalkalmazások végrehajtásának figyeléséhez az alkalmazás Elemzések ajánlott. Ebben a példában az alkalmazás Elemzések erőforrás a következő típussal Microsoft.Insights/components és típussal webvan definiálva:

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

További információt a sablonok adattárában található teljes azuredeploy.json fájlban talál.

A kapcsolatot az alkalmazásbeállítással kell megadni a APPLICATIONINSIGHTS_CONNECTION_STRING függvényalkalmazásnak. További információ: Alkalmazásbeállítások.

A cikkben szereplő példák beolvasják a létrehozott példány kapcsolati sztring értékét. A régebbi verziók ehelyett a rendszerállapot-kulcs beállítására használhatók APPINSIGHTS_INSTRUMENTATIONKEY , ami már nem ajánlott.

Az üzemeltetési terv létrehozása

Az Azure Functions Premium-csomagban vagy dedikált (App Service-) csomagban üzemeltetett alkalmazásoknak explicit módon kell meghatározniuk az üzemeltetési tervet.

A Prémium csomag ugyanazt a skálázást kínálja, mint a Használati csomag, de dedikált erőforrásokat és további képességeket is tartalmaz. További információ: Azure Functions Premium-csomag.

A Prémium csomag egy speciális erőforrástípus serverfarm . Megadhatja a tulajdonságot a tulajdonságban lévő tulajdonság értékével sku vagy NameEP3 használatávalEP1EP2. A Functions üzemeltetési csomag meghatározásának módja attól függ, hogy a függvényalkalmazás Windowson vagy Linuxon fut-e. Ez a példaszakasz létrehoz egy EP1 tervet:

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

További információt a sablonok adattárában található teljes azuredeploy.json fájlban talál.

Az objektummal kapcsolatos további információkért sku tekintse meg SkuDefinition vagy tekintse át a példasablonokat.

A Dedikált (App Service) csomagban a függvényalkalmazás dedikált virtuális gépeken fut az App Service-csomagokban az Alapszintű, Standard és Prémium termékváltozatokon, a webalkalmazásokhoz hasonlóan. További információ: Dedikált csomag.

Bicep-mintafájl/Azure Resource Manager-sablonért lásd: Függvényalkalmazás a Azure-alkalmazás Service-csomagban

A Functionsben a dedikált csomag csak egy normál App Service-csomag, amelyet egy serverfarm erőforrás határoz meg. Legalább az name értéket meg kell adnia. A támogatott tervnevek listáját a --sku dedikált terv támogatott értékeinek aktuális listájában az appservice plan create találja.

Az üzemeltetési terv meghatározásának módja attól függ, hogy a függvényalkalmazás Windowson vagy Linuxon fut-e:

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

További információt a sablonok adattárában található teljes azuredeploy.json fájlban talál.

Az üzemeltetési terv létrehozása

Nem kell explicit módon definiálnia egy használati üzemeltetési terv erőforrását. Ha kihagyja ezt az erőforrásdefiníciót, a rendszer automatikusan létrehoz vagy kijelöl egy csomagot régiónként, amikor maga a függvényalkalmazás-erőforrást hozza létre.

A használati terveket explicit módon definiálhatja egy speciális erőforrástípuskéntserverfarm, amelyet a tulajdonságok és sku a computeMode tulajdonságok értékével Dynamic adhat meg. Ez a példaszakasz bemutatja, hogyan definiálhat explicit módon használati tervet. Az üzemeltetési terv meghatározásának módja attól függ, hogy a függvényalkalmazás Windowson vagy Linuxon fut-e.

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

További információt a sablonok adattárában található teljes azuredeploy.json fájlban talál.

Kubernetes-környezet

Az Azure Functions kódprojektként vagy tárolóalapú függvényalkalmazásként is üzembe helyezhető az Azure Arc-kompatibilis Kubernetesben .

Az alkalmazás létrehozásához és az erőforrások megtervezéséhez már létre kell hoznia egy App Service Kubernetes-környezetet egy Azure Arc-kompatibilis Kubernetes-fürthöz. A cikkben szereplő példák feltételezik, hogy rendelkezik annak az egyéni helynek (customLocationId) és App Service Kubernetes-környezetnek (kubeEnvironmentId) az erőforrás-azonosítójával, amelyre üzembe helyezve van, és amely ebben a példában van beállítva:

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

Mind a helyeknek, mind a terveknek egy extendedLocation mezőn keresztül kell hivatkoznia az egyéni helyre. Ahogy az ebben a csonkolt példában is látható, extendedLocation a következőhöz tartozó társként kindlocationkívül helyezkedik propertiesel:

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

A terverőforrásnak a Kubernetes (K1) értékét SKUkell használnia, a kind mezőnek linux,kubernetesés a reserved tulajdonságnak kell lennie true, mivel linuxos telepítésről van szó. Az egyéni helyazonosítót és kubeEnvironmentProfile.id a Kubernetes-környezetazonosítót is be kell állítaniaextendedLocation, amely a következő példaszakaszhoz hasonlóan nézhet ki:

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

A függvényalkalmazás létrehozása

A függvényalkalmazás erőforrását egy olyan típusú Microsoft.Web/siteskind erőforrás határozza meg, amely legalább a függvényalkalmazást is magában foglalja functionapp.

A függvényalkalmazás-erőforrás definiálásának módja attól függ, hogy Linuxon vagy Windowson üzemel-e:

A Windows rendszeren való futtatáshoz szükséges alkalmazásbeállítások listáját az Alkalmazáskonfiguráció című témakörben találja. Egy Minta Bicep-fájl/Azure Resource Manager-sablonért tekintse meg a Windowsban üzemeltetett függvényalkalmazást egy használati tervsablonban .

A Windows rendszeren való futtatáshoz szükséges alkalmazásbeállítások listáját az Alkalmazáskonfiguráció című témakörben találja.

Feljegyzés

Ha úgy dönt, hogy opcionálisan definiálja a Használati csomagot, akkor be kell állítania a serverFarmId tulajdonságot az alkalmazásban, hogy az a terv erőforrás-azonosítójára mutatjon. Győződjön meg arról, hogy a függvényalkalmazás rendelkezik olyan dependsOn beállítással, amely a tervre is hivatkozik. Ha nem definiált explicit módon egy tervet, létrejön egy ön számára.

Állítsa be az serverFarmId alkalmazás tulajdonságát úgy, hogy az a terv erőforrás-azonosítójára mutatjon. Győződjön meg arról, hogy a függvényalkalmazás rendelkezik olyan dependsOn beállítással, amely a tervre is hivatkozik.

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

A teljes körű példaért tekintse meg ezt a azuredeploy.json sablont.

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

A teljes körű példaért tekintse meg ezt a azuredeploy.json sablont.

Üzembehelyezési források

A Bicep-fájl vagy AZ ARM-sablon opcionálisan egy üzembe helyezést is meghatározhat a függvénykódhoz, amely a következő módszereket tartalmazhatja:

Üzembehelyezési források

A Bicep-fájl vagy AZ ARM-sablon opcionálisan egy zip-alapú üzembe helyezési csomag használatával is meghatározhatja a függvénykód üzembe helyezését.

Ahhoz, hogy az alkalmazás sikeresen üzembe helyezhető legyen az Azure Resource Manager használatával, fontos tisztában lenni az erőforrások Azure-ban való üzembe helyezésének módjával. A legtöbb példában a legfelső szintű konfigurációkat a rendszer a használatával siteConfigalkalmazza. Fontos, hogy ezeket a konfigurációkat a legfelső szinten állítsa be, mivel ezek információt közvetítenek a Functions-futtatókörnyezetbe és az üzembe helyezési motorba. A gyermekerőforrás sourcecontrols/web alkalmazása előtt felső szintű információkra van szükség. Bár ezeket a beállításokat a gyermekszintű config/appSettings erőforrásban is konfigurálhatja, bizonyos esetekben a függvényalkalmazást üzembe kell helyezni az alkalmazás alkalmazása előttconfig/appSettings .

Zip üzembehelyezési csomag

A zip-telepítés ajánlott módja a függvényalkalmazás kódjának üzembe helyezésének. Alapértelmezés szerint a zip-alapú üzembe helyezést használó függvények magukban az üzembe helyezési csomagban futnak. További információkért, beleértve az üzembehelyezési csomag követelményeit, tekintse meg az Azure Functions Zip-alapú üzembe helyezését. Erőforrás-üzembe helyezés automatizálása esetén hivatkozhat az .zip üzembehelyezési csomagra a Bicep- vagy ARM-sablonban.

Ha zip-alapú üzembe helyezést szeretne használni a sablonban, állítsa be a WEBSITE_RUN_FROM_PACKAGE beállítást az alkalmazásban 1 , és adja meg az erőforrásdefiníciót /zipDeploy .

Egy Linux-alapú használatalapú csomag esetében állítsa be az üzembehelyezési csomag URI-ját közvetlenül a beállításban, ahogyan az ebben a WEBSITE_RUN_FROM_PACKAGE példasablonban látható.

Ez a példa egy zip-alapú üzembehelyezési forrást ad hozzá egy meglévő alkalmazáshoz:

{
  "$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')]"
      }
    }
  ]
}

A zip-alapú üzembehelyezési erőforrások sablonba való felvételekor tartsa szem előtt az alábbi szempontokat:

  • A Linuxon futó fogyasztási csomagok nem támogatják WEBSITE_RUN_FROM_PACKAGE = 1a . Ehelyett közvetlenül a beállításban kell beállítania az üzembehelyezési csomag URI-ját WEBSITE_RUN_FROM_PACKAGE . További információ: WEBSITE_RUN_FROM_PACKAGE. Egy példasablont a Linuxon üzemeltetett függvényalkalmazás egy használatalapú csomagban talál.
  • A packageUri függvények által elérhető helynek kell lennie. Fontolja meg az Azure Blob Storage használatát közös hozzáférésű jogosultságkóddal (SAS). Az SAS lejárta után a Functions már nem tudja elérni a megosztást az üzembe helyezésekhez. Az SAS újragenerálásakor ne felejtse el frissíteni a WEBSITE_RUN_FROM_PACKAGE beállítást az új URI-értékkel.

  • URI beállításakor WEBSITE_RUN_FROM_PACKAGE manuálisan kell szinkronizálnia az eseményindítókat.

  • A beállítások hozzáadásakor vagy frissítésekor mindig állítsa be az összes szükséges alkalmazásbeállítást a appSettings gyűjteményben. A frissítés eltávolítja a nem explicit módon beállított meglévő beállításokat. További információ: Alkalmazáskonfiguráció.

  • A Functions nem támogatja a webes üzembe helyezést (msdeploy) a csomagtelepítésekhez. Ehelyett zip üzembe helyezést kell használnia az üzembehelyezési folyamatokban és az automatizálásban. További információ: Zip deployment for Azure Functions.

Távoli buildek

Az üzembe helyezési folyamat feltételezi, hogy a használt .zip fájl vagy egy zip-telepítés egy használatra kész alkalmazást tartalmaz. Ez azt jelenti, hogy alapértelmezés szerint nem futnak testreszabások.

Vannak azonban olyan forgatókönyvek, amelyek megkövetelik az alkalmazás távoli újraépítését, például amikor Linux-specifikus csomagokat kell lekérnie a Pythonban, vagy Node.js windowsos számítógépen fejlesztett alkalmazásokat. Ebben az esetben úgy konfigurálhatja a Functionst, hogy távoli buildet hajtson végre a kódon a zip üzembe helyezése után.

A távoli build kérésének módja attól függ, hogy milyen operációs rendszert helyez üzembe:

Amikor egy alkalmazást üzembe helyeznek a Windowsban, a rendszer nyelvspecifikus parancsokat futtat (például dotnet restore C#-alkalmazásokhoz vagy npm install Node.js-alkalmazásokhoz).

A folyamatos integrációhoz szükséges buildelési folyamatok engedélyezéséhez adja hozzá SCM_DO_BUILD_DURING_DEPLOYMENT=true az alkalmazásbeállításokat az üzembehelyezési kódhoz, és távolítsa el a WEBSITE_RUN_FROM_PACKAGE teljes elemet.

Linux-tárolók

Ha tárolóalapú függvényalkalmazást helyez üzembe egy Azure Functions Premium- vagy Dedikált Azure Functions-csomagban, a következőt kell tennie:

További információ: Alkalmazáskonfiguráció.

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

Tárolóalapú függvények Azure Container Appsben való üzembe helyezésekor a sablonnak a következőnek kell lennie:

  • Állítsa a kind mezőt a következő értékre functionapp,linux,container,azurecontainerapps: .
  • Állítsa a managedEnvironmentId helytulajdonságot a Container Apps-környezet teljes URI-jára.
  • Adjon hozzá erőforráshivatkozást a webhely gyűjteményéhez dependsOn , amikor a webhelyvel egy időben hoz létre erőforrást Microsoft.App/managedEnvironments .

A privát tárolóregisztrációs adatbázisból egy meglévő Container Apps-környezetbe üzembe helyezett tárolóalapú függvényalkalmazás definíciója az alábbi példához hasonlóan nézhet ki:

"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')]"
    }
  }
]

Ha függvényeket helyez üzembe az Azure Arcban, a függvényalkalmazás-erőforrás mezőjéhez kind beállított érték az üzembe helyezés típusától függ:

Üzemelő példány típusa kind mezőérték
Csak kódalapú üzembe helyezés functionapp,linux,kubernetes
Tárolók üzembe helyezése functionapp,linux,kubernetes,container

Azt is be kell állítania, ahogyan az customLocationIdüzemeltetési terv erőforrásához tette.

A .NET 6 gyorsútmutató-rendszerképet használó tárolóalapú függvényalkalmazás definíciója a következő példához hasonlóan nézhet ki:

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

Alkalmazáskonfiguráció

A Functions a következő lehetőségeket kínálja a függvényalkalmazás azure-beli konfigurálásához:

Konfiguráció Microsoft.Web/sites Tulajdonság
Webhely beállításai siteConfig
Alkalmazásbeállítások siteConfig.appSettings Gyűjtemény

A tulajdonsághoz siteConfig a következő webhelybeállítások szükségesek:

Ezek az alkalmazásbeállítások szükségesek (vagy ajánlottak) egy adott operációs rendszerhez és üzemeltetési beállításhoz:

Ezek az alkalmazásbeállítások szükségesek a tárolótelepítésekhez:

Ezekre a beállításokra csak privát tárolóregisztrációs adatbázisból való üzembe helyezéskor van szükség:

Tartsa szem előtt ezeket a szempontokat a webhely- és alkalmazásbeállítások Bicep-fájlok vagy ARM-sablonok használatával történő használatakor:

  • Fontos szempontokat kell figyelembe vennie, amikor automatikus üzembe helyezést kell beállítania WEBSITE_CONTENTSHARE . Részletes útmutatásért tekintse meg a WEBSITE_CONTENTSHARE hivatkozást.
  • Az alkalmazásbeállításokat mindig a Microsoft.Web/sites létrehozott erőforrás gyűjteményeként siteConfig/appSettings kell meghatároznia, ahogyan az ebben a cikkben található példákban is látható. Ez biztosítja, hogy a függvényalkalmazás futtatásához szükséges beállítások elérhetők legyenek a kezdeti indításkor.

  • Ha sablonokkal adja hozzá vagy frissíti az alkalmazásbeállításokat, győződjön meg arról, hogy az összes meglévő beállítást belefoglalja a frissítésbe. Ezt azért kell megtennie, mert az alapul szolgáló frissítési REST API-hívások felülírják a teljes /config/appsettings erőforrást. Ha eltávolítja a meglévő beállításokat, a függvényalkalmazás nem fog futni. Az egyes alkalmazásbeállítások programozott frissítéséhez ehelyett az Azure CLI, az Azure PowerShell vagy az Azure Portal használatával végezheti el ezeket a módosításokat. További információ: Az alkalmazásbeállítások használata.

Ponttelepítések

A Functions lehetővé teszi a kód különböző verzióinak üzembe helyezését a függvényalkalmazás egyedi végpontjaira. Ez megkönnyíti a függvényfrissítések fejlesztését, érvényesítését és üzembe helyezését anélkül, hogy az hatással lenne az éles környezetben futó függvényekre. Az üzembehelyezési pontok a Azure-alkalmazás Szolgáltatás egyik funkciója. A rendelkezésre álló tárolóhelyek száma az üzemeltetési tervtől függ. További információ: Azure Functions üzembehelyezési pontok függvényei.

A ponterőforrás ugyanúgy van definiálva, mint egy függvényalkalmazás-erőforrás (Microsoft.Web/sites), de ehelyett az erőforrás-azonosítót Microsoft.Web/sites/slots használja. A Prémium csomagban éles és előkészítési pontot egyaránt létrehozó üzembe helyezést (Bicep- és ARM-sablonokban is) lásd : Azure Function App with a Deployment Slot.

A felcserélés sablonok használatával történő végrehajtásáról a Resource Manager-sablonok automatizálása című témakörben olvashat.

Tartsa szem előtt a következő szempontokat a ponttelepítések használatakor:

  • Ne állítsa be explicit módon a beállítást az WEBSITE_CONTENTSHARE üzembehelyezési pont definíciójában. Ez a beállítás akkor jön létre, ha az alkalmazás az üzembehelyezési ponton jön létre.

  • A pontok felcserélésekor egyes alkalmazásbeállítások "ragadósnak" minősülnek, mivel azok a ponttal maradnak, és nem a felcserélt kóddal. Ezt a pontbeállítást úgy határozhatja meg, hogy belefogadja "slotSetting":true a sablon adott alkalmazásbeállítás-definíciójához. További információ: Beállítások kezelése.

Biztonságos üzemelő példányok

A függvényalkalmazást olyan üzembe helyezésben hozhatja létre, amelyben egy vagy több erőforrást biztonságossá tettek a virtuális hálózatokkal való integrációval. A függvényalkalmazás virtuális hálózati integrációját egy Microsoft.Web/sites/networkConfig erőforrás határozza meg. Ez az integráció a hivatkozott függvényalkalmazástól és a virtuális hálózati erőforrásoktól is függ. A függvényalkalmazás más privát hálózati erőforrásoktól is függhet, például privát végpontoktól és útvonalaktól. További információkért tekintse meg az Azure Functions hálózatkezelési lehetőségeit.

Biztonságos tárfiókot használó központi telepítés létrehozásakor explicit módon kell beállítania a WEBSITE_CONTENTSHARE beállítást, és létre kell hoznia a beállításban elnevezett fájlmegosztási erőforrást. Győződjön meg arról, hogy a Microsoft.Storage/storageAccounts/fileServices/shares példában (ARM-sablon|Bicep-fájl) látható érték WEBSITE_CONTENTSHAREalapján hoz létre erőforrást. A webhelytulajdonságot vnetContentShareEnabled is igaz értékre kell állítania.

Feljegyzés

Ha ezek a beállítások nem részei egy biztonságos tárfiókot használó üzembe helyezésnek, a következő hibaüzenet jelenik meg az üzembe helyezés ellenőrzése során: Could not access storage account using provided connection string.

Ezek a projektek Bicep- és ARM-sablonpéldákat is kínálnak a függvényalkalmazások virtuális hálózaton való üzembe helyezésére, beleértve a hálózati hozzáférés korlátozásait is:

Korlátozott forgatókönyv Leírás
Függvényalkalmazás létrehozása virtuális hálózati integrációval A függvényalkalmazás egy virtuális hálózatban jön létre, amelyben teljes hozzáféréssel rendelkezik az adott hálózat erőforrásaihoz. A függvényalkalmazás bejövő és kimenő hozzáférése nincs korlátozva. További információ: Virtuális hálózat integrációja.
Biztonságos tárfiókhoz hozzáférő függvényalkalmazás létrehozása A létrehozott függvényalkalmazás egy biztonságos tárfiókot használ, amelyet a Functions privát végpontok használatával ér el. További információért lásd: Tárfiók korlátozása virtuális hálózatra.
Privát végpontokat használó függvényalkalmazás és tárfiók létrehozása A létrehozott függvényalkalmazás csak privát végpontokkal érhető el, és privát végpontokat használ a tárolási erőforrások eléréséhez. További információ: Privát végpontok.

Korlátozott hálózati beállítások

Akkor is szükség lehet ezekre a beállításokra, ha a függvényalkalmazás hálózati korlátozásokkal rendelkezik:

Beállítás Érték Leírás
WEBSITE_CONTENTOVERVNET 1 Alkalmazásbeállítás, amely lehetővé teszi a függvényalkalmazás skálázását, ha a tárfiók virtuális hálózatra van korlátozva. További információért lásd: Tárfiók korlátozása virtuális hálózatra.
vnetrouteallenabled 1 Helybeállítás, amely a függvényalkalmazásból érkező összes forgalmat a virtuális hálózat használatára kényszeríti. További információ: Regionális virtuális hálózat integrációja. Ez a webhelybeállítás felülírja az alkalmazás beállításait WEBSITE_VNET_ROUTE_ALL.

A hálózati korlátozások szempontjai

Ha a privát végpontokon keresztül korlátozza a tárfiókhoz való hozzáférést, nem férhet hozzá a tárfiókhoz a portálon vagy a virtuális hálózaton kívüli eszközökön keresztül. Az alapértelmezett hálózati hozzáférési szabály kezelésével hozzáférést adhat a tárfiók biztonságos IP-címéhez vagy virtuális hálózatához.

A sablon létrehozása

A Bicep- vagy ARM-sablonokkal rendelkező szakértők egy egyszerű szövegszerkesztővel manuálisan kódohatják az üzemelő példányokat. A többiek számára többféleképpen is egyszerűbbé teheti a fejlesztési folyamatot:

  • Visual Studio Code: Vannak olyan bővítmények, amelyek segítenek a Bicep-fájlok és az ARM-sablonok használatában. Ezekkel az eszközökkel meggyőződhet arról, hogy a kód helyes, és alapvető ellenőrzést biztosítanak.

  • Azure Portal: Amikor létrehozza a függvényalkalmazást és a kapcsolódó erőforrásokat a portálon, az utolsó Áttekintés + létrehozás képernyő egy Sablon letöltése automatizálási hivatkozással rendelkezik.

    Töltse le a sablonhivatkozást az Azure Functions létrehozási folyamatából az Azure Portalon.

    Ez a hivatkozás a portálon kiválasztott beállítások alapján létrehozott ARM-sablont mutatja be. Bár ez a sablon kissé összetett lehet, amikor sok új erőforrással rendelkező függvényalkalmazást hoz létre, jó referenciaként szolgálhat az ARM-sablon megjelenéséhez.

A sablon ellenőrzése

Amikor manuálisan hozza létre az üzembehelyezési sablonfájlt, fontos ellenőrizni a sablont az üzembe helyezés előtt. Az összes üzembehelyezési módszer ellenőrzi a sablon szintaxisát, és hibaüzenetet validation failed jelenít meg az alábbi JSON formátumú példában látható módon:

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

A következő módszerekkel ellenőrizheti a sablont az üzembe helyezés előtt:

A következő Azure-erőforráscsoport üzembe helyezési v2 feladata , amely deploymentMode: 'Validation' arra utasítja az Azure Pipelinest, hogy ellenőrizze a sablont.

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

Teszterőforrás-csoportot is létrehozhat az előzetes és üzembehelyezési hibák megkereséséhez.

A sablon üzembe helyezése

A Bicep-fájl és -sablon üzembe helyezéséhez az alábbi módszerek bármelyikét használhatja:

Üzembe helyezés az Azure-ban gomb

Feljegyzés

Ez a módszer jelenleg nem támogatja a Bicep-fájlok üzembe helyezését.

Cserélje le <url-encoded-path-to-azuredeploy-json> a fájl nyers elérési útjának URL-címmel kódolt verziójára a azuredeploy.json GitHubon.

Íme egy példa, amely a markdownt használja:

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

Íme egy példa, amely HTML-t használ:

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

Üzembe helyezés a PowerShell használatával

Az alábbi PowerShell-parancsok létrehoznak egy erőforráscsoportot, és üzembe helyeznek egy Bicep-fájlt/ARM-sablont, amely létrehoz egy függvényalkalmazást a szükséges erőforrásokkal. A helyi futtatáshoz telepítve kell lennie az Azure PowerShellnek . Futtassa Connect-AzAccount a bejelentkezést.

# 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

Az üzembe helyezés teszteléséhez használhat egy ehhez hasonló sablont, amely egy használatalapú csomagban hoz létre függvényalkalmazást Windows rendszeren.

Következő lépések

További információ az Azure Functions fejlesztéséről és konfigurálásáról.