Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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.
Anda dapat memperoleh manfaat ini di aplikasi produksi Anda dengan menggunakan otomatisasi penyebaran, baik infrastruktur sebagai kode (IaC) maupun integrasi dan penyebaran berkelanjutan (CI/CD):
- Konsistensi: Tentukan infrastruktur Anda dalam kode untuk memastikan penyebaran yang konsisten di seluruh lingkungan.
- Kontrol Versi: Lacak perubahan pada infrastruktur dan konfigurasi aplikasi Anda di kontrol sumber, bersama dengan kode proyek Anda.
- Automation: Mengotomatiskan penyebaran, yang mengurangi kesalahan manual dan mempersingkat proses rilis.
- Skalabilitas: Mereplikasi infrastruktur dengan mudah untuk beberapa lingkungan, seperti pengembangan, pengujian, dan produksi.
- Pemulihan Bencana: Membuat ulang infrastruktur dengan cepat setelah kegagalan atau selama migrasi.
Artikel ini memperlihatkan kepada Anda cara mengotomatiskan pembuatan sumber daya Azure dan konfigurasi penyebaran untuk Azure Functions. Untuk mempelajari selengkapnya tentang penyebaran berkelanjutan kode proyek Anda, lihat Penyebaran berkelanjutan untuk Azure Functions.
Kode templat untuk membuat sumber daya Azure yang diperlukan bergantung pada opsi hosting yang diinginkan untuk aplikasi fungsi Anda. Artikel ini mendukung opsi hosting berikut:
| Opsi Hosting | Jenis penyebaran | Contoh templat |
|---|---|---|
| Paket Konsumsi Flex | Code-only |
Bicep Templat ARM Terraform |
| Paket premium | Kode | Wadah |
Bicep Templat ARM |
| Paket khusus | Kode | Wadah |
Bicep Templat ARM |
| Azure Container Apps | Container-only | Bicep |
| Rencana Konsumsi | Code-only |
Bicep Templat ARM |
Pastikan untuk memilih paket hosting Anda di bagian atas artikel.
Important
Setelah 30 September 2028, opsi untuk menghosting aplikasi fungsi Anda di Linux dalam paket Konsumsi dihentikan. Untuk menghindari gangguan, migrasikan aplikasi paket Konsumsi yang ada yang berjalan di Linux ke paket Konsumsi Flex sebelum tanggal tersebut. Aplikasi yang berjalan di Windows dalam paket Konsumsi tidak terpengaruh oleh perubahan ini. Untuk informasi selengkapnya, lihat pemberitahuan penghentian paket Konsumsi Linux.
Saat menggunakan artikel ini, ingatlah pertimbangan ini:
Tidak ada cara kanonis untuk menyusun templat ARM.
Penyebaran Bicep dapat dimodularisasi ke dalam beberapa file Bicep dan Modul Terverifikasi Azure (AVM).
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 Bicep, Modul Terverifikasi Azure (AVM) ditampilkan, jika tersedia. 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:
| Resource | Requirement | Referensi sintaks dan properti |
|---|---|---|
| Akun penyimpanan | Required | Microsoft.Storage/storageAccounts |
| Komponen Application Insights | Recommended | Microsoft.Insights/components* |
| Paket hosting | Required | Microsoft.Web/serverfarms |
| Aplikasi fungsi | Required | Microsoft.Web/sites |
Anda harus membuat atau mengonfigurasi sumber daya ini untuk penyebaran yang dihosting Azure Functions:
| Resource | Requirement | Referensi sintaks dan properti |
|---|---|---|
| Akun penyimpanan | Required | Microsoft.Storage/storageAccounts |
| Komponen Application Insights | Recommended | Microsoft.Insights/components* |
| Aplikasi fungsi | Required | Microsoft.Web/sites |
Penyebaran yang dihosting Azure Container Apps biasanya terdiri dari sumber daya ini:
| Resource | Requirement | Referensi sintaks dan properti |
|---|---|---|
| Akun penyimpanan | Required | Microsoft.Storage/storageAccounts |
| Komponen Application Insights | Recommended | Microsoft.Insights/components* |
| Lingkungan terkelola | Required | Microsoft.App/managedEnvironments |
| Aplikasi fungsi | Required | Microsoft.Web/sites |
Penyebaran yang dihosting Azure Arc biasanya terdiri dari sumber daya ini:
| Resource | Requirement | Referensi sintaks dan properti |
|---|---|---|
| Akun penyimpanan | Required | Microsoft.Storage/storageAccounts |
| Komponen Application Insights | Recommended | Microsoft.Insights/components1 |
| Lingkungan App Service Kubernetes | Required | Microsoft.ExtendedLocation/customLocations |
| Aplikasi fungsi | Required | 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.
Prerequisites
- 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 Microsoft Azure di bawah PENGATURAN>ID Sumber Daya>.
- 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.
Important
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 storageAccount '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-PrivateEndpoint.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:
module storage 'br/public:avm/res/storage/storage-account:0.25.0' = {
name: 'storage'
scope: rg
params: {
name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}'
allowBlobPublicAccess: false
allowSharedKeyAccess: false // Disable local authentication methods as per policy
dnsEndpointType: 'Standard'
publicNetworkAccess: 'Enabled'
networkAcls: {
defaultAction: 'Allow'
bypass: 'AzureServices'
}
blobServices: {
containers: [{name: deploymentStorageContainerName}]
}
tableServices:{}
queueServices: {}
minimumTlsVersion: 'TLS1_2' // Enforcing TLS 1.2 for better security
location: location
tags: tags
}
}
Contoh ini menunjukkan cara menggunakan AVM untuk akun penyimpanan untuk membuat kontainer penyimpanan blob bersama dengan akun penyimpanan. 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:
module appServicePlan 'br/public:avm/res/web/serverfarm:0.1.1' = {
name: 'appserviceplan'
scope: rg
params: {
name: !empty(functionPlanName) ? functionPlanName : '${abbrs.webServerFarms}${resourceToken}'
sku: {
name: 'FC1'
tier: 'FlexConsumption'
}
reserved: true
location: location
tags: tags
zoneRedundant: zoneRedundant
}
}
Contoh ini menggunakan AVM untuk rencana App Service. Untuk cuplikan dalam konteks, lihat contoh penyebaran ini.
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 sampel file Bicep/templat Azure Resource Manager, lihat Aplikasi fungsi pada 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.
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'
}
}
}
scaleAndConcurrency: {
maximumInstanceCount: maximumInstanceCount
instanceMemoryMB: instanceMemoryMB
}
runtime: {
name: functionAppRuntime
version: functionAppRuntimeVersion
}
}
siteConfig: {
alwaysOn: false
}
configs: [{
name: 'appsettings'
properties:{
// Only include required credential settings unconditionally
AzureWebJobsStorage__credential: 'managedidentity'
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'
}
}]
}
}
Contoh ini menggunakan AVM untuk aplikasi fungsi. Untuk cuplikan dalam konteks, lihat contoh penyebaran ini.
Note
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
Anda dapat menggunakan linuxFxVersion pengaturan situs untuk meminta agar kontainer Linux tertentu disebarkan ke aplikasi Anda saat dibuat. Pengaturan lainnya diperlukan untuk mengakses gambar di repositori privat. Untuk informasi selengkapnya, lihat Konfigurasi aplikasi.
Important
Saat membuat kontainer sendiri, Anda diharuskan untuk menjaga gambar dasar kontainer Anda diperbarui ke gambar dasar terbaru yang didukung. Gambar dasar yang didukung untuk Azure Functions tergantung pada bahasa. Lihat repositori gambar dasar Azure Functions.
Tim Functions berkomitmen untuk menerbitkan pembaruan bulanan untuk gambar dasar ini. Pembaruan reguler mencakup pembaruan versi minor terbaru dan perbaikan keamanan untuk runtime Functions dan bahasa. Anda harus memperbarui kontainer Anda secara teratur dari gambar dasar terbaru dan menyebarkan ulang versi kontainer Anda yang diperbarui. Untuk informasi selengkapnya, lihat Memelihara kontainer kustom.
File Bicep atau templat ARM Anda dapat secara opsional juga menentukan penyebaran untuk kode fungsi Anda, yang dapat mencakup metode ini:
Rencana Konsumsi Flex menyimpan kode proyek Anda dalam file paket terkompresi zip di kontainer penyimpanan blob yang disebut kontainer penyebaran. Anda dapat mengonfigurasi akun penyimpanan dan kontainer yang digunakan untuk penyebaran. Untuk informasi selengkapnya, lihat Penyebaran.
Anda harus menggunakan satu kali penerapan untuk menerbitkan paket kode Anda ke wadah penerapan. Selama penyebaran templat ARM atau Bicep, Anda dapat melakukan ini dengan menentukan sumber paket yang menggunakan /onedeploy ekstensi. Jika Anda memilih untuk langsung mengunggah paket Anda ke kontainer, paket tidak disebarkan secara otomatis.
Kontainer penyebaran
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:
functionAppConfig: {
deployment: {
storage: {
type: 'blobContainer'
value: '${storage.outputs.primaryBlobEndpoint}${deploymentStorageContainerName}'
authentication: {
type: 'SystemAssignedIdentity'
}
}
}
scaleAndConcurrency: {
maximumInstanceCount: maximumInstanceCount
instanceMemoryMB: instanceMemoryMB
}
runtime: {
name: functionAppRuntime
version: functionAppRuntimeVersion
}
}
Contoh ini menggunakan AVM untuk aplikasi fungsi. Untuk cuplikan dalam konteks, lihat contoh penyebaran ini.
Saat menggunakan identitas terkelola, Anda juga harus mengaktifkan aplikasi fungsi untuk mengakses akun penyimpanan menggunakan identitas, seperti yang ditunjukkan dalam contoh ini:
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'
}
}
Contoh ini menggunakan AVM untuk penetapan peran yang mencakup sumber daya. Untuk cuplikan dalam konteks, lihat contoh penyebaran ini.
Contoh ini mengharuskan Anda mengetahui nilai GUID untuk peran yang ditetapkan. Anda bisa mendapatkan nilai ID ini untuk nama peran yang ramah dengan menggunakan perintah az role definition list , seperti dalam contoh ini:
az role definition list --output tsv --query "[?roleName=='Storage Blob Data Owner'].{name:name}"
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.
Paket implementasi
Paket Konsumsi Flex menggunakan satu deploy untuk menyebarkan proyek kode Anda. Paket kode itu sendiri sama dengan yang akan Anda gunakan untuk penyebaran zip dalam paket hosting Functions lainnya. Namun, nama file paket itu sendiri harus released-package.zip.
Untuk menyertakan satu paket penyebaran dalam templat Anda, gunakan /onedeploy definisi sumber daya untuk URL jarak jauh yang berisi paket penyebaran. Host Functions harus dapat mengakses sumber paket jarak jauh ini dan kontainer penyebaran.
Contoh ini menambahkan satu sumber penyebaran ke aplikasi yang sudah 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 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
}
}
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 pada tingkat sumber daya config/appSettings anak, dalam beberapa kasus aplikasi fungsi Anda harus disebarkan sebelumconfig/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:
- Paket konsumsi di Linux tidak mendukung
WEBSITE_RUN_FROM_PACKAGE = 1. Anda harus mengatur URI paket penyebaran langsung diWEBSITE_RUN_FROM_PACKAGEpengaturan. Untuk informasi selengkapnya, lihat WEBSITE_RUN_FROM_PACKAGE. Untuk contoh templat, lihat Aplikasi fungsi yang dihosting di Linux dalam paket Konsumsi.
packageUriharus 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 memperbaruiWEBSITE_RUN_FROM_PACKAGEpengaturan dengan nilai URI baru.Saat mengatur
WEBSITE_RUN_FROM_PACKAGEke URI, Anda harus menyinkronkan pemicu secara manual.Pastikan untuk selalu mengatur semua pengaturan aplikasi yang
appSettingsdiperlukan 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:
- Atur
linuxFxVersionpengaturan situs dengan pengidentifikasi gambar kontainer Anda. - Atur pengaturan yang diperlukan
DOCKER_REGISTRY_SERVER_*saat mendapatkan kontainer dari registri privat. - Atur
WEBSITES_ENABLE_APP_SERVICE_STORAGEpengaturan aplikasi kefalse.
Jika beberapa pengaturan hilang, provisi aplikasi mungkin gagal dengan kesalahan HTTP/500 ini:
Function app provisioning failed.
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
kindbidang ke nilaifunctionapp,linux,container,azurecontainerapps. - Atur
managedEnvironmentIdproperti situs ke URI yang sepenuhnya memenuhi syarat dari lingkungan Aplikasi Kontainer. - Tambahkan tautan sumber daya di kumpulan situs
dependsOnsaat membuatMicrosoft.App/managedEnvironmentssumber 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 hanya 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:
| Configuration | Properti Microsoft.Web/sites |
|---|---|
| Konfigurasi aplikasi | functionAppConfig |
| Pengaturan aplikasi |
siteConfig.appSettings koleksi |
Konfigurasi aplikasi ini dipertahankan di functionAppConfig:
| Behavior | Pengaturan di functionAppConfig |
|---|---|
| Instans yang selalu siap | scaleAndConcurrency.alwaysReady |
| Sumber penyebaran | deployment |
| Ukuran instans | scaleAndConcurrency.instanceMemoryMB |
| Konkurensi pemicu HTTP | scaleAndConcurrency.triggers.http.perInstanceConcurrency |
| Runtime bahasa pemrograman | runtime.name |
| Versi bahasa | runtime.version |
| Jumlah instans maksimum | scaleAndConcurrency.maximumInstanceCount |
| Strategi pembaruan situs | siteUpdateStrategy.type |
Paket Konsumsi Flex juga mendukung pengaturan aplikasi ini:
- Pengaturan berbasis string koneksi:
- Pengaturan berbasis identitas terkelola:
Functions menyediakan opsi berikut untuk mengonfigurasi aplikasi fungsi Anda di Azure:
| Configuration | Properti Microsoft.Web/sites |
|---|---|
| Pengaturan situs | siteConfig |
| Pengaturan aplikasi |
siteConfig.appSettings koleksi |
Pengaturan situs ini diperlukan pada siteConfig properti:
Pengaturan situs ini hanya diperlukan saat menggunakan identitas terkelola untuk mendapatkan gambar dari instans Azure Container Registry:
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:
- Pengaturan opsional
alwaysReadyberisi array satu atau beberapa{name,instanceCount}objek, dengan satu untuk setiap grup skala per fungsi. Ini adalah grup skala yang digunakan untuk membuat keputusan skala yang selalu siap. Contoh ini menetapkan jumlah yang selalu siap untukhttpgrup dan satu fungsi bernamahelloworld, yang merupakan jenis pemicu yang tidak dikelompokkan:alwaysReady: [ { name: 'http' instanceCount: 2 } { name: 'function:helloworld' instanceCount: 1 } ]
- Ada pertimbangan penting ketika Anda harus mengatur
WEBSITE_CONTENTSHAREdalam penyebaran otomatis. Untuk panduan terperinci, lihat referensinyaWEBSITE_CONTENTSHARE.
- Untuk penyebaran kontainer, atur
WEBSITES_ENABLE_APP_SERVICE_STORAGEjuga kefalse, karena konten aplikasi Anda disediakan dalam kontainer itu sendiri.
Anda harus selalu menentukan pengaturan aplikasi Anda sebagai kumpulan sumber daya yang
siteConfig/appSettingsMicrosoft.Web/sitesdibuat, 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/appsettingssumber 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.Jika memungkinkan, Anda harus menggunakan koneksi berbasis identitas terkelola ke layanan Azure lainnya, termasuk
AzureWebJobsStoragekoneksi. Untuk informasi selengkapnya, lihat Mengonfigurasi koneksi berbasis identitas.
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_CONTENTSHAREpengaturan 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":truedalam 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:
- Fungsi yang dipicu HTTP skala tinggi terhubung ke pusat aktivitas yang diamankan oleh jaringan virtual: Fungsi yang dipicu HTTP (mode pekerja terisolasi.NET) menerima panggilan dari sumber mana pun dan kemudian mengirim isi panggilan HTTP tersebut ke hub peristiwa aman yang berjalan di jaringan virtual dengan menggunakan integrasi jaringan virtual.
- Fungsi dipicu oleh antrean Bus Layanan yang diamankan dalam jaringan virtual: Fungsi Python dipicu oleh antrean Bus Layanan yang diamankan dalam jaringan virtual. Antrean diakses di jaringan virtual menggunakan titik akhir privat. Komputer virtual di jaringan virtual digunakan untuk mengirim pesan.
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 Microsoft.Storage/storageAccounts/fileServices/shares, seperti yang ditunjukkan dalam contoh ini (WEBSITE_CONTENTSHARE|). Anda juga harus mengatur properti vnetContentShareEnabled situs ke true.
Note
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 | Description |
|---|---|
| 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:
| Setting | Value | Description |
|---|---|---|
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 Microsoft Azure: Saat Anda membuat aplikasi fungsi dan sumber daya terkait di portal, layar Tinjau + buat akhir memiliki tautan Unduh templat untuk otomatisasi .
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
Note
Saat ini, metode ini tidak mendukung penyebaran file Bicep jarak jauh.
Ganti <url-encoded-path-to-azuredeploy-json> dengan versi yang dikodekan URL dari jalur mentah file Anda azuredeploy.json di GitHub.
Berikut adalah contoh yang menggunakan markdown:
[](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 . Untuk masuk ke Azure, Anda harus terlebih dahulu menjalankan Connect-AzAccount.
# 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 selanjutnya
Pelajari selengkapnya tentang cara mengembangkan dan mengonfigurasi Azure Functions.