Bagikan melalui


Mengotomatiskan penyebaran sumber daya untuk aplikasi fungsi Anda di Azure Functions

Anda dapat menggunakan file Bicep atau templat Azure Resource Manager (ARM) untuk mengotomatiskan proses penyebaran aplikasi fungsi Anda. Selama penyebaran, Anda dapat menggunakan sumber daya Azure yang sudah ada atau membuat sumber daya baru. Automation membantu Anda dengan skenario ini:

  • Mengintegrasikan penyebaran sumber daya Anda dengan kode sumber Anda di Azure Pipelines dan penyebaran berbasis GitHub Actions.
  • Memulihkan aplikasi fungsi dan sumber daya terkait dari cadangan.
  • Menyebarkan topologi aplikasi beberapa kali.

Artikel ini memperlihatkan kepada Anda cara mengotomatiskan pembuatan sumber daya dan penyebaran untuk Azure Functions. Bergantung pada pemicu dan pengikatan yang digunakan oleh fungsi Anda, Anda mungkin perlu menyebarkan sumber daya lain, yang berada di luar cakupan artikel ini.

Kode templat yang diperlukan tergantung pada opsi hosting yang diinginkan untuk aplikasi fungsi Anda. Artikel ini mendukung opsi hosting berikut:

Opsi Hosting Jenis penyebaran Untuk mempelajari selengkapnya, lihat...
Paket Konsumsi Azure Functions Kode-saja Paket Konsumsi
Paket Konsumsi Flex Azure Functions Kode-saja Paket Konsumsi Flex
Paket Azure Functions Elastic Premium Kode | Wadah Paket premium
Paket Azure Functions Dedicated (App Service) Kode | Wadah Paket khusus
Azure Container Apps Hanya kontainer Hosting Aplikasi Kontainer Azure Functions
Azure Arc Kode | Wadah App Service, Functions, dan Logic Apps pada Azure Arc (Pratinjau)

Penting

Paket Konsumsi Flex saat ini dalam pratinjau.

Saat menggunakan artikel ini, ingatlah pertimbangan ini:

  • Tidak ada cara kanonis untuk menyusun templat ARM.

  • Penyebaran Bicep dapat dimodulir menjadi beberapa file Bicep.

  • Artikel ini mengasumsikan bahwa Anda memiliki pemahaman dasar tentang membuat file Bicep atau menulis templat Azure Resource Manager.

  • Contoh ditampilkan sebagai bagian individual untuk sumber daya tertentu. Untuk serangkaian contoh lengkap file Bicep dan templat ARM, lihat contoh penyebaran aplikasi fungsi ini.
  • Contoh ditampilkan sebagai bagian individual untuk sumber daya tertentu. Untuk serangkaian lengkap file Bicep lengkap dan contoh templat ARM, lihat contoh penyebaran aplikasi Konsumsi Flex ini.
  • Contoh ditampilkan sebagai bagian individual untuk sumber daya tertentu.

Sumber daya yang diperlukan

Anda harus membuat atau mengonfigurasi sumber daya ini untuk penyebaran yang dihosting Azure Functions:

Sumber daya Persyaratan Referensi sintaks dan properti
Akun penyimpanan Wajib Microsoft.Storage/storageAccounts
Komponen Application Insights Direkomendasikan Microsoft.Insights/components*
Paket hosting Wajib Microsoft.Web/serverfarms
Aplikasi fungsi Wajib Microsoft.Web/sites

Anda harus membuat atau mengonfigurasi sumber daya ini untuk penyebaran yang dihosting Azure Functions:

Sumber daya Persyaratan Referensi sintaks dan properti
Akun penyimpanan Wajib Microsoft.Storage/storageAccounts
Komponen Application Insights Direkomendasikan Microsoft.Insights/components*
Aplikasi fungsi Wajib Microsoft.Web/sites

Penyebaran yang dihosting Azure Container Apps biasanya terdiri dari sumber daya ini:

Sumber daya Persyaratan Referensi sintaks dan properti
Akun penyimpanan Wajib Microsoft.Storage/storageAccounts
Komponen Application Insights Direkomendasikan Microsoft.Insights/components*
Lingkungan terkelola Wajib Microsoft.App/managedEnvironments
Aplikasi fungsi Wajib Microsoft.Web/sites

Penyebaran yang dihosting Azure Arc biasanya terdiri dari sumber daya ini:

Sumber daya Persyaratan Referensi sintaks dan properti
Akun penyimpanan Wajib Microsoft.Storage/storageAccounts
Komponen Application Insights Direkomendasikan Microsoft.Insights/components1
Lingkungan App Service Kubernetes Wajib Microsoft.ExtendedLocation/customLocations
Aplikasi fungsi Wajib Microsoft.Web/sites

*Jika Anda belum memiliki Ruang Kerja Analitik Log yang dapat digunakan oleh instans Application Insights, Anda juga perlu membuat sumber daya ini.

Saat Anda menyebarkan beberapa sumber daya dalam satu file Bicep atau templat ARM, urutan pembuatan sumber daya penting. Persyaratan ini adalah hasil dari dependensi antar sumber daya. Untuk dependensi tersebut dependsOn , pastikan untuk menggunakan elemen untuk menentukan dependensi dalam sumber daya dependen. Untuk informasi selengkapnya, lihat Menentukan urutan untuk menyebarkan sumber daya dalam templat ARM atau Dependensi sumber daya di Bicep.

