Bagikan melalui


Memigrasikan beban kerja AWS Lambda ke Azure Functions

Memigrasikan beban kerja tanpa server yang menggunakan Amazon Web Services (AWS) Lambda ke Azure Functions memerlukan perencanaan dan implementasi yang cermat. Artikel ini menyediakan panduan penting untuk membantu Anda:

  • Lakukan proses penemuan pada beban kerja Anda yang ada.
  • Pelajari cara melakukan aktivitas migrasi utama seperti perencanaan pramigrasi dan penilaian beban kerja.
  • Mengevaluasi dan mengoptimalkan beban kerja yang dimigrasikan.

Ruang Lingkup

Artikel ini menjelaskan migrasi instans AWS Lambda ke Azure Functions.

Artikel ini tidak membahas:

  • Migrasi ke solusi hosting kontainer Anda sendiri, seperti melalui Azure Container Apps.
  • Hosting kontainer AWS Lambda di Azure.
  • Pendekatan adopsi Dasar Azure oleh organisasi Anda, seperti zona pendaratan Azure atau topik lain yang dibahas dalam metodologi migrasi Cloud Adoption Framework.

Membandingkan fungsionalitas

Artikel ini memetakan fitur AWS Lambda ke setara Azure Functions untuk membantu memastikan kompatibilitas.

Penting

Anda dapat memilih untuk menyertakan pengoptimalan dalam rencana migrasi Anda, tetapi Microsoft merekomendasikan proses dua langkah. Migrasikan fungsionalitas "like-to-like" terlebih dahulu, lalu evaluasi peluang pengoptimalan di Azure.

Upaya pengoptimalan harus berkelanjutan dan dijalankan melalui proses kontrol perubahan tim beban kerja Anda. Migrasi yang meningkatkan kemampuan selama proses migrasi dapat menimbulkan risiko dan memperpanjang proses tanpa perlu.

Perspektif beban kerja

Artikel ini berfokus pada cara memigrasikan beban kerja AWS Lambda ke Azure Functions dan dependensi umum untuk beban kerja tanpa server. Proses ini mungkin melibatkan beberapa layanan karena beban kerja terdiri dari banyak sumber daya dan proses untuk mengelola sumber daya tersebut. Untuk memiliki strategi komprehensif, Anda harus menggabungkan rekomendasi yang disajikan dalam artikel ini dengan rencana yang lebih besar yang mencakup komponen dan proses lain dalam beban kerja Anda.

Melakukan proses penemuan pada beban kerja anda yang sudah ada

Langkah pertama adalah melakukan proses penemuan terperinci untuk mengevaluasi beban kerja AWS Lambda yang ada. Tujuannya adalah untuk memahami fitur dan layanan AWS mana yang diandalkan beban kerja Anda. Kompilasi inventarisasi komprehensif fungsi AWS Lambda Anda dengan menggunakan alat AWS seperti SDK, API, CloudTrail, dan AWS CLI khusus layanan untuk menilai beban kerja di AWS. Anda harus memahami aspek utama inventaris AWS Lambda berikut:

  • Kasus penggunaan
  • Konfigurasi
  • Penyiapan keamanan dan jaringan
  • Penggunaan alat, pemantauan, pencatatan, dan kemampuan observasi
  • Dependensi
  • Tujuan keandalan dan status keandalan saat ini
  • Biaya kepemilikan
  • Target performa dan performa saat ini

Melakukan perencanaan pramigrasi

Sebelum mulai memigrasikan beban kerja, Anda harus memetakan fitur AWS Lambda ke Azure Functions untuk memastikan kompatibilitas dan mengembangkan rencana migrasi. Kemudian Anda dapat memilih beban kerja utama untuk prototipe.

Anda juga perlu memetakan layanan AWS yang bergantung pada Lambda dengan dependensi yang setara di Azure.

Memetakan fitur AWS Lambda ke Azure Functions

Tabel berikut membandingkan konsep, sumber daya, dan properti AWS Lambda dengan rekan setara mereka di Azure Functions, khususnya paket hosting Flex Konsumsi.

Bahasa yang didukung

Bahasa pemrograman Versi yang didukung AWS Lambda Versi yang didukung Azure Functions
Node.js 20, 22 20, 22
Phyton 3.9, 3.10, 3.11, 3.12, 3.13 3.9, 3.10, 3.11
Jawa 8, 11, 17, 21 8, 11, 17, 21
PowerShell Tidak didukung 7.4
.JARING .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Rubi 3.2, 3.3 Handler khusus
Ayo pergi Runtime hanya untuk OS Handler khusus
Karat Runtime hanya untuk OS Handler khusus

Model pemrograman

Fitur AWS Lambda Fungsi Azure
Pemicu Terintegrasi dengan layanan AWS lainnya melalui sumber peristiwa. Menyediakan cara otomatis dan terprogram untuk menautkan fungsi Lambda dengan sumber peristiwa. Memicu fungsi berdasarkan peristiwa tertentu, seperti pembaruan dalam database atau pesan baru dalam antrean. Misalnya, pemicu Azure Cosmos DB memungkinkan fungsi untuk secara otomatis merespons penyisipan dan pembaruan dalam kontainer Azure Cosmos DB. Tindakan ini memungkinkan pemrosesan perubahan data secara real time.

