AWS Lambda - Fungsi di C #
Bab ini akan menjelaskan cara bekerja dengan fungsi AWS Lambda di C # secara detail. Di sini, kami akan menggunakan studio visual untuk menulis dan menerapkan kode ke AWS Lambda. Untuk informasi dan bantuan apa pun terkait instalasi Visual studio dan menambahkan toolkit AWS ke Visual Studio, silakan lihatIntroductionbab dalam tutorial ini. Setelah Anda selesai dengan penginstalan Visual Studio, ikuti langkah-langkah yang diberikan di bawah ini. Lihat tangkapan layar masing-masing untuk pemahaman yang lebih baik -
Langkah 1
Buka Visual Studio Anda dan ikuti langkah-langkah untuk membuat proyek baru. KlikFile -> New -> Project.
Langkah 2
Sekarang, layar berikut ini ditampilkan di mana Anda memilih AWS Lambda for Visual C#. PilihAWS Lambda Project (.NET Core).
Anda dapat mengubah nama jika diperlukan, akan tetap menggunakan nama default di sini. KlikOK untuk melanjutkan.
Langkah selanjutnya akan meminta Anda untuk memilih a Blueprint.
Pilih Empty function untuk contoh ini dan klik Finish. Ini akan membuat struktur proyek baru seperti yang ditunjukkan di bawah ini -
Sekarang, pilih Function.cs yang merupakan file utama tempat handler dengan peristiwa dan konteks dibuat untuk AWS Lambda.
Tampilan dari file Functions.cs adalah sebagai berikut -
Anda dapat menggunakan perintah yang diberikan di bawah ini untuk membuat serial parameter input dan output ke fungsi AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Detail Penangan untuk C #
Penangan ditampilkan sebagai berikut -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Berbagai komponen dari kode di atas dijelaskan di bawah ini -
FunctionHandler −Ini adalah titik awal dari fungsi C # AWS Lambda.
String input − Parameter untuk pawang string input memiliki semua data peristiwa seperti objek S3, detail gateway API, dll.
ILambdaContext context −ILamdaContext adalah antarmuka yang memiliki detail konteks. Ini memiliki detail seperti nama fungsi lambda, detail memori, detail batas waktu, dll.
Penangan Lambda dapat dipanggil secara sinkron dan asinkron. Jika dipanggil dengan cara sinkronisasi seperti yang ditunjukkan di atas, Anda dapat memiliki tipe pengembalian. Jika asinkron dari tipe kembalian harus batal.
Sekarang, mari kita terapkan AWS Lambda C # dan mengujinya. Klik kanan proyek dan klikPublish to AWS Lambda seperti yang ditunjukkan di bawah ini -
Isi Function Name dan klik Next. Layar berikutnya yang ditampilkan adalahAdvanced Function Details seperti yang ditunjukkan -
Masukkan Role Name, Memory dan Timeout. detailsPerhatikan bahwa di sini kami telah memilih peran yang ada yang dibuat dan menggunakan memori sebagai 128MB dan batas waktu sebagai 10 detik. Setelah selesai klikUpload untuk mempublikasikan ke konsol AWS Lambda.
Anda dapat melihat layar berikut setelah fungsi AWS Lambda diunggah. KlikInvokeuntuk menjalankan fungsi AWS Lambda yang dibuat. Saat ini, ini menunjukkan kesalahan karena membutuhkan beberapa masukan sesuai kode yang tertulis.
Sekarang, mari kita masukkan beberapa contoh masukan dan Invokeitu lagi. Perhatikan bahwa di sini kami telah memasukkan beberapa teks di kotak input dan hal yang sama saat mengklikinvokeditampilkan dalam huruf besar di bagian respons. Output log ditampilkan di bawah -
Sekarang, mari kita juga memeriksa konsol AWS untuk melihat apakah fungsi tersebut dibuat karena kita telah menerapkan fungsi dari Visual Studio.
Fungsi Lambda yang dibuat di atas adalah aws lambda using csharp dan hal yang sama ditampilkan di konsol AWS seperti yang ditunjukkan pada tangkapan layar yang diberikan di bawah ini -
Handler Signature
Penangan adalah titik awal untuk dieksekusi AWS. Nama penangan harus didefinisikan sebagai -
ASSEMBLY::TYPE::METHOD
Rincian tanda tangan dijelaskan sebagai berikut -
ASSEMBLY- Ini adalah nama rakitan .NET untuk aplikasi yang dibuat. Ini pada dasarnya adalah nama folder tempat proyek dibuat.
TYPE- Ini adalah nama pawangnya. Ini pada dasarnya adalah namespace.classname.
METHOD - Ini adalah nama penangan fungsi.
Kode untuk tanda tangan penangan seperti yang ditunjukkan di bawah ini -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda3 {
public class Function {
/// <summary>
/// A simple function that takes a string and does a ToUpper
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
}
}
Perhatikan bahwa di sini perakitannya AWSLamda3, Ketik adalah namespace.classname yang AWSLambda3.Function dan Metode adalah FunctionHandler. Jadi, tanda tangan pawang adalahAWSLamda3::AWSLambda3.Function::FunctionHandler
Objek konteks di C #
Objek Konteks memberikan informasi yang berguna tentang runtime di lingkungan AWS. Properti yang tersedia dalam objek konteks seperti yang diperlihatkan dalam tabel berikut -
Sr Tidak | Properti & Deskripsi |
---|---|
1 | MemoryLimitInMB Ini akan memberikan detail memori yang dikonfigurasi untuk fungsi AWS Lambda |
2 | FunctionName Nama fungsi AWS Lambda |
3 | FunctionVersion Versi fungsi AWS Lambda |
4 | InvokedFunctionArn ARN digunakan untuk menjalankan fungsi ini. |
5 | AwsRequestId ID permintaan AWS untuk fungsi AWS dibuat |
6 | LogStreamName Nama aliran log Cloudwatch |
7 | LogGroupName Nama grup Cloudwatch |
8 | ClientContext Informasi tentang aplikasi dan perangkat klien saat digunakan dengan AWS mobile SDK |
9 | Identity Informasi tentang identitas cogbnito amazon saat digunakan dengan AWS mobile SDK |
10 | RemainingTime Sisa waktu eksekusi hingga fungsi tersebut akan dihentikan |
11 | Logger Logger yang terkait dengan konteks |
Contoh
Di bagian ini, mari kita uji beberapa properti di atas di AWS Lambda di C #. Perhatikan kode contoh yang diberikan di bawah ini -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
namespace AWSLambda6 {
public class Function {
/// <summary>
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
}
}
Keluaran terkait yang dapat Anda amati ketika Anda menjalankan kode di atas C# adalah seperti yang ditunjukkan di bawah ini -
Keluaran terkait yang dapat Anda amati ketika Anda menjalankan kode di atas AWS Console adalah seperti yang ditunjukkan di bawah ini -
Logging menggunakan C #
Untuk logging, Anda dapat menggunakan dua fungsi -
context.Logger.Log
LambdaLogger.Log
Perhatikan contoh berikut yang ditunjukkan di sini -
public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");
}
Output yang sesuai untuk kode yang diberikan di atas ditampilkan di sini -
Anda bisa mendapatkan log dari CloudWatch seperti yang ditunjukkan di bawah ini -
Penanganan Kesalahan di C # untuk Fungsi Lambda
Bagian ini membahas tentang penanganan kesalahan di C #. Untuk penanganan kesalahan,Exception kelas harus diperpanjang seperti yang ditunjukkan pada contoh yang ditunjukkan di bawah ini -
contoh
namespace example {
public class AccountAlreadyExistsException : Exception {
public AccountAlreadyExistsException(String message) :
base(message) {
}
}
}
namespace example {
public class Handler {
public static void CreateAccount() {
throw new AccountAlreadyExistsException("Error in AWS Lambda!");
}
}
}
Output yang sesuai untuk kode yang diberikan di atas adalah seperti yang diberikan di bawah ini -
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}