Prasyarat

  • Contoh dirancang untuk dijalankan dalam konteks grup sumber daya yang ada.
  • Application Insights dan log penyimpanan mengharuskan Anda memiliki ruang kerja Azure Log Analytics yang sudah ada. Ruang kerja dapat dibagikan antar layanan, dan sebagai aturan praktis, Anda harus membuat ruang kerja di setiap wilayah geografis untuk meningkatkan performa. Untuk contoh cara membuat ruang kerja Analitik Log, lihat Membuat ruang kerja Analitik Log. Anda dapat menemukan ID sumber daya ruang kerja yang sepenuhnya memenuhi syarat di halaman ruang kerja di portal Azure di bawah ID Sumber Daya Properti>Pengaturan.>
  • Artikel ini mengasumsikan bahwa Anda telah membuat lingkungan terkelola di Azure Container Apps. Anda memerlukan nama dan ID lingkungan terkelola untuk membuat aplikasi fungsi yang dihosting di Container Apps.
  • Artikel ini mengasumsikan bahwa Anda telah membuat lokasi kustom dengan dukungan App Service pada kluster Kubernetes dengan dukungan Azure Arc. Anda memerlukan ID lokasi kustom dan ID lingkungan Kubernetes untuk membuat aplikasi fungsi yang dihosting di lokasi kustom Azure Arc.

Membuat akun penyimpanan

Semua aplikasi fungsi memerlukan akun penyimpanan Azure. Anda memerlukan akun tujuan umum yang mendukung blob, tabel, antrean, dan file. Untuk informasi selengkapnya, lihat Persyaratan akun penyimpanan Azure Functions.

Penting

Akun penyimpanan digunakan untuk menyimpan data aplikasi penting, terkadang termasuk kode aplikasi itu sendiri. Anda harus membatasi akses dari aplikasi dan pengguna lain ke akun penyimpanan.

Bagian contoh ini membuat akun penyimpanan v2 tujuan umum Standar:

resource storageAccountName 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
  properties: {
    supportsHttpsTrafficOnly: true
    defaultToOAuthAuthentication: true
    allowBlobPublicAccess: false
  }
}

Untuk konteks selengkapnya, lihat file main.bicep lengkap di repositori templat.

Untuk konteks selengkapnya, lihat file storage-account.bicep lengkap di repositori sampel.

Anda perlu mengatur string koneksi akun penyimpanan ini sebagai AzureWebJobsStorage pengaturan aplikasi, yang diperlukan Functions. Templat dalam artikel ini membuat nilai string koneksi ini berdasarkan akun penyimpanan yang dibuat, yang merupakan praktik terbaik. Untuk informasi selengkapnya, lihat Konfigurasi aplikasi.

Kontainer penyebaran

Penyebaran ke aplikasi yang berjalan dalam paket Konsumsi Flex memerlukan kontainer di Azure Blob Storage sebagai sumber penyebaran. Anda dapat menggunakan akun penyimpanan default atau Anda dapat menentukan akun penyimpanan terpisah. Untuk informasi selengkapnya, lihat Mengonfigurasi pengaturan penyebaran.

Akun penyebaran ini harus sudah dikonfigurasi saat Anda membuat aplikasi, termasuk kontainer tertentu yang digunakan untuk penyebaran. Untuk mempelajari selengkapnya tentang mengonfigurasi penyebaran, lihat Sumber penyebaran.

Contoh ini menunjukkan cara membuat kontainer di akun penyimpanan:

resource blobServices 'blobServices' = if (!empty(containers)) {
  name: 'default'
  properties: {
    deleteRetentionPolicy: deleteRetentionPolicy
  }
  resource container 'containers' = [for container in containers: {
    name: container.name
    properties: {
      publicAccess: contains(container, 'publicAccess') ? container.publicAccess : 'None'
    }
  }]
}

Untuk cuplikan dalam konteks, lihat contoh penyebaran ini.

Pengaturan penyebaran lainnya dikonfigurasi dengan aplikasi itu sendiri.

Mengaktifkan log penyimpanan

Karena akun penyimpanan digunakan untuk data aplikasi fungsi penting, Anda harus memantau akun untuk modifikasi konten tersebut. Untuk memantau akun penyimpanan, Anda perlu mengonfigurasi log sumber daya Azure Monitor untuk Azure Storage. Di bagian contoh ini, ruang kerja Analitik Log bernama myLogAnalytics digunakan sebagai tujuan untuk log ini.

resource blobService 'Microsoft.Storage/storageAccounts/blobServices@2021-09-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
      }
    ]
  }
}

Ruang kerja yang sama ini dapat digunakan untuk sumber daya Application Insights yang ditentukan nanti. Untuk informasi selengkapnya, termasuk cara bekerja dengan log ini, lihat Memantau Azure Storage.

Membuat Application Insights

Anda harus menggunakan Application Insights untuk memantau eksekusi aplikasi fungsi Anda. Application Insights sekarang memerlukan ruang kerja Azure Log Analytics, yang dapat dibagikan. Contoh-contoh ini mengasumsikan Anda menggunakan ruang kerja yang ada dan memiliki ID sumber daya yang sepenuhnya memenuhi syarat untuk ruang kerja. Untuk informasi selengkapnya, lihat Ruang kerja Azure Log Analytics.

Di bagian contoh ini, sumber daya Application Insights didefinisikan dengan jenis Microsoft.Insights/components dan jenisnya 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>'
  }
}