Functions juga terintegrasi dengan Azure Event Grid, sehingga dapat memproses peristiwa dari layanan Azure, seperti Azure Storage dan Azure Media Services, dan sumber peristiwa eksternal. Event Grid berfungsi sebagai layanan perutean acara yang terpusat dan dapat diperluas, yang melengkapi pemicu "Functions" serta memungkinkan skalabilitas tinggi dan cakupan sumber acara yang luas.
Pengikat Tidak memiliki pengikatan. Menggunakan AWS SDK dalam fungsi Lambda untuk mengelola interaksi secara manual dengan layanan AWS lainnya. Pengikatan, dikonfigurasi sebagai input atau output, mengaktifkan koneksi deklaratif ke layanan, yang meminimalkan kebutuhan akan kode SDK eksplisit. Misalnya, Anda dapat mengonfigurasi pengikatan untuk dibaca dari Blob Storage, menulis ke Azure Cosmos DB, atau mengirim email melalui SendGrid tanpa mengelola integrasi secara manual.

Pemicu dan pengikatan peristiwa

Pemicu atau layanan AWS Lambda Pemicu Fungsi Azure Deskripsi
API Gateway: Permintaan HTTP Pemicu HTTP Pemicu ini memungkinkan Anda menangani permintaan HTTP secara langsung.
Simple Queue Service (SQS) Pemicu Azure Queue Storage atau pemicu Azure Service Bus Pemicu ini dapat memproses pesan dalam antrean.
Simple Notification Service (SNS) Pemicu Event Grid atau pemicu Azure Service Bus Pemicu ini mengaktifkan pemrosesan pemberitahuan.
Kinesis (aliran data) Pemicu Azure Event Hubs Pemicu ini mengonsumsi aliran data.
DynamoDB (perubahan tabel) Pemicu umpan perubahan Azure Cosmos DB Pemicu ini memperhatikan perubahan pada tabel.
Acara CloudWatch atau Penjadwal EventBridge Pemicu pengatur waktu Pemicu ini menangani fungsi terjadwal atau berbasis waktu.
S3 (kejadian objek) Pemicu Blob Storage Pemicu ini bereaksi terhadap peristiwa dalam penyimpanan blob.
Amazon Relational Database Service (RDS) Pemicu Azure SQL Pemicu ini bereaksi terhadap perubahan database.
Streaming Terkelola untuk Apache Kafka (MSK) Pemicu Apache Kafka Pemicu ini bereaksi terhadap pesan topik Kafka.
Amazon ElastiCache Pemicu Azure Redis Pemicu ini bereaksi terhadap pesan di Redis.
Amazon MQ Pemicu RabbitMQ Pemicu ini bereaksi terhadap pesan di RabbitMQ.

Hak akses

AWS Lambda Fungsi Azure
Peran eksekusi Lambda memberikan izin fungsi Lambda untuk berinteraksi dengan layanan AWS lainnya. Setiap fungsi Lambda memiliki peran manajemen identitas dan akses (IAM) terkait yang menentukan izinnya saat berjalan. Identitas terkelola menyediakan identitas untuk aplikasi fungsi Anda yang memungkinkannya mengautentikasi dengan layanan Azure lainnya tanpa menyimpan kredensial dalam kode. Kontrol akses berbasis peran menetapkan peran yang sesuai ke identitas terkelola di ID Microsoft Entra untuk memberikan akses ke sumber daya yang diperlukan.
Pernyataan kebijakan berbasis sumber daya:

- AWSLambda_FullAccess memberikan akses penuh ke semua operasi Lambda, termasuk membuat, memperbarui, dan menghapus fungsi.

- AWSLambda_ReadOnlyAccess memberikan akses baca-saja untuk melihat fungsi Lambda dan konfigurasinya.

- Kebijakan kustom IAM.
Peran bawaan berbasis sumber daya:

- Peran Pemilik memberikan akses penuh, termasuk manajemen izin akses.

- Peran Kontributor dapat membuat dan menghapus aplikasi fungsi, mengonfigurasi pengaturan, dan menyebarkan kode. Ini tidak dapat mengelola akses.

- Peran Pembaca Pemantauan dapat memberikan akses baca-saja ke data dan pengaturan pemantauan. Ini juga dapat mengalokasikan peran kustom.

URL Fungsi

AWS Lambda Fungsi Azure
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (asli, nama host default global)

- <appname>-<randomhash>.<Region>.azurewebsites.net (nama host default baru yang unik)

Jaringan

AWS Lambda Fungsi Azure
Semua fungsi Lambda berjalan dengan aman di dalam cloud privat virtual (VPC) yang dikelola sistem default. Anda juga dapat mengonfigurasi fungsi Lambda untuk mengakses sumber daya di VPC kustom. Aplikasi fungsi dapat diamankan jaringan dan dapat mengakses layanan lain di dalam jaringan. Akses jaringan masuk hanya dapat dibatasi untuk daftar firewall alamat IP dan ke jaringan virtual tertentu melalui titik akhir layanan atau titik akhir privat. Akses jaringan keluar diaktifkan melalui fitur integrasi jaringan virtual. Aplikasi fungsi dapat membatasi semua lalu lintasnya ke subnet jaringan virtual dan juga dapat mengakses layanan lain di dalam jaringan virtual tersebut.

