AWS Lambda - C # işlevinde
Bu bölüm size C # dilinde AWS Lambda işleviyle nasıl çalışılacağını ayrıntılı olarak açıklayacaktır. Burada, kodu yazıp AWS Lambda'ya dağıtmak için visual studio kullanacağız. Visual Studio'nun yüklenmesi ve AWS araç setinin Visual Studio'ya eklenmesiyle ilgili herhangi bir bilgi ve yardım için lütfen şu adrese bakın:IntroductionBu eğitimdeki bölüm. Visual Studio kurulumunu tamamladığınızda, lütfen aşağıda verilen adımları izleyin. Daha iyi bir anlayış için ilgili ekran görüntülerine bakın -
Aşama 1
Visual Studio'nuzu açın ve yeni proje oluşturmak için adımları izleyin. TıklamakFile -> New -> Project.
Adım 2
Şimdi, seçtiğiniz yerde aşağıdaki ekran görüntülenir. AWS Lambda for Visual C#. SeçinizAWS Lambda Project (.NET Core).
Gerekirse adı değiştirebilirsiniz, burada varsayılan ad kalacaktır. TıklayınOK devam etmek.
Sonraki adımda sizden bir Blueprint.
Seçiniz Empty function bu örnek için ve tıklayın Finish. Aşağıda gösterildiği gibi yeni bir proje yapısı oluşturacaktır -
Şimdi seçin Function.cs AWS Lambda için olay ve bağlam içeren işleyicinin oluşturulduğu ana dosyadır.
Functions.cs dosyasının görüntüsü aşağıdaki gibidir -
Giriş ve çıkış parametrelerini AWS Lambda işlevine serileştirmek için aşağıda verilen komutu kullanabilirsiniz.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
C # için İşleyici Ayrıntıları
İşleyici şu şekilde görüntülenir -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Yukarıdaki kodun çeşitli bileşenleri aşağıda açıklanmıştır -
FunctionHandler −Bu, C # AWS Lambda işlevinin başlangıç noktasıdır.
String input − İşleyicinin parametreleri string input S3 nesnesi, API ağ geçidi ayrıntıları vb. gibi tüm olay verilerine sahiptir.
ILambdaContext context −ILamdaContext, bağlam ayrıntılarına sahip bir arabirimdir. Lambda işlev adı, bellek ayrıntıları, zaman aşımı ayrıntıları vb. Gibi ayrıntılara sahiptir.
Lambda işleyicisi eşzamanlı ve eşzamansız bir şekilde çağrılabilir. Yukarıda gösterildiği gibi senkronize bir şekilde çağrılırsa, dönüş türüne sahip olabilirsiniz. Eşzamansızsa, dönüş türünün geçersiz olması gerekir.
Şimdi, AWS Lambda C #'yi dağıtalım ve aynısını test edelim. Projeye sağ tıklayın ve tıklayınPublish to AWS Lambda aşağıda gösterildiği gibi -
Doldurun Function Name ve tıklayın Next. Görüntülenen bir sonraki ekran,Advanced Function Details gösterildiği gibi -
Giriş Role Name, Memory ve Timeout. Ayrıntılar Burada yaratılan ve kullanılan belleği 128MB ve zaman aşımını 10 saniye olarak seçtiğimizi unutmayın. Bittiğinde tıklayınUpload AWS Lambda konsolunda yayınlamak için.
AWS Lambda işlevi yüklendiğinde aşağıdaki ekranı görebilirsiniz. TıklayınInvokeoluşturulan AWS Lambda işlevini çalıştırmak için. Şu anda, yazılan koda göre bazı girdilere ihtiyaç duyduğu için hata gösteriyor.
Şimdi, bazı örnek girişler girelim ve Invoketekrar dene. Burada giriş kutusuna bir metin girdiğimizi ve aynı şeyi tıkladığımızı unutmayın.invokeyanıt bölümünde büyük harfle görüntülenir. Günlük çıktısı aşağıda gösterilmektedir -
Şimdi, işlevi Visual Studio'dan dağıtırken, işlevin oluşturulup oluşturulmadığını görmek için AWS konsolunu da kontrol edelim.
Yukarıda oluşturulan Lambda işlevi aws lambda using csharp ve aynısı aşağıda verilen ekran görüntülerinde gösterildiği gibi AWS konsolunda görüntülenir -
İşleyici İmzası
İşleyici, AWS'nin yürütmesi için başlangıç noktasıdır. İşleyicinin adı şu şekilde tanımlanmalıdır -
ASSEMBLY::TYPE::METHOD
İmza detayları aşağıda açıklanmıştır -
ASSEMBLY- Bu, oluşturulan uygulama için .NET derlemesinin adıdır. Temelde projenin oluşturulduğu klasörün adıdır.
TYPE- Bu, işleyicinin adıdır. Bu temelde namespace.classname'dir.
METHOD - Bu, işlev işleyicisinin adıdır.
İşleyici imzası kodu aşağıda gösterildiği gibidir -
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();
}
}
}
Burada montajın AWSLamda3, Type is namespace.classname olan AWSLambda3.Function ve Yöntem FunctionHandler. Böylece, işleyici imzasıAWSLamda3::AWSLambda3.Function::FunctionHandler
C # 'da bağlam nesnesi
Context Object, AWS ortamındaki çalışma zamanı hakkında yararlı bilgiler verir. Bağlam nesnesinde bulunan özellikler aşağıdaki tabloda gösterildiği gibidir -
Sr.No | Özellikler ve Açıklama |
---|---|
1 | MemoryLimitInMB Bu, AWS Lambda işlevi için yapılandırılan belleğin ayrıntılarını verecektir |
2 | FunctionName AWS Lambda işlevinin adı |
3 | FunctionVersion AWS Lambda işlevinin sürümü |
4 | InvokedFunctionArn ARN bu işlevi çağırmak için kullanılır. |
5 | AwsRequestId Oluşturulan AWS işlevi için AWS istek kimliği |
6 | LogStreamName Cloudwatch günlük akışı adı |
7 | LogGroupName Cloudwatch grup adı |
8 | ClientContext AWS mobil SDK ile kullanıldığında istemci uygulaması ve cihazı hakkında bilgiler |
9 | Identity AWS mobil SDK ile kullanıldığında amazon cogbnito kimliği hakkında bilgiler |
10 | RemainingTime İşlev sonlandırılana kadar kalan yürütme süresi |
11 | Logger Bağlamla ilişkili kaydedici |
Misal
Bu bölümde, yukarıdaki özelliklerden bazılarını AWS Lambda'da C # ile test edelim. Aşağıda verilen örnek kodu inceleyin -
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");
}
}
}
Yukarıdaki kodu çağırdığınızda gözlemleyebileceğiniz ilgili çıktı C# aşağıda gösterildiği gibidir -
Yukarıdaki kodu çağırdığınızda gözlemleyebileceğiniz ilgili çıktı AWS Console aşağıda gösterildiği gibidir -
C # kullanarak günlük kaydı
Günlük kaydı için iki işlevi kullanabilirsiniz -
context.Logger.Log
LambdaLogger.Log
Burada gösterilen aşağıdaki örneği inceleyin -
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");
}
Yukarıda verilen koda karşılık gelen çıktı burada gösterilmektedir -
Günlükleri CloudWatch'tan aşağıda gösterildiği gibi alabilirsiniz -
Lambda İşlevi için C # 'da Hata İşleme
Bu bölümde C # 'da hata işleme anlatılmaktadır. Hata işleme için,Exception sınıf aşağıda gösterilen örnekte gösterildiği gibi uzatılmalıdır -
misal
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!");
}
}
}
Yukarıda verilen koda karşılık gelen çıktı aşağıda verildiği gibidir -
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}