Untuk konteks selengkapnya, lihat file main.bicep lengkap di repositori templat.

Koneksi harus disediakan ke aplikasi fungsi menggunakan APPLICATIONINSIGHTS_CONNECTION_STRING pengaturan aplikasi. Untuk informasi selengkapnya, lihat Konfigurasi aplikasi.

Contoh dalam artikel ini mendapatkan nilai string koneksi untuk instans yang dibuat. Versi yang lebih lama mungkin digunakan APPINSIGHTS_INSTRUMENTATIONKEY untuk mengatur kunci instrumentasi, yang tidak lagi direkomendasikan.

Membuat paket hosting

Aplikasi yang dihosting dalam paket Konsumsi Flex Azure Functions, paket Premium, atau paket Khusus (App Service) harus memiliki paket hosting yang ditentukan secara eksplisit.

Konsumsi Flex adalah paket hosting berbasis Linux yang dibangun berdasarkan pembayaran Konsumsi untuk apa yang Anda gunakan model penagihan tanpa server. Fitur paket mendukung jaringan privat, pemilihan ukuran memori instans, dan dukungan identitas terkelola yang ditingkatkan.

Paket Konsumsi Flex adalah jenis serverfarm sumber daya khusus. Anda dapat menentukannya dengan menggunakan FC1 untuk Name nilai properti di sku properti dengan tier nilai FlexConsumption.

Bagian contoh ini membuat paket Konsumsi Flex:

resource flexFuncPlan 'Microsoft.Web/serverfarms@2023-12-01' = {
  name: planName
  location: location
  tags: tags
  kind: 'functionapp'
  sku: {
    tier: 'FlexConsumption'
    name: 'FC1'
  }
  properties: {
    reserved: true
  }
}

Untuk konteks selengkapnya, lihat file function.bicep lengkap di repositori sampel paket Konsumsi Flex.

Karena paket Konsumsi Flex saat ini hanya mendukung Linux, Anda juga harus mengatur reserved properti ke true.

Paket Premium menawarkan penskalaan yang sama dengan paket Konsumsi tetapi mencakup sumber daya khusus dan kemampuan ekstra. Untuk mempelajari selengkapnya, lihat Paket Azure Functions Premium.

Paket Premium adalah jenis khusus sumber daya serverfarm. Anda dapat menentukannya dengan menggunakan EP1, , EP2atau EP3 untuk Name nilai properti dalam sku properti . Cara Anda menentukan paket hosting Functions bergantung pada apakah aplikasi fungsi Anda berjalan di Windows atau di Linux. Bagian contoh ini membuat EP1 paket:

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'EP1'
    tier: 'ElasticPremium'
    family: 'EP'
  }
  kind: 'elastic'
  properties: {
    maximumElasticWorkerCount: 20
  }
}

Untuk konteks selengkapnya, lihat file main.bicep lengkap di repositori templat.

Untuk informasi selengkapnya tentang objek, sku lihat SkuDefinition atau tinjau contoh templat.

Dalam paket Khusus (App Service), aplikasi fungsi Anda berjalan pada VM khusus pada SKU Dasar, Standar, dan Premium dalam paket App Service, mirip dengan aplikasi web. Untuk informasi selengkapnya, lihat Paket khusus.

Untuk contoh file Bicep/templat Azure Resource Manager, lihat Aplikasi fungsi di paket Azure App Service

Dalam Functions, paket Khusus hanyalah paket App Service reguler, yang ditentukan oleh sumber daya serverfarm. Anda harus memberikan setidaknya nilainya name . Untuk daftar nama paket yang didukung, lihat --sku pengaturan untuk az appservice plan create daftar nilai yang didukung saat ini untuk paket Khusus.

Cara Anda menentukan paket hosting tergantung pada apakah aplikasi fungsi Anda berjalan di Windows atau di Linux:

resource hostingPlanName 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    tier: 'Standard'
    name: 'S1'
    size: 'S1'
    family: 'S'
    capacity: 1
  }
}

Untuk konteks selengkapnya, lihat file main.bicep lengkap di repositori templat.

Membuat paket hosting

Anda tidak perlu secara eksplisit menentukan sumber daya paket hosting Konsumsi. Saat Anda melewati definisi sumber daya ini, paket secara otomatis dibuat atau dipilih per wilayah saat Anda membuat sumber daya aplikasi fungsi itu sendiri.

Anda dapat secara eksplisit menentukan paket Konsumsi sebagai jenis serverfarm sumber daya khusus, yang Anda tentukan menggunakan nilai Dynamic untuk computeMode properti dan sku . Bagian contoh ini menunjukkan kepada Anda cara menentukan paket konsumsi secara eksplisit. Cara Anda menentukan paket hosting bergantung pada apakah aplikasi fungsi Anda berjalan di Windows atau di Linux.

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  sku: {
    name: 'Y1'
    tier: 'Dynamic'
    size: 'Y1'
    family: 'Y'
    capacity: 0
  }
  properties: {
    computeMode: 'Dynamic'
  }
}

Untuk konteks selengkapnya, lihat file main.bicep lengkap di repositori templat.

Lingkungan Kubernetes

Azure Functions dapat disebarkan ke Kubernetes dengan dukungan Azure Arc baik sebagai proyek kode atau aplikasi fungsi dalam kontainer.