Pengamatan dan pemantauan

AWS Lambda Fungsi Azure
Amazon CloudWatch membantu pemantauan dan pengamatan dengan mengumpulkan dan melacak metrik, menggabungkan dan menganalisis log, mengatur alarm, membuat dasbor kustom, dan menerapkan respons otomatis terhadap perubahan performa dan metrik sumber daya. Azure Monitor menyediakan pemantauan dan pengamatan komprehensif untuk Azure Functions, terutama melalui fitur Application Insights-nya.

Application Insights mengumpulkan data telemetri seperti tingkat permintaan, waktu respons, dan tingkat kegagalan. Ini memvisualisasikan hubungan komponen aplikasi, memantau performa real time, mencatat diagnostik terperinci, dan memungkinkan pelacakan metrik kustom. Kemampuan ini membantu mempertahankan performa, ketersediaan, dan keandalan Azure Functions, sambil mengaktifkan dasbor, pemberitahuan, dan respons otomatis kustom.
AWS Lambda menghasilkan data telemetri dari pemanggilan fungsi Anda dan dapat mengekspor data ini dengan menggunakan semantik OpenTelemetry. Anda dapat mengonfigurasi fungsi Lambda untuk mengirim data telemetri ini ke titik akhir yang mematuhi OpenTelemetry. Tindakan ini memungkinkan korelasi jejak dan log, data telemetri berbasis standar yang konsisten, dan integrasi dengan alat pengamatan lain yang mendukung OpenTelemetry. Konfigurasikan aplikasi fungsi Anda untuk mengekspor data log dan pelacakan dalam format OpenTelemetry. Anda dapat mengekspor data telemetri ke titik akhir yang sesuai dengan menggunakan OpenTelemetry. OpenTelemetry memberikan manfaat seperti korelasi jejak dan log, data telemetri berbasis standar yang konsisten, dan integrasi dengan penyedia lain. Anda dapat mengaktifkan OpenTelemetry di tingkat aplikasi fungsi dalam konfigurasi host dan di proyek kode Anda untuk mengoptimalkan ekspor data dari kode fungsi Anda. Untuk informasi selengkapnya, lihat Menggunakan OpenTelemetry dengan Azure Functions.

Skalabilitas dan Keserentakan

AWS Lambda Fungsi Azure
AWS menggunakan model penskalakan sesuai permintaan. Operasi fungsi Anda akan diskalakan secara otomatis sebagai respons terhadap permintaan. Konkurensi, atau jumlah permintaan yang ditangani oleh satu instans, selalu 1. Instans ditambahkan dan dihapus secara dinamis berdasarkan jumlah peristiwa masuk dan konkurensi yang dikonfigurasi untuk setiap instans. Anda dapat mengonfigurasi pengaturan konkurensi ke nilai yang Anda inginkan.
Keserentakan selalu 1. Konkurensi dapat dikonfigurasi (>1).
Mendukung penskalaan ke 0. Mendukung penskalaan ke 0.

Perlindungan awal mula dingin

AWS Lambda Fungsi Azure
Konkurensi yang disediakan mengurangi latensi dan memastikan performa fungsi yang dapat diprediksi dengan menginisialisasi jumlah instans fungsi yang diminta sebelumnya. Konkurensi yang dipersiapkan cocok untuk aplikasi yang peka terhadap latensi dan dikenakan biaya secara terpisah dari konkurensi standar. Aplikasi fungsi memungkinkan Anda mengonfigurasi keberiringan untuk setiap instans, yang mendorong skalabilitasnya. Beberapa tugas dapat berjalan secara paralel dalam instans aplikasi yang sama, dan tugas berikutnya dalam instans tidak mengalami cold start. Aplikasi fungsi juga memiliki instans yang selalu siap . Pelanggan dapat menentukan sejumlah instans yang dipanaskan sebelumnya untuk menghilangkan latensi start dingin dan memastikan performa yang konsisten. Aplikasi fungsi juga memperluas skala ke lebih banyak instans berdasarkan permintaan, sambil mempertahankan instans yang selalu siap.
Konkurensi tereservasi menentukan jumlah maksimum instans bersamaan untuk suatu fungsi. Batas ini memastikan bahwa sebagian kuota konkurensi akun Anda disisihkan secara eksklusif untuk fungsi tersebut. AWS Lambda secara dinamis menskalakan untuk menangani permintaan masuk, bahkan ketika konkurensi yang telah ditetapkan sudah diatur, selama permintaan tidak melebihi batas konkurensi yang telah ditetapkan. Batas bawah untuk konkurensi yang dicadangkan di AWS Lambda adalah 1. Batas atas untuk kebersamaan yang dipesan di AWS Lambda ditentukan oleh kuota kebersamaan regional akun. Secara default, batas ini adalah 1.000 operasi bersamaan untuk setiap wilayah. Azure Functions tidak memiliki fitur yang setara dengan konkurensi yang dicadangkan. Untuk mencapai fungsionalitas serupa, isolasi fungsi tertentu ke dalam aplikasi fungsi terpisah dan atur batas peluasan skala maksimum untuk setiap aplikasi. Azure Functions secara dinamis meluaskan skala, atau menambahkan lebih banyak instans, dan menurunkan skala, atau menghapus instans, dalam batas skala yang ditetapkan. Aplikasi yang berjalan dalam paket Konsumsi Flex secara bawaan dimulai dengan batas 100 instans keseluruhan yang dapat dikonfigurasi. Nilai jumlah instans maksimum terendah adalah 40, dan nilai jumlah instans maksimum tertinggi yang didukung adalah 1.000. Kuota memori langganan regional juga dapat membatasi berapa banyak aplikasi fungsi yang dapat diskalakan, tetapi Anda dapat meningkatkan kuota ini dengan memanggil dukungan.

