Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
K automatizaci nasazování aplikace funkcí použijte soubor Bicep nebo šablonu Azure Resource Manageru (šablona ARM). Během nasazování můžete použít existující prostředky Azure nebo vytvořit nové.
Díky automatizaci nasazení můžete do produkčních aplikací využít jak infrastrukturu jako kód (IaC), tak i kontinuální integraci a nasazování (CI/CD):
- Konzistence: Definujte infrastrukturu v kódu, abyste zajistili konzistentní nasazení napříč prostředími.
- Správa verzí: Sledujte změny konfigurace infrastruktury a aplikací ve správě zdrojového kódu spolu s kódem projektu.
- Automatizace: Automatizujte nasazení, které snižuje ruční chyby a zkracuje proces vydávání.
- Škálovatelnost: Snadno replikujte infrastrukturu pro více prostředí, jako je vývoj, testování a produkční prostředí.
- Zotavení po havárii: Rychle znovu vytvořte infrastrukturu po selháních nebo během migrace.
V tomto článku se dozvíte, jak automatizovat vytváření Azure prostředků a konfigurací nasazení pro Azure Functions. Další informace o průběžném nasazování kódu projektu najdete v tématu Kontinuózní nasazení pro Azure Functions.
Kód šablony pro vytvoření požadovaných prostředků Azure závisí na požadovaných možnostech hostování vaší aplikace funkcí. Tento článek podporuje následující možnosti hostování:
| Možnost hostování | Typ nasazení | Ukázkové šablony |
|---|---|---|
| Plán flexibilní spotřeby | Code-only |
Bicep ARM šablona Terraform |
| Plán Premium | Kód | Kontejner |
Bicep ARM šablona |
| Vyhrazený plán | Kód | Kontejner |
Bicep ARM šablona |
| Azure Container Apps | Container-only | Bicep |
| Plán spotřeby (starší verze) | Code-only |
Bicep ARM šablona |
Pro nové aplikace funkcí bez serveru použijte plán Flex Consumption.
Plán Consumption je starší plán hostování. U existujících aplikací migrujte do plánu Flex Consumption.
Nezapomeňte vybrat plán hostování v horní části článku.
Important
Aplikace funkcí stále spouštějí modul runtime verze v3 s ukončenou podporou na Linuxu v plánu spotřeby přestanou běžet po 30. září 2026. Pokud se chcete vyhnout přerušení služeb, migrujte aplikaci do modulu runtime v4.
Možnost hostovat funkční aplikace na Linuxu v plánu Consumption bude vyřazena z provozu 30. září 2028. Plán spotřeby pro Linux již nedostává žádné nové funkce ani jazykové verze. Aplikace spuštěné na Windows v plánu Consumption nejsou aktuálně ovlivněné. Migrujte své aplikace do plánu Flex Consumption před datem vyřazení.
Při používání tohoto článku mějte na paměti tyto aspekty:
Neexistuje žádný kanonický způsob strukturování šablony ARM.
Nasazení Bicep můžete modularizovat do několika souborů Bicep a ověřených modulů Azure (AVM).
Tento článek předpokládá, že máte základní znalosti vytváření Bicep souborů nebo vytváření šablon Azure Resource Manager.
- Příklady se zobrazují jako jednotlivé části pro konkrétní prostředky. Pokud chcete najít širokou škálu úplných příkladů Bicep souborů a šablon ARM, podívejte se na příklady nasazení aplikace funkce.
- Příklady se zobrazují jako jednotlivé části pro konkrétní prostředky. V případě Bicep se zobrazí moduly Azure ověřené (AVM), pokud jsou k dispozici. Širokou škálu kompletních příkladů souborů Bicep a šablon ARM najdete v těchto příkladech nasazení aplikací Flex Consumption.
- Příklady se zobrazují jako jednotlivé části pro konkrétní prostředky.
Požadované prostředky
Musíte vytvořit nebo nakonfigurovat tyto prostředky pro nasazení hostované Azure Functions:
| Resource | Requirement | Odkaz na syntaxi a vlastnosti |
|---|---|---|
| Účet úložiště | Required | Microsoft. Storage/storageAccounts |
| Komponenta Application Insights | Recommended | Microsoft.Insights/components* |
| Plán hostování | Required | Microsoft. Web/serverfarms |
| Aplikace funkcí | Required | Microsoft.Web/sites |
Musíte vytvořit nebo nakonfigurovat tyto prostředky pro nasazení hostované Azure Functions:
| Resource | Requirement | Odkaz na syntaxi a vlastnosti |
|---|---|---|
| Účet úložiště | Required | Microsoft. Storage/storageAccounts |
| Komponenta Application Insights | Recommended | Microsoft.Insights/components* |
| Aplikace funkcí | Required | Microsoft.Web/sites |
Nasazení hostované Azure Container Apps se obvykle skládá z těchto prostředků:
| Resource | Requirement | Odkaz na syntaxi a vlastnosti |
|---|---|---|
| Účet úložiště | Required | Microsoft. Storage/storageAccounts |
| Komponenta Application Insights | Recommended | Microsoft.Insights/components* |
| Spravované prostředí | Required | Microsoft.App/managedEnvironments |
| Aplikace funkcí | Required | Microsoft.Web/sites |
*Pokud ještě nemáte pracovní prostor služby Log Analytics, který může vaše instance Application Insights používat, musíte tento prostředek také vytvořit.
Když nasadíte více prostředků do jednoho souboru Bicep nebo šablony ARM, je důležité pořadí vytvoření prostředků. 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 Zdrojové závislosti v Bicep.
Prerequisites
- Tyto příklady fungují v kontextu existující skupiny prostředků.
- Aplikace Application Insights a úložiště logů vyžadují existující pracovní prostor Služby Azure Log Analytics. Pracovní prostory můžete sdílet mezi službami. Pokud chcete zvýšit výkon, vytvořte pracovní prostor v každé geografické oblasti. Příklad vytvoření pracovního prostoru Log Analytics najdete v tématu Vytvoření pracovního prostoru Log Analytics. Plně kvalifikované ID prostředku pracovního prostoru najdete na stránce pracovního prostoru na portálu Azure portal v části Nastavení>Vlastnosti>ID prostředku.
- 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í.
Vytvoření účtu úložiště
Všechny aplikace funkcí vyžadují účet úložiště Azure. Potřebujete účet pro všeobecné použití, který podporuje objekty blob, tabulky, fronty a soubory. Další informace najdete v dokumentaci požadavky na účet úložiště pro Azure Functions.
Important
Účet úložiště slouží k ukládání důležitých dat aplikace, někdy včetně samotného kódu aplikace. Omezení přístupu z jiných aplikací a uživatelů k účtu úložiště by mělo být prioritou.
V této ukázkové části se vytvoří účet úložiště úrovně Standard pro obecné účely verze 2:
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
properties: {
supportsHttpsTrafficOnly: true
defaultToOAuthAuthentication: true
allowBlobPublicAccess: false
minimumTlsVersion: 'TLS1_2'
}
}
Další kontext najdete v kompletním souboru main.bicep v úložišti šablon.
Další kontext najdete v kompletním souboru storage-PrivateEndpoint.bicep v ukázkovém úložišti.
Funkční aplikace potřebuje připojení k tomuto účtu úložiště. Nakonfigurujte toto připojení pomocí nastavení AzureWebJobsStorage. Další informace naleznete v tématu Konfigurace aplikace.
Tip
Kvůli lepšímu zabezpečení přidejte allowSharedKeyAccess: false do vlastností účtu úložiště a místo připojovacích řetězců používejte připojení založená na spravovaných identitách. Příklady plánů Flex Consumption v tomto článku používají tento přístup, včetně AzureWebJobsStorage__* nastavení založených na identitě a spravované identity přiřazené systémem. Další informace najdete v části Připojení k hostitelskému úložišti s využitím identity.
Tip
Kvůli lepšímu zabezpečení nastavte v účtu úložiště allowSharedKeyAccess na false a místo připojovacích řetězců používejte připojení spravovaná na základě identity. Další informace najdete v části Připojení k hostitelskému úložišti s využitím identity.
Important
Plány Elastic Premium a Consumption používají službu Azure Files ke sdílení obsahu a Služba Azure Files v současné době nepodporuje připojení založená na spravovaných identitách. Toto omezení znamená, že tyto plány vyžadují přístup k účtu úložiště pomocí sdíleného klíče, takže nenastavujte allowSharedKeyAccess na false. Pokud musíte použít připojovací řetězce, uložte je ve službě Azure Key Vault a místo přímého ukládání klíčů použijte odkazy na Key Vault v nastavení aplikace. Pokud chcete odebrat závislost Azure Files, přečtěte si téma Vytvoření aplikace bez služby Azure Files.
Kontejner pro nasazení
Pokud chcete nasadit do aplikace spuštěné v plánu Flex Consumption, potřebujete jako zdroj nasazení kontejner ve službě Azure Blob Storage. Můžete použít buď výchozí účet úložiště, nebo zadat samostatný účet úložiště. Další informace naleznete v tématu Konfigurace nastavení nasazení.
Tento účet nasazení musíte nakonfigurovat při vytváření aplikace, včetně konkrétního kontejneru používaného pro nasazení. Další informace o konfiguraci nasazení najdete v tématu Zdroje nasazení.
Tento příklad ukazuje, jak vytvořit kontejner v účtu úložiště:
}
// Azure Functions Flex Consumption
module functionApp 'br/public:avm/res/web/site:0.16.0' = {
name: 'functionapp'
scope: rg
params: {
kind: 'functionapp,linux'
name: functionAppName_resolved
location: location
tags: union(tags, { 'azd-service-name': 'api' })
serverFarmResourceId: appServicePlan.outputs.resourceId
managedIdentities: {
systemAssigned: true
}
functionAppConfig: {
deployment: {
storage: {
type: 'blobContainer'
value: '${storage.outputs.primaryBlobEndpoint}${deploymentStorageContainerName}'
authentication: {
type: 'SystemAssignedIdentity'
}
Tento příklad ukazuje, jak pomocí AVM pro úložné účty vytvořit kontejner úložiště blobů a zároveň úložný účet. Informace o fragmentu kódu v kontextu najdete v příkladu nasazení.
Nakonfigurujte další nastavení nasazení pomocí samotné aplikace.
Povolení protokolů úložiště
Vzhledem k tomu, že se účet úložiště používá pro důležitá data aplikace funkcí, monitorujte účet pro úpravy tohoto obsahu. Pokud chcete monitorovat účet úložiště, nakonfigurujte protokoly prostředků služby Azure Monitor pro Azure Storage. V této ukázkové části se jako cíl těchto protokolů používá pracovní prostor Log Analytics s názvem myLogAnalytics.
resource blobService 'Microsoft.Storage/storageAccounts/blobServices@2023-05-01' existing = {
name:'default'
parent:storageAccountName
}
resource storageDataPlaneLogs 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
name: '${storageAccountName}-logs'
scope: blobService
properties: {
workspaceId: myLogAnalytics.id
logs: [
{
category: 'StorageWrite'
enabled: true
}
]
metrics: [
{
category: 'Transaction'
enabled: true
}
]
}
}
Stejný pracovní prostor můžete použít pro prostředek Application Insights definovaný později. Další informace, včetně toho, jak s těmito protokoly pracovat, najdete v tématu Monitoring Azure Storage.
Vytvořte Application Insights
K monitorování běhů Function App použijte Application Insights. Application Insights teď vyžaduje pracovní prostor Azure Log Analytics, který se dá sdílet. Tyto příklady předpokládají, že používáte existující pracovní prostor a máte plně kvalifikované ID prostředku pro daný pracovní prostor. Další informace najdete v pracovním prostoru Azure Log Analytics.
V této ukázkové části definujte prostředek Application Insights s typem Microsoft.Insights/components a druhem web:
resource applicationInsight 'Microsoft.Insights/components@2020-02-02' = {
name: applicationInsightsName
location: appInsightsLocation
tags: tags
kind: 'web'
properties: {
Application_Type: 'web'
WorkspaceResourceId: '<FULLY_QUALIFIED_RESOURCE_ID>'
}
}
Další kontext najdete v kompletním souboru main.bicep v úložišti šablon.
Připojení k funkční aplikaci musíte poskytnout prostřednictvím APPLICATIONINSIGHTS_CONNECTION_STRING nastavení aplikace. Další informace naleznete v tématu Konfigurace aplikace.
Příklady v tomto článku získají hodnotu řetězce připojení pro vytvořenou instanci. Starší verze mohly místo toho použít APPINSIGHTS_INSTRUMENTATIONKEY k nastavení klíče instrumentace, což se už nedoporučuje.
Vytvoření plánu hostování
Musíte explicitně definovat plán hostování pro aplikace hostované v plánu Flex Consumption služby Azure Functions, plánu Premium nebo plánu Dedicated (App Service).
Flex Consumption je plán hostování založený na Linuxu, který staví na platíte za to, co používáte bezserverový fakturační model. Plán podporuje privátní sítě, výběr velikosti paměti instance a vylepšenou podporu spravované identity.
Plán Flex Consumption je speciální typ serverfarm prostředku. Můžete to určit pomocí hodnoty FC1 pro vlastnost Name ve vlastnosti sku s hodnotou tierFlexConsumption.
V této ukázkové části se vytvoří plán Flex Consumption:
scaleAndConcurrency: {
maximumInstanceCount: maximumInstanceCount
instanceMemoryMB: instanceMemoryMB
}
runtime: {
name: functionAppRuntime
version: functionAppRuntimeVersion
}
}
siteConfig: {
alwaysOn: false
}
configs: [{
name: 'appsettings'
properties:{
Tento příklad používá AVM pro App Service plány. Informace o fragmentu kódu v kontextu najdete v příkladu nasazení.
Vzhledem k tomu, že plán Flex Consumption aktuálně podporuje pouze Linux, musíte také nastavit reserved vlastnost na true.
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 Premium pro Azure Functions.
Plán Premium je speciální typ serverfarm prostředku. Můžete ho zadat buď pomocí EP1, EP2, nebo EP3 pro hodnotu vlastnosti Name ve vlastnosti sku. Způsob, jakým definujete plán hostování služby Functions, závisí na tom, jestli vaše aplikace funkcí běží na Windows nebo v Linuxu. Tento příkladový oddíl vytvoří EP1 plán:
resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: hostingPlanName
location: location
sku: {
name: 'EP1'
tier: 'ElasticPremium'
family: 'EP'
}
kind: 'elastic'
properties: {
maximumElasticWorkerCount: 20
}
}
Další kontext najdete v kompletním souboru main.bicep 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 funkční aplikace na vyhrazených virtuálních počítačích v úrovních Basic, Standard a Premium v plánech služby App Service, podobně jako u webových aplikací. Více informací najdete ve specifickém plánu.
Ukázkovou šablonu souboru Bicep nebo Azure Resource Manager najdete v Aplikace Function na plánu služby Azure App 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. Pro seznam podporovaných názvů plánů se podívejte na nastavení --sku v az appservice plan create, kde najdete aktuální seznam 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ěží na Windows nebo v Linuxu:
resource hostingPlanName 'Microsoft.Web/serverfarms@2024-04-01' = {
name: hostingPlanName
location: location
sku: {
tier: 'Standard'
name: 'S1'
size: 'S1'
family: 'S'
capacity: 1
}
}
Další kontext najdete v kompletním souboru main.bicep v úložišti šablon.
Vytvoření plánu hostování
Nemusíte explicitně definovat prostředek plánu hostování typu Consumption. Když tuto definici prostředku přeskočíte, portál automaticky vytvoří nebo vybere plán na základě jednotlivých oblastí při vytváření samotného prostředku aplikace funkcí.
Plán Consumption můžete explicitně definovat jako speciální typ serverfarm prostředku. Nastavte vlastnosti computeMode a sku na Dynamic. V této části příkladu vám ukáže, jak explicitně definovat plán spotřeby. Způsob, jakým definujete plán hostování, závisí na tom, jestli vaše aplikace funkcí běží na Windows nebo v Linuxu.
resource hostingPlan 'Microsoft.Web/serverfarms@2024-04-01' = {
name: hostingPlanName
location: location
sku: {
name: 'Y1'
tier: 'Dynamic'
size: 'Y1'
family: 'Y'
capacity: 0
}
properties: {
computeMode: 'Dynamic'
}
}
Další kontext najdete v kompletním souboru main.bicep v úložišti šablon.
Vytvořte funkční aplikaci
Definujte prostředek aplikace funkcí jako prostředek typu Microsoft.Web/sites s kind vlastností, která zahrnuje functionapp.
Způsob, jakým definujete prostředek aplikace funkcí, závisí na tom, jestli hostujete v Linuxu nebo ve Windows:
Seznam nastavení aplikace vyžadovaných při spuštění na Windows najdete v tématu Konfigurace aplikace. Pro ukázkový soubor Bicep nebo šablonu Azure Resource Manageru se podívejte na šablonu aplikace funkcí hostované ve Windows v plánu Consumption.
Seznam nastavení aplikace vyžadovaných při spuštění na Windows najdete v tématu Konfigurace aplikace.
Flex Consumption nahrazuje mnoho standardních nastavení aplikací a vlastností konfigurace lokality používaných v nasazeních Bicep a šablon ARM. Další informace naleznete v tématu Konfigurace aplikace.
AzureWebJobsStorage__blobServiceUri: 'https://${storage.outputs.name}.blob.${environment().suffixes.storage}'
AzureWebJobsStorage__queueServiceUri: 'https://${storage.outputs.name}.queue.${environment().suffixes.storage}'
AzureWebJobsStorage__tableServiceUri: 'https://${storage.outputs.name}.table.${environment().suffixes.storage}'
// Application Insights settings are always included
APPLICATIONINSIGHTS_CONNECTION_STRING: applicationInsights.outputs.connectionString
APPLICATIONINSIGHTS_AUTHENTICATION_STRING: 'Authorization=AAD'
}
}]
}
}
// Consolidated Role Assignments
module rbacAssignments 'rbac.bicep' = {
name: 'rbacAssignments'
scope: rg
params: {
storageAccountName: storage.outputs.name
appInsightsName: applicationInsights.outputs.name
managedIdentityPrincipalId: functionApp.outputs.?systemAssignedMIPrincipalId ?? ''
userIdentityPrincipalId: principalId
allowUserIdentityPrincipal: !empty(principalId)
}
}
// Outputs
output AZURE_LOCATION string = location
output AZURE_TENANT_ID string = tenant().tenantId
output AZURE_FUNCTION_NAME string = functionApp.outputs.name
output APPLICATIONINSIGHTS_CONNECTION_STRING string = applicationInsights.outputs.connectionString
Tento příklad používá AVM pro aplikace funkcí. Informace o fragmentu kódu v kontextu najdete v příkladu nasazení.
Note
Pokud se rozhodnete volitelně definovat plán typu Consumption, musíte nastavit vlastnost serverFarmId v aplikaci tak, aby odkazovala na ID prostředku plánu. Ujistěte se, že aplikační funkce má dependsOn nastavení, které také odkazuje na plán. Pokud jste plán explicitně nedefinovali, vytvoří se pro vás.
Nastavte vlastnost serverFarmId v aplikaci tak, aby odkazovala na ID prostředku plánu. Ujistěte se, že aplikační funkce má dependsOn nastavení, které také odkazuje na plán.
resource functionAppName_resource 'Microsoft.Web/sites@2024-04-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
serverFarmId: hostingPlanName.id
siteConfig: {
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'WEBSITE_CONTENTSHARE'
value: toLower(functionAppName)
}
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: 'node'
}
{
name: 'WEBSITE_NODE_DEFAULT_VERSION'
value: '~20'
}
]
}
}
}
Úplný kompletní příklad najdete v tomto souboru main.bicep.
resource functionApp 'Microsoft.Web/sites@2024-04-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
serverFarmId: hostingPlan.id
siteConfig: {
alwaysOn: true
appSettings: [
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};EndpointSuffix=${environment().suffixes.storage};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: 'node'
}
{
name: 'WEBSITE_NODE_DEFAULT_VERSION'
value: '~20'
}
]
}
}
}
Úplný kompletní příklad najdete v tomto souboru main.bicep.
Zdroje nasazení
linuxFxVersion Nastavení webu použijte k vyžádání konkrétního kontejneru Linuxu, který se má nasadit do vaší aplikace při jeho vytváření. Pro přístup k imagím v privátním úložišti potřebujete další nastavení. Další informace naleznete v tématu Konfigurace aplikace.
Important
Když vytváříte vlastní kontejnery, musíte zachovat základní image kontejneru aktualizovanou na nejnovější podporovanou základní image. Podporované základní image pro Azure Functions jsou specifické pro jazyk. Podívejte se na základní image úložiště Azure Functions.
Tým Functions se zavazuje publikovat měsíční aktualizace těchto základních imagí. Mezi pravidelné aktualizace patří nejnovější aktualizace minoritní verze a bezpečnostní opravy pro runtime Functions a jazyky. Kontejner byste měli pravidelně aktualizovat z nejnovější základní image a znovu nasadit aktualizovanou verzi kontejneru. Pro více informací, viz Údržba vlastních kontejnerů.
Soubor Bicep nebo šablona ARM můžou také volitelně definovat nasazení vašeho kódu funkce. Toto nasazení může zahrnovat tyto metody:
Plán Flex Consumption udržuje kód vašeho projektu v zip-komprimovaném balíčku v kontejneru úložiště typu blob, který se označuje jako kontejner nasazení. Můžete nakonfigurovat účet úložiště i kontejner použitý pro nasazení. Další informace najdete v tématu Nasazení.
K publikování balíčku kódu do kontejneru nasazení musíte použít jedno nasazení . Během nasazení šablony ARM nebo Bicep můžete tento krok provést definováním zdroje balíčku , který používá /onedeploy rozšíření. Pokud se rozhodnete balíček místo toho přímo nahrát do kontejneru, balíček se automaticky nenasadí.
Kontejner pro nasazení
Nastavte konkrétní účet úložiště a kontejner používaný pro nasazení, metodu ověřování a přihlašovací údaje v functionAppConfig.deployment.storage elementu properties lokality. Kontejner a všechna nastavení aplikace musí existovat při vytváření aplikace. Příklad, jak vytvořit kontejner pro úložiště, najdete v části Kontejner nasazení.
Tento příklad používá systémem přiřazenou spravovanou identitu pro přístup k určenému kontejneru blob úložiště, který je vytvořen jinde během nasazení.
// Consolidated Role Assignments
module rbacAssignments 'rbac.bicep' = {
name: 'rbacAssignments'
scope: rg
params: {
storageAccountName: storage.outputs.name
appInsightsName: applicationInsights.outputs.name
managedIdentityPrincipalId: functionApp.outputs.?systemAssignedMIPrincipalId ?? ''
userIdentityPrincipalId: principalId
allowUserIdentityPrincipal: !empty(principalId)
}
}
// Outputs
output AZURE_LOCATION string = location
output AZURE_TENANT_ID string = tenant().tenantId
output AZURE_FUNCTION_NAME string = functionApp.outputs.name
output APPLICATIONINSIGHTS_CONNECTION_STRING string = applicationInsights.outputs.connectionString
Tento příklad používá AVM pro aplikace funkcí. Informace o fragmentu kódu v kontextu najdete v příkladu nasazení.
Pokud používáte spravované identity, musíte také aplikaci funkcí povolit přístup k účtu úložiště pomocí identity, jak je znázorněno v tomto příkladu:
module storageRoleAssignment_User 'br/public:avm/ptn/authorization/resource-role-assignment:0.1.2' = if (allowUserIdentityPrincipal && !empty(userIdentityPrincipalId)) {
name: 'storageRoleAssignment-User-${uniqueString(storageAccount.id, userIdentityPrincipalId)}'
params: {
resourceId: storageAccount.id
roleDefinitionId: roleDefinitions.storageBlobDataOwner
principalId: userIdentityPrincipalId
principalType: 'User'
description: 'Storage Blob Data Owner role for user identity (development/testing)'
roleName: 'Storage Blob Data Owner'
}
}
Tento příklad používá AVM pro přiřazení role na úrovni prostředků. Informace o fragmentu kódu v kontextu najdete v příkladu nasazení.
Tento příklad vyžaduje, abyste znali hodnotu GUID pro roli, kterou přiřazujete. Pokud chcete získat tuto hodnotu ID pro libovolný popisný název role, použijte příkaz az role definition list , jak je znázorněno v tomto příkladu:
az role definition list --output tsv --query "[?roleName=='Storage Blob Data Owner'].{name:name}"
Pokud místo spravovaných identit použijete připojovací řetězec, nastavte hodnotu authentication.type na StorageAccountConnectionString a nastavte authentication.storageAccountConnectionStringName na jméno nastavení aplikace, které obsahuje připojovací řetězec účtu úložiště nasazení.
Balíček pro nasazení
Plán Flex Consumption používá k nasazení projektu kódu jedno nasazení. Samotný balíček kódu je stejný jako balíček, který používáte pro nasazení zip v jiných plánech hostování služby Functions. Název souboru balíčku však musí být released-package.zip.
Pokud chcete do šablony zahrnout jeden balíček pro nasazení, použijte /onedeploy definici prostředku pro vzdálenou adresu URL, která obsahuje balíček nasazení. Hostitel služby Functions musí mít přístup ke zdroji tohoto vzdáleného balíčku i ke kontejneru nasazení.
Tento příklad přidá do existující aplikace jeden zdroj nasazení:
@description('The name of the function app.')
param functionAppName string
@description('The location into which the resources should be deployed.')
param location string = resourceGroup().location
@description('The zip content URL for released-package.zip.')
param packageUri string
resource functionAppName_OneDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = {
name: '${functionAppName}/onedeploy'
location: location
properties: {
packageUri: packageUri
remoteBuild: false
}
}
Soubor Bicep nebo šablona ARM můžou volitelně také definovat nasazení kódu funkce pomocí zipovacího balíčku pro nasazení.
Pokud chcete úspěšně nasadit aplikaci pomocí Azure Resource Manageru, musíte pochopit, jak se prostředky nasazují v Azure. Ve většině příkladů aplikujete konfigurace nejvyšší úrovně pomocí siteConfig. Nastavte tyto konfigurace na nejvyšší úrovni, protože sdělují informace modulu runtime a modulu nasazení Služby Functions. Modul nasazení před tím, než použije podřízený sourcecontrols/web prostředek, vyžaduje informace nejvyšší úrovně. I když tato nastavení můžete nakonfigurovat v prostředku podřízené úrovně config/appSettings, v některých případech musí být vaše funkční aplikace nasazena dříve nežconfig/appSettings se použije.
Zipový balíček pro nasazení
Doporučeným způsobem, jak nasadit kód vaší aplikace s funkcemi, je deployování prostřednictvím zipu. Ve výchozím nastavení se funkce, které používají nasazení pomocí ZIPu, spouštějí v samotném balíčku nasazení. Další informace, včetně požadavků na balíček nasazení, viz nasazení pomocí Zipu pro Azure Functions. Při použití automatizace nasazení prostředků můžete odkazovat na balíček nasazení .zip v Bicep nebo šabloně ARM.
Pokud chcete v šabloně použít nasazení zip, nastavte WEBSITE_RUN_FROM_PACKAGE nastavení v aplikaci na 1 a zahrňte definici prostředku /zipDeploy.
Pro plán využívání na Linuxu nastavte URI balíčku nasazení přímo v nastavení
Příklad přidá zipový zdroj nasazení do existující aplikace:
@description('The name of the function app.')
param functionAppName string
@description('The location into which the resources should be deployed.')
param location string = resourceGroup().location
@description('The zip content url.')
param packageUri string
resource functionAppName_ZipDeploy 'Microsoft.Web/sites/extensions@2024-04-01' = {
name: '${functionAppName}/ZipDeploy'
location: location
properties: {
packageUri: packageUri
}
}
Při zahrnutí prostředků pro nasazení souborů typu zip do šablony mějte na paměti následující skutečnosti:
- Plány spotřeby v Linuxu nepodporují
WEBSITE_RUN_FROM_PACKAGE = 1. Místo toho musíte nastavit identifikátor URI balíčku nasazení přímo v nastaveníWEBSITE_RUN_FROM_PACKAGE. Další informace najdete v tématu WEBSITE_RUN_FROM_PACKAGE. Příklad šablony najdete v tématu Funkční aplikace hostovaná v Linuxu v plánu Consumption.
Musí
packageUrito být umístění, ke kterému má funkce přístup. Zvažte použití služby Azure Blob Storage se sdíleným přístupovým podpisem (SAS). Po vypršení platnosti sdíleného přístupového podpisu už Funkce nebudou mít přístup ke sdílení pro nasazení. Když znovu vygenerujete SAS, nezapomeňte aktualizovat nastaveníWEBSITE_RUN_FROM_PACKAGEnovou hodnotou identifikátoru URI.Při nastavování
WEBSITE_RUN_FROM_PACKAGEna URI je třeba provést ruční synchronizaci triggerů.Při přidávání nebo aktualizaci nastavení vždy nastavte všechna požadovaná nastavení aplikace v
appSettingskolekci. Aktualizace odebere existující nastavení, která explicitně nenastavíte. Další informace naleznete v tématu Konfigurace aplikace.Functions nepodporuje Web Deploy (
msdeploy) pro nasazení balíčků. Místo toho musíte v automatech a potrubích nasazení používat nasazení prostřednictvím zip souborů. Další informace najdete v tématu nasazení archivu 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í. Tento předpoklad znamená, že ve výchozím nastavení se nespustí žádná vlastní nastavení.
Některé scénáře vyžadují vzdálené opětovné sestavení aplikace. Jedním z příkladů je, že potřebujete zahrnout balíčky specifické pro Linux do Pythonu nebo Node.js aplikací, které jste vyvinuli 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ž nasadíte aplikaci do Windows, proces nasazení spustí příkazy specifické pro jazyk, jako jsou dotnet restore aplikace jazyka 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 nastavení WEBSITE_RUN_FROM_PACKAGE.
Linuxové kontejnery
Pokud nasazujete kontejnerizovanou aplikaci funkcí do plánu Azure Functions Premium nebo Dedicated, musíte:
- Nastavte nastavení webu
linuxFxVersions identifikátorem kontejnerového obrázku. - Při získávání kontejneru z privátního registru nastavte všechna požadovaná
DOCKER_REGISTRY_SERVER_*nastavení. - Nastavte
WEBSITES_ENABLE_APP_SERVICE_STORAGEnastavení aplikace nafalse.
Pokud některá nastavení chybí, mohlo by zřizování aplikace selhat s chybou HTTP/500.
Function app provisioning failed.
Další informace naleznete v tématu Konfigurace aplikace.
resource functionApp 'Microsoft.Web/sites@2024-04-01' = {
name: functionAppName
location: location
kind: 'functionapp'
properties: {
serverFarmId: hostingPlan.id
siteConfig: {
appSettings: [
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'FUNCTIONS_WORKER_RUNTIME'
value: 'node'
}
{
name: 'WEBSITE_NODE_DEFAULT_VERSION'
value: '~20'
}
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'DOCKER_REGISTRY_SERVER_URL'
value: dockerRegistryUrl
}
{
name: 'DOCKER_REGISTRY_SERVER_USERNAME'
value: dockerRegistryUsername
}
{
name: 'DOCKER_REGISTRY_SERVER_PASSWORD'
value: dockerRegistryPassword
}
{
name: 'WEBSITES_ENABLE_APP_SERVICE_STORAGE'
value: 'false'
}
]
linuxFxVersion: 'DOCKER|myacr.azurecr.io/myimage:mytag'
}
}
dependsOn: [
storageAccount
]
}
Při nasazování kontejnerizovaných funkcí do Azure Container Apps musí vaše šablona:
-
kindNastavte pole na hodnotufunctionapp,linux,container,azurecontainerapps. - Nastavte vlastnost lokality
managedEnvironmentIdna plně kvalifikovaný identifikátor URI prostředí Container Apps. - Přidejte odkaz na prostředek v kolekci
dependsOnwebu, když současně vytváříte prostředekMicrosoft.App/managedEnvironmentss webem.
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:
resource functionApp 'Microsoft.Web/sites@2024-04-01' = {
name: functionAppName
kind: 'functionapp,linux,container,azurecontainerapps'
location: location
properties: {
serverFarmId: hostingPlanName
siteConfig: {
linuxFxVersion: 'DOCKER|myacr.azurecr.io/myimage:mytag'
appSettings: [
{
name: 'FUNCTIONS_EXTENSION_VERSION'
value: '~4'
}
{
name: 'AzureWebJobsStorage'
value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
}
{
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
value: applicationInsightsName.properties.ConnectionString
}
]
}
managedEnvironmentId: managedEnvironmentId
}
dependsOn: [
storageAccount
hostingPlan
]
}
Konfigurace aplikací
V plánu Flex Consumption nakonfigurujete aplikaci funkcí ve Azure se dvěma typy vlastností:
| Configuration | vlastnost Microsoft.Web/sites |
|---|---|
| Konfigurace aplikací | functionAppConfig |
| Nastavení aplikace |
siteConfig.appSettings sbírka |
Tyto konfigurace aplikací udržujete v functionAppConfig:
| Behavior | Nastavení v functionAppConfig |
|---|---|
| Vždy připravené instance | scaleAndConcurrency.alwaysReady |
| Zdroj nasazení | deployment |
| Velikost instance | scaleAndConcurrency.instanceMemoryMB |
| Souběžnost triggeru HTTP | scaleAndConcurrency.triggers.http.perInstanceConcurrency |
| Běhové prostředí jazyka | runtime.name |
| Jazyková verze | runtime.version |
| Maximální počet instancí | scaleAndConcurrency.maximumInstanceCount |
| Strategie aktualizace webu | siteUpdateStrategy.type |
Plán Flex Consumption také podporuje tato nastavení aplikace:
- Nastavení založené na připojovacím řetězci:
- Spravovaná nastavení založená na identitách:
Funkce poskytují následující možnosti konfigurace aplikace funkcí v Azure:
| Configuration | vlastnost Microsoft.Web/sites |
|---|---|
| Nastavení webu | siteConfig |
| Nastavení aplikace |
siteConfig.appSettings sbírka |
Tato nastavení webu jsou vyžadována na siteConfig vlastnosti:
Tato nastavení webu se vyžadují jenom při použití spravovaných identit k získání image z instance služby Azure Container Registry:
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í Bicep souborů nebo šablon ARM mějte na paměti tyto aspekty:
- Volitelné
alwaysReadynastavení obsahuje pole jednoho nebo více{name,instanceCount}objektů s jedním pro každou skupinu škálování jednotlivých funkcí. Tyto skupiny pro škálování dělají vždy pohotová rozhodnutí týkající se škálování. Tento příklad nastaví počty pro vždy připravené položky jak pro skupinuhttp, tak pro jednu konkrétní funkci s názvemhelloworld, která je typu samostatného triggeru.alwaysReady: [ { name: 'http' instanceCount: 2 } { name: 'function:helloworld' instanceCount: 1 } ]
- Zvažte, kdy nastavit
WEBSITE_CONTENTSHAREv automatizovaném nasazení. Podrobné pokyny najdete v referenčních informacíchWEBSITE_CONTENTSHARE.
- Pro nasazení kontejnerů také nastavte
WEBSITES_ENABLE_APP_SERVICE_STORAGEnafalse, protože obsah aplikace je k dispozici v samotném kontejneru.
Nastavení aplikace vždy definujte jako
siteConfig/appSettingskolekci vytvářenéhoMicrosoft.Web/sitesprostředku, jak je znázorněno v příkladech v tomto článku. Tato definice zaručuje, že nastavení, která 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 aktualizace volání rozhraní REST API nahrazuje celý
/config/appsettingsprostředek. Pokud odeberete existující nastavení, vaše aplikace funkcí se nespustí. Pokud chcete aktualizovat jednotlivá nastavení aplikace prostřednictvím kódu programu, můžete k provedení těchto změn použít Azure CLI, Azure PowerShell nebo portál Azure. Další informace naleznete v tématu Práce s nastavením aplikace.Pokud je to možné, používejte připojení k jiným službám Azure, která jsou založena na spravovaných identitách, včetně připojení
AzureWebJobsStorage. Další informace najdete v tématu Konfigurace připojení založeného na identitě.
Nasazení slotů
Funkce umožňují nasadit různé verze kódu do jedinečných koncových bodů ve vaší aplikaci funkcí. Tato možnost 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í Azure App Service. Počet dostupných slotů závisí na vašem plánu hostování. Další informace najdete v tématu prostory nasazení Azure Functions.
Definujete zdroj slotu stejným způsobem jako zdroj aplikace funkcí (Microsoft.Web/sites), ale místo toho použijete identifikátor zdroje Microsoft.Web/sites/slots. Příklad nasazení (v šablonách Bicep a ARM), které vytvoří produkční i přípravný slot v plánu Premium, najdete v tématu Azure Function App s slotem nasazení.
Další informace o výměně slotů pomocí šablon najdete v tématu Automatizace pomocí šablon Resource Manager.
Při práci s nasazeními slotů mějte na paměti následující skutečnosti:
Nenastavujte explicitně
WEBSITE_CONTENTSHAREv definici slotu nasazení. Proces vytvoření aplikace v slotu nasazení vygeneruje toto nastavení za vás.Když prohodíte sloty, některá nastavení aplikace se považují za "trvalá", protože zůstanou se slotem a ne s kódem, který je prohozen. Toto nastavení slotu můžete definovat zahrnutím
"slotSetting":truedo definice konkrétního nastavení aplikace v šabloně. Další informace najdete v tématu Správa nastavení.
Zabezpečená nasazení
Můžete vytvořit svou aplikaci funkcí v rámci nasazení, ve kterém zabezpečíte jeden nebo více prostředků prostřednictvím integrace s virtuálními sítěmi. Prostředek Microsoft.Web/sites/networkConfig definuje integraci virtuální sítě pro vaši aplikaci funkcí. 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 Azure Functions síťové možnosti.
Tyto projekty poskytují Bicepových příkladů nasazení funkčních aplikací v rámci virtuální sítě, včetně omezení přístupu k síti.
- Vysoce škálovatelná funkce aktivovaná HTTP se připojuje k centru událostí zabezpečenému virtuální sítí: Funkce aktivovaná protokolem HTTP (.NET izolovaný režim pracovního procesu) přijímá volání z libovolného zdroje a pak odesílá tělo těchto volání HTTP do zabezpečeného centra událostí,s využitím integrace virtuální sítě, které běží ve virtuální síti.
- Funkci Python aktivuje fronta Service Bus zabezpečená ve virtuální síti: Python funkci aktivuje fronta Service Bus zabezpečená ve virtuální síti. Přístup do fronty ve virtuální síti je zajištěn pomocí privátního koncového bodu. Virtuální počítač ve virtuální síti slouží k odesílání zpráv.
Když vytvoříte implementaci, která používá zabezpečený účet úložiště, musíte explicitně nastavit WEBSITE_CONTENTSHARE a vytvořit prostředek sdíleného úložiště, který je 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 (šablona ARM|soubor Bicep). Musíte také nastavit vlastnost vnetContentShareEnabled webu na true.
Note
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 šablon Bicep i ARM, jak nasadit vaše aplikace funkcí ve virtuální síti, včetně příkladů s omezením přístupu k síti.
| Scénář s omezeným přístupem | Description |
|---|---|
| Vytvoření aplikace funkcí s integrací virtuální sítě | Aplikaci funkcí vytvoříte 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řte funkční aplikaci, která přistupuje k zabezpečenému úložnému účtu | Vytvořená funkční aplikace používá zabezpečený účet úložiště, ke kterému funkce přistupují pomocí privátních koncových bodů. Další informace najdete v části Omezení účtu úložiště na virtuální síť. |
| Vytvořte aplikaci funkcí a účet ú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ě:
| Setting | Value | Description |
|---|---|---|
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 funkční aplikace k použití 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ě
Když omezíte 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.
Klávesy pro přístup k funkcím
Definujte přístupové klíče funkcí na úrovni hostitele jako prostředky Azure. Tento přístup umožňuje vytvářet a spravovat klíče hostitele v šablonách ARM a souborech Bicep. Klíč hostitele je definován jako prostředek typu Microsoft.Web/sites/host/functionKeys. Následující příklad vytvoří přístupový klíč na úrovni hostitele s názvem my_custom_key při vytvoření aplikace funkcí:
resource functionKey 'Microsoft.Web/sites/host/functionKeys@2022-09-01' = {
name: '${parameters('name')}/default/my_custom_key'
properties: {
name: 'my_custom_key'
}
dependsOn: [
resourceId('Microsoft.Web/Sites', parameters('name'))
]
}
V tomto příkladu name je parametr názvem nové aplikace funkcí. Musíte zahrnout dependsOn nastavení, které zaručuje, že se klíč vytvoří pomocí nové aplikace funkcí. Nakonec může properties objekt klíče hostitele také obsahovat value vlastnost, kterou můžete použít k nastavení konkrétního klíče.
Pokud nenastavíte vlastnost value, Funkce automaticky vygenerují nový klíč při vytvoření prostředku, což je doporučeno. Další informace o přístupových klíčích, včetně osvědčených postupů zabezpečení pro práci s přístupovými klíči, najdete v tématu Work with access keys in Azure Functions.
Vytvoření šablony
Odborníci s šablonami Bicep nebo ARM můžou ručně zakódovat nasazení pomocí jednoduchého textového editoru. Pro ostatní z nás několik možností usnadňuje proces vývoje:
Visual Studio Code: Rozšíření vám pomůžou pracovat se soubory Bicep i šablonami ARM. Tyto nástroje vám pomůžou zajistit správnost kódu. Poskytují základní ověření.
Azure portal: Když vytvoříte aplikaci funkcí a související prostředky na portálu, poslední obrazovka Přezkoumat a vytvořit obsahuje odkaz Stáhnout šablonu pro automatizaci.
Tento odkaz ukazuje šablonu ARM vygenerovanou na základě možností, které jste zvolili na portálu. Tato šablona se může zdát trochu složitá při vytváření aplikace funkcí s mnoha novými prostředky. Může ale 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":""}}]}}
Před nasazením šablonu ověřte pomocí následujících metod:
Následující úloha nasazení skupiny prostředků Azure v2 s deploymentMode: 'Validation' instruuje Azure Pipelines k ověření té š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 ověření a chyby nasazení.
Nasazení šablony
K nasazení souboru a šablony Bicep použijte některou z následujících metod:
Tlačítko Nasadit do Azure
Note
Tato metoda v současné době nepodporuje nasazení Bicep souborů.
Nahraďte <url-encoded-path-to-azuredeploy-json>URL kódovanou verze nezpracované cesty souboru azuredeploy.json v GitHub.
Tady je příklad, který používá Markdown:
[](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 příkazy spouštět místně, musíte mít nainstalovaný Azure PowerShell . Pokud se chcete přihlásit k Azure, nejprve spusťte Connect-AzAccountpříkaz .
# 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 main.bicep -Verbose
K otestování tohoto nasazení použijte šablonu, která v plánu Consumption vytvoří funkční aplikaci v prostředí Windows.
Další kroky
Přečtěte si další informace o tom, jak vyvíjet a konfigurovat Azure Functions.