Untuk membuat aplikasi dan merencanakan resource, Anda harus sudah membuat lingkungan App Service Kubernetes untuk klaster Kubernetes dengan dukungan Azure Arc. Contoh dalam artikel ini mengasumsikan Anda memiliki ID sumber daya lokasi kustom (customLocationId) dan lingkungan App Service Kubernetes (kubeEnvironmentId) tempat Anda menyebarkan, yang diatur dalam contoh ini:

param kubeEnvironmentId string
param customLocationId string

Situs dan paket harus mereferensikan lokasi kustom melalui bidang extendedLocation. Seperti yang ditunjukkan dalam contoh terpotong ini, extendedLocation berada di luar properties, sebagai serekan ke kind dan location:

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  ...
  {
    extendedLocation: {
      name: customLocationId
    }
  }
}

Sumber daya rencana harus menggunakan nilai Kubernetes (K1) untuk SKU, kind bidang harus linux,kubernetes, dan reserved properti harus true, karena ini adalah penyebaran Linux. Anda juga harus mengatur extendedLocation dan kubeEnvironmentProfile.id ke ID lokasi kustom dan ID lingkungan Kubernetes, masing-masing, yang mungkin terlihat seperti bagian contoh ini:

resource hostingPlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  location: location
  kind: 'linux,kubernetes'
  sku: {
    name: 'K1'
    tier: 'Kubernetes'
  }
  extendedLocation: {
    name: customLocationId
  }
  properties: {
    kubeEnvironmentProfile: {
      id: kubeEnvironmentId
    }
    reserved: true
  }
}

Buat aplikasi fungsi

Sumber daya aplikasi fungsi didefinisikan oleh sumber daya jenis Microsoft.Web/sites dan kind yang mencakup functionapp, minimal.

Cara Anda menentukan sumber daya aplikasi fungsi bergantung pada apakah Anda menghosting di Linux atau di Windows:

Untuk daftar pengaturan aplikasi yang diperlukan saat berjalan di Windows, lihat Konfigurasi aplikasi. Untuk contoh file Bicep/templat Azure Resource Manager, lihat aplikasi fungsi yang dihosting di Windows dalam templat paket Konsumsi.

Untuk daftar pengaturan aplikasi yang diperlukan saat berjalan di Windows, lihat Konfigurasi aplikasi.

Konsumsi Flex menggantikan banyak pengaturan aplikasi standar dan properti konfigurasi situs yang digunakan dalam penyebaran templat Bicep dan ARM. Untuk informasi selengkapnya, lihat Konfigurasi aplikasi.

resource flexFuncApp 'Microsoft.Web/sites@2023-12-01' = {
  name: appName
  location: location
  tags: tags
  kind: 'functionapp,linux'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    serverFarmId: flexFuncPlan.id
    siteConfig: {
      appSettings: [
        {
          name: 'AzureWebJobsStorage__accountName'
          value: storage.name
        }
        {
          name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
          value: appInsights.properties.ConnectionString
        }
      ]
    }
    functionAppConfig: {
      deployment: {
        storage: {
          type: 'blobContainer'
          value: '${storage.properties.primaryEndpoints.blob}${deploymentStorageContainerName}'
          authentication: {
            type: 'SystemAssignedIdentity'
          }
        }
      }
      scaleAndConcurrency: {
        maximumInstanceCount: maximumInstanceCount
        instanceMemoryMB: instanceMemoryMB
      }
      runtime: { 
        name: functionAppRuntime
        version: functionAppRuntimeVersion
      }
    }
  }
}

Untuk konteks selengkapnya, lihat file function.bicep lengkap di repositori sampel paket Konsumsi Flex.

Catatan

Jika Anda memilih untuk menentukan paket Konsumsi secara opsional, Anda harus mengatur serverFarmId properti pada aplikasi sehingga menunjuk ke ID sumber daya paket. Pastikan bahwa aplikasi fungsi memiliki pengaturan dependsOn yang juga mereferensikan paket tersebut. Jika Anda tidak secara eksplisit menentukan paket, paket akan dibuat untuk Anda.

Atur serverFarmId properti pada aplikasi sehingga menunjuk ke ID sumber daya paket. Pastikan bahwa aplikasi fungsi memiliki pengaturan dependsOn yang juga mereferensikan paket tersebut.

resource functionAppName_resource 'Microsoft.Web/sites@2022-03-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: '~14'
        }
      ]
    }
  }
}

Untuk contoh end-to-end lengkap, lihat file main.bicep ini.

resource functionApp 'Microsoft.Web/sites@2022-03-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: '~14'
        }
      ]
    }
  }
}

Untuk contoh end-to-end lengkap, lihat file main.bicep ini.

Sumber penyebaran

File Bicep atau templat ARM Anda dapat secara opsional juga menentukan penyebaran untuk kode fungsi Anda, yang dapat mencakup metode ini:

Sumber penyebaran

Dalam paket Konsumsi Flex, kode proyek Anda disebarkan dari paket terkompresi zip yang diterbitkan ke kontainer penyimpanan Blob. Untuk informasi selengkapnya, lihat Penerapan. Akun penyimpanan dan kontainer tertentu yang digunakan untuk penyebaran, metode autentikasi, dan kredensial diatur dalam functionAppConfig.deployment.storage elemen properties untuk situs. Kontainer dan pengaturan aplikasi apa pun harus ada saat aplikasi dibuat. Untuk contoh cara membuat kontainer penyimpanan, lihat Kontainer penyebaran.