Penetapan Harga

AWS Lambda Fungsi Azure
- Bayar sesuai penggunaan untuk jumlah total pemanggilan dan GB/s untuk setiap instans (dengan konkurensi tetap 1)

- Kenaikan 1 ms

- Tingkat gratis 400.000 Gbps
- Bayar sesuai penggunaan untuk total pemanggilan dan untuk GB per detik setiap instans (dengan pemanggilan bersamaan yang dapat dikonfigurasi)

- Penambahan 100 milidetik

- Tingkat gratis 100.000 Gbps

- Biaya berbasis konsumsi

Penyimpanan kode sumber

AWS Lambda Fungsi Azure
AWS Lambda mengelola penyimpanan kode fungsi Anda dalam sistem penyimpanan terkelolanya sendiri. Anda tidak perlu menyediakan lebih banyak penyimpanan. Functions memerlukan kontainer Blob Storage yang disediakan pelanggan untuk mempertahankan paket penyebaran yang berisi kode aplikasi Anda. Anda dapat mengonfigurasi pengaturan untuk menggunakan akun penyimpanan yang sama atau berbeda untuk penyebaran dan mengelola metode autentikasi untuk mengakses kontainer.

Pengembangan lokal

Fitur AWS Lambda Fitur Azure Functions
- SAM CLI

- LocalStack
Perangkat Utama Azure Functions

- Visual Studio Code

- Visual Studio

- GitHub Codespaces

- VSCode.dev

-Maven

- Kode dan uji Azure Functions secara lokal

Penyebaran

Fitur AWS Lambda Fungsi Azure
Paket implementasi - File ZIP

- Gambar kontainer
File ZIP (Untuk penyebaran gambar kontainer, gunakan SKU khusus atau premium.)
Ukuran file ZIP di konsol Maksimum 50 MB Maksimum 500 MB untuk penyebaran ZIP
Ukuran file ZIP (CLI/SDK) Batas maksimum 250 MB untuk pengiriman file ZIP, dan 500 MB untuk file yang telah diekstraksi. Maksimum 500 MB untuk penyebaran ZIP
Ukuran gambar kontainer Maksimum 10 GB Dukungan kontainer dengan penyimpanan fleksibel melalui Azure
Penanganan artefak besar Gunakan gambar kontainer untuk penyebaran yang lebih besar. Lampirkan share Blob Storage atau Azure Files untuk mengakses file besar dari aplikasi.
Mengemas dependensi umum dalam fungsi Lapisan-lapisan Penyebaran .Zip, sesuai permintaan dari penyimpanan, atau kontainer (ACA, terdedikasi, hanya untuk SKU EP)
Penyebaran biru-hijau atau penerapan versi fungsi Gunakan kualifikasi fungsi untuk mereferensikan status tertentu dari fungsi Anda dengan menggunakan nomor versi atau nama alias. Qualifier memungkinkan manajemen versi dan strategi penyebaran bertahap. Gunakan sistem integrasi berkelanjutan dan pengiriman berkelanjutan untuk penerapan biru-hijau.

Batas waktu dan batas memori

Fitur Batas AWS Lambda Batas Azure Functions
Batas waktu eksekusi 900 detik (15 menit) Batas waktu default adalah 30 menit. Batas waktu maksimum tidak terbatas. Namun, masa tenggang yang diberikan untuk eksekusi fungsi adalah 60 menit selama penskalaan dan 10 menit selama pembaruan platform. Untuk informasi selengkapnya, lihat Durasi batas waktu aplikasi fungsi.
Memori yang dapat dikonfigurasi 128 MB hingga 10.240 MB, dengan kelipatan 64 MB Functions mendukung ukuran instans 2 GB dan 4 GB . Setiap wilayah dalam langganan tertentu memiliki batas memori 512.000 MB untuk semua instans aplikasi, yang dapat Anda tingkatkan dengan memanggil dukungan. Penggunaan memori total dari semua instance di semua aplikasi fungsi dalam satu wilayah harus tetap berada dalam kuota ini.

Meskipun 2 GB dan 4 GB adalah opsi ukuran instans, konkurensi untuk setiap instans dapat lebih tinggi dari 1. Oleh karena itu, satu instans dapat menangani beberapa eksekusi bersamaan, tergantung pada konfigurasinya. Mengonfigurasi konkurensi dengan tepat dapat membantu mengoptimalkan penggunaan sumber daya dan mengelola performa. Dengan menyeimbangkan pengaturan alokasi memori dan konkurensi, Anda dapat mengelola sumber daya yang dialokasikan secara efektif ke aplikasi fungsi Anda dan memastikan performa dan kontrol biaya yang efisien. Untuk informasi selengkapnya, lihat Kuota memori langganan regional.