Contoh ini menggunakan identitas terkelola yang ditetapkan sistem untuk mengakses kontainer penyimpanan blob yang ditentukan, yang dibuat di tempat lain dalam penyebaran:

deployment: {
  storage: {
    type: 'blobContainer'
    value: '${storage.properties.primaryEndpoints.blob}${deploymentStorageContainerName}'
    authentication: {
      type: 'SystemAssignedIdentity'
    }
  }
}

Saat menggunakan identitas terkelola, Anda juga harus mengaktifkan aplikasi fungsi untuk mengakses akun penyimpanan menggunakan identitas, seperti yang ditunjukkan dalam contoh ini:

// Allow access from function app to storage account using a managed identity
resource storageRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = {
  name: guid(storage.id, storageRoleDefinitionId)
  scope: storage
  properties: {
    roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', storageRoleDefinitionId)
    principalId: flexFuncApp.identity.principalId
    principalType: 'ServicePrincipal'
  }
}

Untuk contoh referensi lengkap, lihat file Bicep ini.

Saat menggunakan string koneksi alih-alih identitas terkelola, Anda perlu mengatur authentication.type ke StorageAccountConnectionString dan mengatur authentication.storageAccountConnectionStringName ke nama pengaturan aplikasi yang berisi akun penyimpanan penyebaran string koneksi.

Sumber penyebaran

File Bicep atau templat ARM Anda dapat secara opsional juga menentukan penyebaran untuk kode fungsi Anda menggunakan paket penyebaran zip.

Untuk berhasil menyebarkan aplikasi Anda dengan menggunakan Azure Resource Manager, penting untuk memahami cara sumber daya disebarkan di Azure. Dalam kebanyakan contoh, konfigurasi tingkat atas diterapkan dengan menggunakan siteConfig. Penting untuk mengatur konfigurasi ini di tingkat atas, karena konfigurasi-konfigurasi ini menyampaikan informasi ke runtime Functions dan mesin penyebaran. Informasi tingkat atas diperlukan sebelum sumber daya anak sourcecontrols/web diterapkan. Meskipun dimungkinkan untuk mengonfigurasi pengaturan ini di sumber daya tingkat config/appSettings anak, dalam beberapa kasus aplikasi fungsi Anda harus disebarkan sebelum config/appSettings diterapkan.

Paket penyebaran Zip

Penyebaran Zip adalah cara yang disarankan untuk menyebarkan kode aplikasi fungsi Anda. Secara default, fungsi yang menggunakan penyebaran zip berjalan dalam paket penyebaran itu sendiri. Untuk informasi selengkapnya, termasuk persyaratan untuk paket penyebaran, lihat Penyebaran Zip untuk Azure Functions. Saat menggunakan otomatisasi penyebaran sumber daya, Anda dapat mereferensikan paket penyebaran .zip di templat Bicep atau ARM Anda.

Untuk menggunakan penyebaran zip di templat Anda, atur WEBSITE_RUN_FROM_PACKAGE pengaturan di aplikasi ke 1 dan sertakan /zipDeploy definisi sumber daya.

Untuk paket Konsumsi di Linux, sebagai gantinya atur URI paket penyebaran langsung dalam WEBSITE_RUN_FROM_PACKAGE pengaturan, seperti yang ditunjukkan dalam contoh templat ini.

Contoh ini menambahkan sumber penyebaran zip ke aplikasi yang ada:

@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@2021-02-01' = {
  name: '${functionAppName}/ZipDeploy'
  location: location
  properties: {
    packageUri: packageUri
  }
}

Ingatlah hal-hal berikut saat menyertakan sumber daya penyebaran zip di templat Anda:

  • packageUri harus merupakan lokasi yang dapat diakses oleh Functions. Pertimbangkan untuk menggunakan penyimpanan blob Azure dengan tanda tangan akses bersama (SAS). Setelah SAS kedaluwarsa, Functions tidak dapat lagi mengakses berbagi untuk penyebaran. Saat Anda meregenerasi SAS, ingatlah untuk memperbarui WEBSITE_RUN_FROM_PACKAGE pengaturan dengan nilai URI baru.

  • Saat mengatur WEBSITE_RUN_FROM_PACKAGE ke URI, Anda harus menyinkronkan pemicu secara manual.

  • Pastikan untuk selalu mengatur semua pengaturan aplikasi yang appSettings diperlukan dalam koleksi saat menambahkan atau memperbarui pengaturan. Pengaturan yang ada yang tidak diatur secara eksplisit dihapus oleh pembaruan. Untuk informasi selengkapnya, lihat Konfigurasi aplikasi.

  • Functions tidak mendukung Web Deploy (msdeploy) untuk penyebaran paket. Anda harus menggunakan penyebaran zip dalam alur penyebaran dan otomatisasi Anda. Untuk informasi selengkapnya, lihat Penyebaran Zip untuk Azure Functions.

Build jarak jauh

Proses penyebaran mengasumsikan bahwa file .zip yang Anda gunakan atau penyebaran zip berisi aplikasi yang siap dijalankan. Ini berarti bahwa secara default tidak ada kustomisasi yang dijalankan.

Ada skenario yang mengharuskan Anda membangun kembali aplikasi dari jarak jauh. Salah satu contohnya adalah ketika Anda perlu menyertakan paket khusus Linux dalam aplikasi Python atau Node.js yang Anda kembangkan di komputer Windows. Dalam hal ini, Anda dapat mengonfigurasi Functions untuk melakukan build jarak jauh pada kode Anda setelah penyebaran zip.