Manajemen rahasia

AWS Lambda Fungsi Azure
AWS Secrets Manager memungkinkan Anda menyimpan, mengelola, dan mengambil rahasia seperti kredensial database, kunci API, dan informasi sensitif lainnya. Fungsi Lambda dapat mengambil rahasia dengan menggunakan AWS SDK. Kami menyarankan agar Anda menggunakan pendekatan tanpa rahasia seperti identitas terkelola untuk mengaktifkan akses aman ke sumber daya Azure tanpa kredensial hardcoding. Saat rahasia diperlukan, seperti untuk sistem mitra atau warisan, Azure Key Vault menyediakan solusi yang aman untuk menyimpan dan mengelola rahasia, kunci, dan sertifikat.
AWS Systems Manager Parameter Store adalah layanan yang menyimpan data konfigurasi dan rahasia. Parameter dapat dienkripsi dengan menggunakan AWS KMS dan diambil oleh fungsi Lambda dengan menggunakan AWS SDK.
Fungsi Lambda dapat menyimpan pengaturan konfigurasi dalam variabel lingkungan. Data sensitif dapat dienkripsi dengan kunci KMS untuk akses aman.
Azure Functions menggunakan pengaturan aplikasi untuk menyimpan data konfigurasi. Pengaturan ini memetakan langsung ke variabel lingkungan untuk kemudahan penggunaan dalam fungsi. Pengaturan ini dapat dienkripsi dan disimpan dengan aman dalam konfigurasi Azure App Service.
Untuk skenario yang lebih canggih, Azure App Configuration menyediakan fitur yang kuat untuk mengelola beberapa konfigurasi. Ini memungkinkan penandaan fitur dan mendukung pembaruan dinamis di seluruh layanan.

Pengelolaan Keadaan

AWS Lambda Fungsi Azure
AWS Lambda menangani manajemen status sederhana dengan menggunakan layanan seperti Amazon S3 untuk penyimpanan objek, DynamoDB untuk penyimpanan status NoSQL yang cepat dan dapat diskalakan, dan SQS untuk penanganan antrean pesan. Layanan ini memastikan persistensi dan konsistensi data di seluruh eksekusi fungsi Lambda. Azure Functions AzureWebJobsStorage menggunakan untuk mengelola status dengan mengaktifkan pengikatan dan pemicu dengan layanan Azure Storage seperti Blob Storage, Queue Storage, dan Table Storage. Ini memungkinkan fungsi untuk dengan mudah membaca dan menulis status. Untuk manajemen status yang lebih kompleks, Durable Functions menyediakan orkestrasi alur kerja tingkat lanjut dan kemampuan persistensi status dengan menggunakan Azure Storage.

Orkestrasi berdasarkan status

AWS Lambda Fungsi Azure
Tidak ada orkestrasi negara bagian asli. Gunakan AWS Step Functions untuk alur kerja. Durable Functions membantu pengelolaan status yang kompleks dengan menyediakan orkestrasi alur kerja yang tahan dan entitas dengan status. Ini memungkinkan operasi jangka panjang, fungsi pemeriksaan otomatis, dan penyimpanan status yang andal. Fitur-fitur ini memungkinkan pembangunan alur kerja yang rumit untuk memastikan toleransi kesalahan dan skalabilitas untuk aplikasi stateful.

Perbedaan dan pertimbangan lainnya

Fitur AWS Lambda Fungsi Azure
Mengelompokkan fungsi Setiap fungsi AWS Lambda adalah entitas independen. Aplikasi fungsi berfungsi sebagai kontainer untuk beberapa fungsi. Ini menyediakan konteks dan konfigurasi eksekusi bersama untuk fungsi yang dikandungnya. Memperlakukan beberapa fungsi sebagai entitas tunggal menyederhanakan penyebaran dan manajemen. Functions juga menggunakan strategi penskalaan per fungsi, di mana setiap fungsi diskalakan secara independen, kecuali untuk pemicu HTTP, Blob Storage, dan Durable Functions. Fungsi yang dipicu ini mengatur skala dalam grup mereka sendiri.
Domain khusus Diaktifkan melalui API Gateway Anda dapat mengonfigurasi domain kustom langsung di aplikasi fungsi atau di Azure API Management.
Dukungan kontainer kustom Mendukung kontainer kustom melalui Lambda Container Image Azure Functions mendukung kontainer kustom yang berjalan di lingkungan Container Apps.

Membuat rencana migrasi

  1. Pilih beban kerja utama untuk bukti konsep.

    Mulailah dengan memilih satu hingga dua beban kerja noncritik berukuran sedang dari total inventarisasi Anda. Beban kerja ini berfungsi sebagai fondasi untuk bukti konsep migrasi Anda. Anda dapat menguji proses dan mengidentifikasi potensi tantangan tanpa berisiko mengganggu operasi Anda.

  2. Uji secara berulang dan kumpulkan umpan balik.

    Gunakan bukti konsep untuk mengumpulkan umpan balik, mengidentifikasi celah, dan menyempurnakan proses sebelum Anda menskalakan ke beban kerja yang lebih besar. Pendekatan berulang ini memastikan bahwa pada saat Anda pindah ke migrasi skala penuh, Anda mengatasi potensi tantangan dan memperbaiki proses.

Membangun aset migrasi

Langkah ini adalah fase pengembangan transisi. Selama fase ini, Anda membuat kode sumber, templat infrastruktur sebagai kode (IaC), dan alur penyebaran untuk mewakili beban kerja di Azure. Anda harus mengadaptasi kode fungsi untuk kompatibilitas dan praktik terbaik sebelum dapat melakukan migrasi.

Mengadaptasi kode fungsi, file konfigurasi, dan infrastruktur sebagai file kode

Untuk memperbarui kode sesuai dengan persyaratan runtime Azure Functions:

Cuplikan berikut adalah contoh kode SDK umum. Kode AWS Lambda dipetakan ke pemicu, pengikatan, atau cuplikan kode SDK yang terkait di Azure Functions.

Membaca dari Amazon S3 dibandingkan dengan Azure Blob Storage

Kode AWS Lambda (SDK)

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
const params = {
Bucket: 'my-bucket',
Key: 'my-object.txt',
};
const data = await
s3.getObject(params).promise();
console.log('File content:',
data.Body.toString());
};       

Kode pemicu untuk Azure Functions

import { app } from '@azure/functions';

app.storageblob('blobTrigger', { 
path: 'my-container/{blobName}',
connection: 'AzureWebJobsStorage',
}, async (context, myBlob) => { 
context.log(`Blob content:
${myBlob.toString()}`);
});

Menulis ke Amazon Simple Queue Service (SQS) dibandingkan dengan Azure Queue Storage

Kode AWS Lambda (SDK)

const AWS = require('aws-sdk');
const sqs = new AWS.SQS(); 

exports.handler = async (event) => {
const params = {
QueueUrl:
'https://sqs.amazonaws.com/123456789012/MyQueue',
MessageBody: 'Hello, world!',
};
await
sqs.sendMessage(params).promise();
};

Kode pemicu untuk Azure Functions

import { app } from '@azure/functions';

app.queue('queueTrigger', { 
queueName: 'myqueue-items',
connection: 'AzureWebJobsStorage',
}, async (context, queueMessage) => {
context.log(`Queue message: 
${queueMessage}`);
}); 

Penulisan ke DynamoDB dibandingkan dengan Azure Cosmos DB

Kode AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const dynamoDb = new AWS.DynamoDB.DocumentClient();   

exports.handler = async (event) => { 
const params = { 
TableName: 'my-table', 
Key: { id: '123' }, 
}; 
const data = await dynamoDb.get(params).promise(); 
console.log('DynamoDB record:', data.Item); 
}; 

Kode pemicu untuk Azure Functions

import { app } from '@azure/functions';  

app.cosmosDB('cosmosTrigger', { 
connectionStringSetting: 'CosmosDBConnection', 
databaseName: 'my-database', 
containerName: 'my-container', 
leaseContainerName: 'leases', 
}, async (context, documents) => { 
documents.forEach(doc => { 
context.log(`Cosmos DB document: ${JSON.stringify(doc)}`); 
}); 
}); 

Acara Amazon CloudWatch versus pemicu pengatur waktu Azure

Kode AWS Lambda (SDK)

exports.handler = async (event) => {
console.log('Scheduled event:', event); 
}; 

Kode pemicu untuk Azure Functions

import { app } from '@azure/functions'; 