Cara Anda meminta build jarak jauh bergantung pada sistem operasi yang Anda sebarkan:

Saat aplikasi disebarkan ke Windows, perintah khusus bahasa (seperti dotnet restore untuk aplikasi C# atau npm install untuk aplikasi Node.js) dijalankan.

Untuk mengaktifkan proses build yang sama dengan integrasi berkelanjutan, tambahkan SCM_DO_BUILD_DURING_DEPLOYMENT=true ke pengaturan aplikasi Anda dalam kode penyebaran Anda dan hapus WEBSITE_RUN_FROM_PACKAGE sepenuhnya.

Kontainer Linux

Jika Anda menyebarkan aplikasi fungsi dalam kontainer ke paket Azure Functions Premium atau Dedicated, Anda harus:

Untuk informasi selengkapnya, lihat Konfigurasi aplikasi.

resource functionApp 'Microsoft.Web/sites@2022-03-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: '~14'
        }
        {
          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
  ]
}

Saat menyebarkan fungsi dalam kontainer ke Azure Container Apps, templat Anda harus:

  • Atur kind bidang ke nilai functionapp,linux,container,azurecontainerapps.
  • Atur managedEnvironmentId properti situs ke URI yang sepenuhnya memenuhi syarat dari lingkungan Aplikasi Kontainer.
  • Tambahkan tautan sumber daya di kumpulan situs dependsOn saat membuat Microsoft.App/managedEnvironments sumber daya secara bersamaan dengan situs.

Definisi aplikasi fungsi kontainer yang disebarkan dari registri kontainer privat ke lingkungan Container Apps yang ada mungkin terlihat seperti contoh ini:

resource functionApp 'Microsoft.Web/sites@2022-03-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
  ]
}

Saat menyebarkan fungsi ke Azure Arc, nilai yang Anda tetapkan untuk kind bidang sumber daya aplikasi fungsi bergantung pada jenis penyebaran:

Jenis penyebaran kind nilai bidang
Penyebaran khusus kode functionapp,linux,kubernetes
Penyebaran kontainer functionapp,linux,kubernetes,container

Anda juga harus mengatur seperti yang customLocationId Anda lakukan untuk sumber daya paket hosting.

Definisi aplikasi fungsi dalam kontainer, menggunakan gambar mulai cepat .NET 6, mungkin terlihat seperti contoh ini:

resource functionApp 'Microsoft.Web/sites@2022-03-01' = {
  name: functionAppName
  kind: 'kubernetes,functionapp,linux,container'
  location: location
  extendedLocation: {
    name: customLocationId
  }
  properties: {
    serverFarmId: 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: 'DefaultEndpointsProtocol=https;AccountName=${storageAccountName};AccountKey=${storageAccount.listKeys().keys[0].value}'
        }
        {
          name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
          value: applicationInsightsName.properties.ConnectionString
        }
      ]
      alwaysOn: true
    }
  }
  dependsOn: [
    storageAccount
    hostingPlan
  ]
}

Konfigurasi aplikasi

Dalam paket Konsumsi Flex, Anda mengonfigurasi aplikasi fungsi di Azure dengan dua jenis properti:

Konfigurasi Properti Microsoft.Web/sites
Konfigurasi aplikasi functionAppConfig
Pengaturan aplikasi siteConfig.appSettings koleksi

Konfigurasi ini dipertahankan dalam functionAppConfig:

Perilaku Pengaturan di functionAppConfig
Runtime bahasa runtime.name
Versi bahasa runtime.version
Jumlah instans maksimum scaleAndConcurrency.maximumInstanceCount
Ukuran memori instans scaleAndConcurrency.instanceMemoryMB
Sumber penyebaran deployment

Paket Konsumsi Flex juga mendukung pengaturan aplikasi ini:

Konfigurasi aplikasi

Functions menyediakan opsi berikut untuk mengonfigurasi aplikasi fungsi Anda di Azure:

Konfigurasi Properti Microsoft.Web/sites
Pengaturan situs siteConfig
Pengaturan aplikasi siteConfig.appSettings koleksi

Pengaturan situs ini diperlukan pada siteConfig properti:

Pengaturan aplikasi ini diperlukan (atau disarankan) untuk sistem operasi dan opsi hosting tertentu:

Pengaturan aplikasi ini diperlukan untuk penyebaran kontainer:

Pengaturan ini hanya diperlukan saat menyebarkan dari registri kontainer privat:

Ingatlah pertimbangan ini saat bekerja dengan pengaturan situs dan aplikasi menggunakan file Bicep atau templat ARM:

  • Ada pertimbangan penting ketika Anda harus mengatur WEBSITE_CONTENTSHARE dalam penyebaran otomatis. Untuk panduan terperinci, lihat referensinya WEBSITE_CONTENTSHARE .
  • Anda harus selalu menentukan pengaturan aplikasi Anda sebagai kumpulan sumber daya yang siteConfig/appSettings Microsoft.Web/sites dibuat, seperti yang dilakukan dalam contoh dalam artikel ini. Definisi ini menjamin pengaturan yang perlu dijalankan aplikasi fungsi Anda tersedia pada startup awal.

  • Saat menambahkan atau memperbarui pengaturan aplikasi menggunakan templat, pastikan Anda menyertakan semua pengaturan yang ada dengan pembaruan. Anda harus melakukan ini karena panggilan REST API pembaruan yang mendasar menggantikan seluruh /config/appsettings sumber daya. Jika Anda menghapus pengaturan yang ada, aplikasi fungsi Anda tidak akan berjalan. Untuk memperbarui pengaturan aplikasi individual secara terprogram, Anda dapat menggunakan Azure CLI, Azure PowerShell, atau portal Azure untuk membuat perubahan ini. Untuk informasi selengkapnya, harap lihat Bekerja dengan pengaturan aplikasi.