app.timer('timerTrigger', { schedule: '0 */5 * * * *', // Runs every 5 minutes }, async (context, myTimer) => { if (myTimer.isPastDue) { context.log('Timer is running late!'); } context.log(Timer function executed at: ${new Date().toISOString()}); });

Amazon Simple Notification Service (SNS) versus pemicu Azure Event Grid

Kode AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const sns = new AWS.SNS();   

exports.handler = async (event) => { 
const params = { 
Message: 'Hello, Event Grid!', 
TopicArn: 'arn:aws:sns:us-east-1:123456789012:MyTopic', 
}; 
await sns.publish(params).promise(); 
}; 

Kode pemicu untuk Azure Functions

import { app } from '@azure/functions'; 

app.eventGrid('eventGridTrigger', {}, 
async (context, eventGridEvent) => { 

context.log(`Event Grid event: 
${JSON.stringify(eventGridEvent)}`); 

}); 

Amazon Kinesis dibandingkan dengan pemicu Azure Event Hubs

Kode AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const kinesis = new AWS.Kinesis();   

exports.handler = async (event) => { 
const records = 
event.Records.map(record => 
Buffer.from(record.kinesis.data, 
'base64').toString()); 
console.log('Kinesis records:', records); 
}; 

Kode pemicu untuk Azure Functions

import { app } from '@azure/functions'; 
app.eventHub('eventHubTrigger', {  
connection: 'EventHubConnection',  
eventHubName: 'my-event-hub',  
}, async (context, eventHubMessages) => 
{  
eventHubMessages.forEach(message => 
{  
context.log(`Event Hub message: 
${message}`);  
});  
});

Lihat repositori GitHub berikut untuk membandingkan kode AWS Lambda dan kode Azure Functions:

Menyesuaikan pengaturan konfigurasi

Pastikan bahwa pengaturan waktu habis dan memori fungsi Anda kompatibel dengan Azure Functions. Untuk informasi selengkapnya tentang pengaturan yang dapat dikonfigurasi, lihat referensihost.json untuk Azure Functions.

Ikuti praktik terbaik yang direkomendasikan untuk izin, akses, jaringan, dan konfigurasi penyebaran.

Atur izin

Ikuti praktik terbaik saat Anda menyiapkan izin di aplikasi fungsi Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi aplikasi fungsi dan akun penyimpanan Anda dengan identitas terkelola.

main.bicep

// User-assigned managed identity that the function app uses to reach Storage and Service Bus
module processorUserAssignedIdentity './core/identity/userAssignedIdentity.bicep' = {
  name: 'processorUserAssignedIdentity'
  scope: rg
  params: {
    location: location
    tags: tags
    identityName: !empty(processorUserAssignedIdentityName) ? processorUserAssignedIdentityName : '${abbrs.managedIdentityUserAssignedIdentities}processor-${resourceToken}'
  }
}

Untuk informasi selengkapnya, lihat rbac.bicep.

Mengonfigurasikan akses jaringan

Azure Functions mendukung integrasi jaringan virtual, yang memberi aplikasi fungsi Anda akses ke sumber daya di jaringan virtual Anda. Setelah integrasi, aplikasi Anda merutekan lalu lintas keluar melalui jaringan virtual. Kemudian aplikasi Anda dapat mengakses titik akhir atau sumber daya privat dengan menggunakan aturan yang hanya mengizinkan lalu lintas dari subnet tertentu. Jika tujuan adalah alamat IP di luar jaringan virtual, alamat IP sumber adalah salah satu alamat yang tercantum di properti aplikasi Anda, kecuali Anda mengonfigurasi gateway NAT.

Saat Anda mengaktifkan integrasi jaringan virtual untuk aplikasi fungsi Anda, ikuti praktik terbaik di TSG untuk integrasi jaringan virtual untuk aplikasi web dan aplikasi fungsi.

main.bicep

// Virtual network and private endpoint
module serviceVirtualNetwork 'app/vnet.bicep' = {
  name: 'serviceVirtualNetwork'
  scope: rg
  params: {
    location: location
    tags: tags
    vNetName: !empty(vNetName) ? vNetName : '${abbrs.networkVirtualNetworks}${resourceToken}'
  }
}  

module servicePrivateEndpoint 'app/storage-PrivateEndpoint.bicep' = {
  name: 'servicePrivateEndpoint'
  scope: rg
  params: {
    location: location
    tags: tags
    virtualNetworkName: !empty(vNetName) ? vNetName : '${abbrs.networkVirtualNetworks}${resourceToken}'
    subnetName: serviceVirtualNetwork.outputs.peSubnetName
    resourceName: storage.outputs.name
  }
}

Untuk informasi selengkapnya, lihat VNet.bicep dan storage-PrivateEndpoint.bicep.

Mengonfigurasi pengaturan penerapan

Penyebaran mengikuti satu jalur. Setelah Anda membuat kode proyek dan zip ke dalam paket aplikasi, sebarkan ke kontainer Blob Storage. Saat dimulai, aplikasi Anda mendapatkan paket tersebut dan menjalankan kode fungsi Anda dari paket tersebut. Secara default, akun penyimpanan yang sama yang menyimpan metadata host internal, seperti AzureWebJobsStorage, juga berfungsi sebagai kontainer penyebaran. Namun, Anda dapat menggunakan akun penyimpanan alternatif atau memilih metode autentikasi pilihan Anda dengan mengonfigurasi pengaturan penyebaran aplikasi Anda. Untuk informasi selengkapnya, lihat Detail teknologi penyebaran dan Mengonfigurasi pengaturan penyebaran.

Hasilkan file IaC

  • Gunakan alat seperti Bicep, templat Azure Resource Manager, atau Terraform untuk membuat file IaC untuk menyebarkan sumber daya Azure.

  • Tentukan sumber daya seperti Azure Functions, akun penyimpanan, dan komponen jaringan dalam file IaC Anda.

  • Gunakan repositori sampel IaC ini untuk sampel yang menggunakan rekomendasi dan praktik terbaik Azure Functions.

Menggunakan alat untuk pemfaktoran ulang

Gunakan alat seperti GitHub Copilot di VISUAL Code untuk bantuan terkait pemfaktoran ulang kode, pemfaktoran ulang manual untuk perubahan tertentu, atau bantuan migrasi lainnya.

Nota

Gunakan mode Agen di GitHub Copilot di Visual Studio Code.

Artikel berikut ini menyediakan contoh spesifik dan langkah-langkah terperinci untuk memfasilitasi proses migrasi:

Kembangkan proses langkah demi langkah untuk migrasi Hari-0.

Kembangkan strategi failover dan failback untuk proses migrasi Anda, dan uji secara menyeluruh di lingkungan praproduksi. Kami menyarankan agar Anda melakukan pengujian end-to-end sebelum akhirnya beralih dari AWS Lambda ke Azure Functions.

  • Memvalidasi fungsionalitas

    • Kode dan uji Azure Functions secara lokal.

    • Uji setiap fungsi secara menyeluruh untuk memastikan bahwa fungsi berfungsi seperti yang diharapkan. Pengujian ini harus mencakup input/output, pemicu peristiwa, dan verifikasi pengikatan.

    • Gunakan alat seperti curl atau ekstensi Klien REST pada Visual Studio Code untuk mengirim permintaan HTTP untuk fungsi yang dipicu HTTP.

    • Untuk pemicu lain, seperti timer atau antrean, pastikan bahwa pemicu diaktifkan dengan benar dan fungsi berjalan seperti yang diharapkan.

  • Validasi fungsi kerja

    • Lakukan pengujian performa untuk membandingkan penyebaran Azure Functions baru dengan penyebaran AWS Lambda sebelumnya.

    • Pantau metrik seperti waktu respons, waktu proses, dan konsumsi sumber daya.

    • Gunakan Application Insights untuk pemantauan, analisis log, dan pemecahan masalah selama fase pengujian.

  • Memecahkan masalah dengan menggunakan fitur diagnosis dan pemecahan masalah

    Gunakan fitur diagnosis dan selesaikan masalah di portal Microsoft Azure untuk memecahkan masalah aplikasi fungsi Anda. Alat ini menyediakan serangkaian fitur diagnostik yang dapat membantu Anda mengidentifikasi dan menyelesaikan masalah umum dengan cepat, seperti crash aplikasi, penurunan performa, dan masalah konfigurasi. Ikuti langkah-langkah pemecahan masalah terpandu dan rekomendasi yang disediakan alat untuk mengatasi masalah yang telah Anda identifikasi.

Mengevaluasi status akhir beban kerja yang dimigrasikan

Sebelum menonaktifkan sumber daya di AWS, Anda harus yakin bahwa platform memenuhi ekspektasi beban kerja saat ini dan tidak ada yang memblokir pemeliharaan beban kerja atau pengembangan lebih lanjut.

Menyebarkan dan menguji fungsi untuk memvalidasi performa dan kebenarannya.

Sebarkan ke Azure

Sebarkan beban kerja dengan menggunakan fitur penerbitan Visual Studio Code . Anda juga dapat menyebarkan beban kerja dari baris perintah dengan menggunakan Azure Functions Core Tools atau Azure CLI. Azure DevOps dan GitHub Actions juga menggunakan One Deploy.

Menjelajahi contoh skenario migrasi

Gunakan repositori MigrationGetStarted sebagai templat untuk memulai bukti konsep Anda. Repositori ini mencakup proyek Azure Functions yang siap disebarkan yang memiliki infrastruktur dan file kode sumber untuk membantu Anda memulai.

Jika Anda lebih suka menggunakan Terraform, gunakan MigrationGetStarted-Terraform sebagai gantinya.

Mengoptimalkan dan memantau performa aplikasi di Azure

Setelah memigrasikan beban kerja, kami sarankan Anda menjelajahi lebih banyak fitur di Azure. Fitur-fitur ini dapat membantu Anda memenuhi persyaratan beban kerja di masa mendatang dan membantu menutup celah.

Menggunakan Application Insights untuk pemantauan dan pemecahan masalah

Aktifkan Application Insights untuk aplikasi fungsi Anda untuk mengumpulkan data telemetri terperinci untuk pemantauan dan pemecahan masalah. Anda dapat mengaktifkan Application Insights melalui portal Microsoft Azure atau di file konfigurasi host.json aplikasi fungsi. Setelah mengaktifkan Application Insights, Anda dapat:

  • Mengumpulkan data telemetri. Application Insights menyediakan berbagai data telemetri seperti log permintaan, metrik performa, pengecualian, dan dependensi.

  • Menganalisis log dan metrik. Akses dasbor Application Insights dari portal Microsoft Azure untuk memvisualisasikan dan menganalisis log, metrik, dan data telemetri lainnya. Gunakan alat bawaan untuk membuat kueri kustom dan memvisualisasikan data untuk mendapatkan wawasan tentang performa dan perilaku aplikasi fungsi Anda.

  • Siapkan pemberitahuan. Konfigurasikan pemberitahuan di Application Insights untuk memberi tahu Anda tentang masalah penting, penurunan performa, atau peristiwa tertentu. Pemberitahuan ini membantu Anda secara proaktif memantau dan merespons masalah dengan cepat.

Mengoptimalkan biaya dan performa

  • Penskalaan dan pengoptimalan performa:

    • Gunakan fitur autoscaling untuk menangani berbagai beban kerja secara efisien.

    • Optimalkan kode fungsi untuk meningkatkan performa dengan mengurangi waktu proses, mengoptimalkan dependensi, dan menggunakan praktik pengodean yang efisien.

    • Terapkan strategi caching untuk mengurangi pemrosesan berulang dan latensi dalam mengakses data yang sering digunakan.

  • Manajemen biaya:

    • Gunakan alat Microsoft Cost Management untuk memantau dan menganalisis biaya Azure Functions Anda.

    • Siapkan anggaran dan pemberitahuan biaya untuk mengelola dan memprediksi pengeluaran secara efektif.