Penyebaran slot

Functions memungkinkan Anda menyebarkan versi kode yang berbeda ke titik akhir unik di aplikasi fungsi Anda. Opsi ini memudahkan untuk mengembangkan, memvalidasi, dan menyebarkan pembaruan fungsi tanpa memengaruhi fungsi yang berjalan dalam produksi. Slot penyebaran adalah fitur Azure App Service. Jumlah slot yang tersedia tergantung pada paket hosting Anda. Untuk informasi selengkapnya, lihat Fungsi slot penyebaran Azure Functions .

Sumber daya slot didefinisikan dengan cara yang sama seperti sumber daya aplikasi fungsi (Microsoft.Web/sites), tetapi sebagai gantinya Microsoft.Web/sites/slots Anda menggunakan pengidentifikasi sumber daya. Untuk contoh penyebaran (dalam templat Bicep dan ARM) yang membuat produksi dan slot penahapan dalam paket Premium, lihat Aplikasi Fungsi Azure dengan Slot Penyebaran.

Untuk mempelajari tentang cara menukar slot dengan menggunakan templat, lihat Mengotomatiskan dengan templat Resource Manager.

Ingatlah pertimbangan berikut saat bekerja dengan penyebaran slot:

  • Jangan secara eksplisit mengatur WEBSITE_CONTENTSHARE pengaturan dalam definisi slot penyebaran. Pengaturan ini dibuat untuk Anda ketika aplikasi dibuat di slot penyebaran.

  • Ketika Anda menukar slot, beberapa pengaturan aplikasi dianggap "lengket", karena mereka tetap dengan slot dan tidak dengan kode yang ditukar. Anda dapat menentukan pengaturan slot seperti itu dengan menyertakan "slotSetting":true dalam definisi pengaturan aplikasi tertentu di templat Anda. Untuk informasi selengkapnya, lihat Mengelola pengaturan.

Penyebaran aman

Anda dapat membuat aplikasi fungsi dalam penyebaran di mana satu atau beberapa sumber daya telah diamankan dengan mengintegrasikan dengan jaringan virtual. Integrasi jaringan virtual untuk aplikasi fungsi Anda ditentukan oleh Microsoft.Web/sites/networkConfig sumber daya. Integrasi ini tergantung pada aplikasi fungsi yang dirujuk dan sumber daya jaringan virtual. Aplikasi fungsi Anda mungkin juga bergantung pada sumber daya jaringan privat lainnya, seperti titik akhir dan rute privat. Untuk informasi selengkapnya, lihat Opsi jaringan Azure Functions.

Proyek-proyek ini memberikan contoh berbasis Bicep tentang cara menyebarkan aplikasi fungsi Anda di jaringan virtual, termasuk dengan pembatasan akses jaringan:

Saat membuat penyebaran yang menggunakan akun penyimpanan aman, Anda harus secara eksplisit mengatur WEBSITE_CONTENTSHARE pengaturan dan membuat sumber daya berbagi file bernama dalam pengaturan ini. Pastikan Anda membuat sumber daya menggunakan nilai , seperti yang Microsoft.Storage/storageAccounts/fileServices/shares ditunjukkan dalam contoh ini (file Bicep templat|ARM).WEBSITE_CONTENTSHARE Anda juga harus mengatur properti vnetContentShareEnabled situs ke true.

Catatan

Ketika pengaturan ini bukan bagian dari penyebaran yang menggunakan akun penyimpanan aman, Anda akan melihat kesalahan ini selama validasi penyebaran: Could not access storage account using provided connection string.

Proyek-proyek ini menyediakan contoh templat Bicep dan ARM tentang cara menyebarkan aplikasi fungsi Anda di jaringan virtual, termasuk dengan pembatasan akses jaringan:

Skenario terbatas Deskripsi
Membuat aplikasi fungsi dengan integrasi jaringan virtual Aplikasi fungsi Anda dibuat di jaringan virtual dengan akses penuh ke sumber daya di jaringan tersebut. Akses masuk dan keluar ke aplikasi fungsi Anda tidak dibatasi. Untuk informasi lebih lanjut, lihat Integrasi jaringan virtual.
Membuat aplikasi fungsi yang mengakses akun penyimpanan aman Aplikasi fungsi yang Anda buat menggunakan akun penyimpanan aman, yang diakses Functions dengan menggunakan titik akhir privat. Untuk informasi selengkapnya, lihat Membatasi akun penyimpanan Anda ke jaringan virtual.
Membuat aplikasi fungsi dan akun penyimpanan yang keduanya menggunakan titik akhir privat Aplikasi fungsi yang Anda buat hanya dapat diakses dengan menggunakan titik akhir privat, dan menggunakan titik akhir privat untuk mengakses sumber daya penyimpanan. Untuk informasi selengkapnya, lihat Titik akhir privat.

Pengaturan jaringan terbatas

Anda mungkin juga perlu menggunakan pengaturan ini saat aplikasi fungsi Anda memiliki pembatasan jaringan:

Pengaturan Nilai Deskripsi
WEBSITE_CONTENTOVERVNET 1 Pengaturan aplikasi yang memungkinkan aplikasi fungsi Anda untuk menskalakan saat akun penyimpanan dibatasi ke jaringan virtual. Untuk informasi selengkapnya, lihat Membatasi akun penyimpanan Anda ke jaringan virtual.
vnetrouteallenabled 1 Pengaturan situs yang memaksa semua lalu lintas dari aplikasi fungsi untuk menggunakan jaringan virtual. Untuk informasi selengkapnya, lihat Integrasi jaringan virtual regional. Pengaturan situs ini menggantikan pengaturan WEBSITE_VNET_ROUTE_ALLaplikasi .

Pertimbangan untuk pembatasan jaringan

Saat Membatasi akses ke akun penyimpanan melalui titik akhir privat, Anda tidak dapat mengakses akun penyimpanan melalui portal atau perangkat apa pun di luar jaringan virtual. Anda dapat memberikan akses ke alamat IP aman atau jaringan virtual Anda di akun penyimpanan dengan Mengelola aturan akses jaringan default.

Kunci akses fungsi

Kunci akses fungsi tingkat host didefinisikan sebagai sumber daya Azure. Ini berarti Anda dapat membuat dan mengelola kunci host di templat ARM dan file Bicep Anda. Kunci host didefinisikan sebagai sumber daya jenis Microsoft.Web/sites/host/functionKeys. Contoh ini membuat kunci akses tingkat host bernama my_custom_key saat aplikasi fungsi dibuat:

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

Dalam contoh ini, name parameter adalah nama aplikasi fungsi baru. Anda harus menyertakan dependsOn pengaturan untuk menjamin bahwa kunci dibuat dengan aplikasi fungsi baru. Terakhir, properties objek kunci host juga dapat menyertakan value properti yang dapat digunakan untuk mengatur kunci tertentu.

Saat Anda tidak mengatur value properti, Functions secara otomatis menghasilkan kunci baru untuk Anda saat sumber daya dibuat, yang direkomendasikan. Untuk mempelajari selengkapnya tentang kunci akses, termasuk praktik terbaik keamanan untuk bekerja dengan kunci akses, lihat Bekerja dengan kunci akses di Azure Functions.

Buat templat Anda

Para ahli dengan templat Bicep atau ARM dapat secara manual mengkodekan penyebaran mereka menggunakan editor teks sederhana. Bagi kita semua, ada beberapa cara untuk mempermudah proses pengembangan:

  • Visual Studio Code: Ada ekstensi yang tersedia untuk membantu Anda bekerja dengan file Bicep dan templat ARM. Anda dapat menggunakan alat-alat ini untuk membantu memastikan bahwa kode Anda benar, dan mereka memberikan beberapa validasi dasar.

  • portal Azure: Saat Anda membuat aplikasi fungsi dan sumber daya terkait di portal, layar Tinjau + buat akhir memiliki tautan Unduh templat untuk otomatisasi.

    Tautan unduh templat dari proses pembuatan Azure Functions di portal Azure.

    Tautan ini menunjukkan templat ARM yang dihasilkan berdasarkan opsi yang Anda pilih di portal. Templat ini bisa tampak sedikit kompleks saat Anda membuat aplikasi fungsi dengan banyak sumber daya baru. Namun, ini dapat memberikan referensi yang baik tentang tampilan templat ARM Anda.

Memvalidasi templat Anda

Saat Anda membuat file templat penyebaran secara manual, penting untuk memvalidasi templat Anda sebelum penyebaran. Semua metode penyebaran memvalidasi sintaks templat Anda dan memunculkan pesan kesalahan seperti yang validation failed ditunjukkan dalam contoh berformat JSON berikut:

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

Metode berikut dapat digunakan untuk memvalidasi templat Anda sebelum penyebaran:

Tugas penyebaran grup sumber daya Azure v2 berikut dengan deploymentMode: 'Validation' menginstruksikan Azure Pipelines untuk memvalidasi templat.

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

Anda juga dapat membuat grup sumber daya pengujian untuk menemukan kesalahan pra-penerbangan dan penyebaran .

Menerapkan templat Anda

Anda bisa menggunakan salah satu cara berikut untuk menyebarkan file Bicep dan templat Anda:

Tombol Sebarkan ke Azure

Catatan

Saat ini, metode ini tidak mendukung penyebaran file Bicep jarak jauh.

Ganti <url-encoded-path-to-azuredeploy-json> dengan versi URL yang dikodekan dari jalur mentah file azuredeploy.json Anda di GitHub.

Berikut adalah contoh yang menggunakan markdown:

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

Berikut adalah contoh yang menggunakan 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>

Menyebarkan menggunakan PowerShell

Perintah PowerShell berikut membuat grup sumber daya dan menyebarkan file Bicep atau templat ARM yang membuat aplikasi fungsi dengan sumber daya yang diperlukan. Untuk berjalan secara lokal, Anda harus menginstal Azure PowerShell. Jalankan Connect-AzAccount untuk masuk.

# 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

Untuk menguji penyebaran ini, Anda dapat menggunakan templat seperti ini yang membuat aplikasi fungsi pada Windows dalam paket Konsumsi.

Langkah berikutnya

Pelajari selengkapnya tentang cara mengembangkan dan mengonfigurasi Azure Functions.