Jak odczytywać i zapisywać kody QR na AWS Lambda
Ten artykuł zawiera szczegółowy przewodnik dotyczący konfigurowania funkcji AWS Lambda z IronQR. W tym tutorialu dowiesz się, jak skonfigurować IronQR do odczytywania i zapisywania kodów QR bezpośrednio w zasobniku S3.
Jak odczytywać i zapisywać kody QR na AWS Lambda
- Pobierz bibliotekę C# do odczytywania i zapisywania kodów QR
- Utwórz kontenerowy szablon projektu AWS Lambda
- Zmodyfikuj Dockerfile i kod FunctionHandler
- Zwiększ ustawienia pamięci i limitu czasu
- Wdróż i wywołaj funkcję, aby zobaczyć wyniki w S3
Instalacja
Ten artykuł wykorzystuje kosz S3, więc wymagany jest pakiet AWSSDK.S3.
Rozpocznij używanie IronQR w swoim projekcie już dziś dzięki darmowej wersji próbnej.
Utwórz projekt AWS Lambda
Dzięki Visual Studio tworzenie kontenerowej funkcji AWS Lambda jest łatwym procesem:
- Zainstaluj AWS Toolkit for Visual Studio
- Wybierz "Projekt AWS Lambda (.NET Core – C#)"
- Wybierz szablon ".NET 8 (obraz kontenera)", a następnie kliknij "Zakończ".

Dodaj zależności pakietów
Biblioteka IronQR w .NET 8 działa na AWS Lambda bez konieczności instalowania dodatkowych zależności. Aby ją skonfigurować, zmodyfikuj Dockerfile projektu jak poniżej:
FROM public.ecr.aws/lambda/dotnet:8
# Install necessary packages and update repositories
RUN dnf update -y
WORKDIR /var/task
# This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image.
# The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built
# with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
# will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
# set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
#
# Alternatively, Docker multi-stage build could be used to build the .NET Lambda project inside the image.
# For more information on this approach, check out the project's README.md file.
COPY "bin/Release/lambda-publish" .
Modyfikacja kodu FunctionHandler
Ten przykład tworzy kod QR, przesyła go do zasobnika S3 i odczytuje nowo wygenerowany kod QR.
Ścieżka pliku jest określona w katalogu IronQrNuGet, a jako nazwa pliku używany jest unikalny globalnie identyfikator (GUID). Metoda Write generuje kod QR na podstawie podanej wartości, a wynikowa tablica bajtów JPG jest następnie przekazywana do metody Read w celu odczytania kodu QR. To pokazuje, że ta funkcja AWS Lambda jest zdolna do odczytywania kodów QR.
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronQr;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace IronQrNuGetAwsLambda
{
public class Function
{
private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);
/// <summary>
/// Main handler for AWS Lambda
/// </summary>
/// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
/// <returns></returns>
public async Task FunctionHandler(ILambdaContext context)
{
// Set the license key for IronQR
IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01";
string bucketName = "deploymenttestbucket";
string objectKey = $"IronQrNuGet/{Guid.NewGuid()}.png";
try
{
// Create a QR code with the content "12345"
var myQr = QrWriter.Write("12345");
context.Logger.LogLine("QR created.");
// Upload the JPG to S3
await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg());
context.Logger.LogLine($"QR uploaded successfully to {bucketName}/{objectKey}");
// Read the QR code
QrImageInput imageInput = new QrImageInput(myQr.Save());
QrReader reader = new QrReader();
var resultFromByte = reader.Read(imageInput);
foreach (var item in resultFromByte)
{
// Log the read value
context.Logger.LogLine($"QR value is = {item.Value}");
}
}
catch (Exception e)
{
context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
}
}
// Function to upload the JPG file to S3
private async Task UploadJpgToS3Async(string bucketName, string objectKey, byte[] jpgBytes)
{
using (var memoryStream = new MemoryStream(jpgBytes))
{
var request = new PutObjectRequest
{
BucketName = bucketName,
Key = objectKey,
InputStream = memoryStream,
ContentType = "image/jpg",
};
await _s3Client.PutObjectAsync(request);
}
}
}
}
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronQr;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace IronQrNuGetAwsLambda
{
public class Function
{
private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);
/// <summary>
/// Main handler for AWS Lambda
/// </summary>
/// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
/// <returns></returns>
public async Task FunctionHandler(ILambdaContext context)
{
// Set the license key for IronQR
IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01";
string bucketName = "deploymenttestbucket";
string objectKey = $"IronQrNuGet/{Guid.NewGuid()}.png";
try
{
// Create a QR code with the content "12345"
var myQr = QrWriter.Write("12345");
context.Logger.LogLine("QR created.");
// Upload the JPG to S3
await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg());
context.Logger.LogLine($"QR uploaded successfully to {bucketName}/{objectKey}");
// Read the QR code
QrImageInput imageInput = new QrImageInput(myQr.Save());
QrReader reader = new QrReader();
var resultFromByte = reader.Read(imageInput);
foreach (var item in resultFromByte)
{
// Log the read value
context.Logger.LogLine($"QR value is = {item.Value}");
}
}
catch (Exception e)
{
context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
}
}
// Function to upload the JPG file to S3
private async Task UploadJpgToS3Async(string bucketName, string objectKey, byte[] jpgBytes)
{
using (var memoryStream = new MemoryStream(jpgBytes))
{
var request = new PutObjectRequest
{
BucketName = bucketName,
Key = objectKey,
InputStream = memoryStream,
ContentType = "image/jpg",
};
await _s3Client.PutObjectAsync(request);
}
}
}
}
Imports Amazon.Lambda.Core
Imports Amazon.S3
Imports Amazon.S3.Model
Imports IronQr
' Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
<Assembly: LambdaSerializer(GetType(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))>
Namespace IronQrNuGetAwsLambda
Public Class Function
Private Shared ReadOnly _s3Client As IAmazonS3 = New AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1)
''' <summary>
''' Main handler for AWS Lambda
''' </summary>
''' <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
''' <returns></returns>
Public Async Function FunctionHandler(context As ILambdaContext) As Task
' Set the license key for IronQR
IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01"
Dim bucketName As String = "deploymenttestbucket"
Dim objectKey As String = $"IronQrNuGet/{Guid.NewGuid()}.png"
Try
' Create a QR code with the content "12345"
Dim myQr = QrWriter.Write("12345")
context.Logger.LogLine("QR created.")
' Upload the JPG to S3
Await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg())
context.Logger.LogLine($"QR uploaded successfully to {bucketName}/{objectKey}")
' Read the QR code
Dim imageInput As New QrImageInput(myQr.Save())
Dim reader As New QrReader()
Dim resultFromByte = reader.Read(imageInput)
For Each item In resultFromByte
' Log the read value
context.Logger.LogLine($"QR value is = {item.Value}")
Next
Catch e As Exception
context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}")
End Try
End Function
' Function to upload the JPG file to S3
Private Async Function UploadJpgToS3Async(bucketName As String, objectKey As String, jpgBytes As Byte()) As Task
Using memoryStream As New MemoryStream(jpgBytes)
Dim request As New PutObjectRequest With {
.BucketName = bucketName,
.Key = objectKey,
.InputStream = memoryStream,
.ContentType = "image/jpg"
}
Await _s3Client.PutObjectAsync(request)
End Using
End Function
End Class
End Namespace
Zwiększ pamięć i limit czasu
Przydział pamięci dla funkcji Lambda zależy od wielkości dokumentów i liczby przetwarzanych jednocześnie. Na początek ustaw pamięć na 512 MB i limit czasu na 300 sekund w aws-lambda-tools-defaults.json.
"function-memory-size" : 512,
"function-timeout" : 300
Jeśli pamięć jest niewystarczająca, program wywoła błąd: 'Runtime exited with error: signal: killed.' Zwiększenie rozmiaru pamięci może pomóc w rozwiązaniu tego problemu. Aby uzyskać dalsze wskazówki, zapoznaj się z artykułem rozwiązywania problemów: AWS Lambda - Runtime Exited Signal: Killed.
Opublikuj
Aby opublikować w Visual Studio, wystarczy kliknąć prawym przyciskiem myszy projekt i wybrać 'Publish to AWS Lambda...' Następnie skonfiguruj wymagane ustawienia. Więcej informacji znajdziesz na stronie AWS.
Wypróbuj!
Funkcję Lambda można aktywować za pomocą konsoli Lambda lub programu Visual Studio.
Często Zadawane Pytania
Jak mogę zintegrować bibliotekę kodów QR z moim projektem C# na AWS Lambda?
Możesz zintegrować bibliotekę kodów QR, taką jak IronQR, ze swoim projektem C# w AWS Lambda, pobierając bibliotekę IronQR, tworząc kontenerowy projekt AWS Lambda za pomocą Visual Studio i konfigurując swoje środowisko tak, aby obsługiwało operacje związane z kodami QR.
Jakie kroki należy wykonać, aby skonfigurować IronQR dla AWS Lambda?
Skonfiguruj IronQR dla AWS Lambda, tworząc szablon projektu kontenerowego w Visual Studio, modyfikując plik Dockerfile, aktualizując FunctionHandler oraz dostosowując ustawienia pamięci i limitów czasu, aby zapewnić płynne działanie.
Jak zarządzać kodami QR w AWS S3 przy użyciu biblioteki C#?
Za pomocą IronQR można zarządzać kodami QR poprzez tworzenie, przesyłanie i odczytywanie ich z zasobników AWS S3. Wymaga to użycia biblioteki IronQR w połączeniu z pakietem AWSSDK.S3 do obsługi operacji z zasobnikami S3.
Co należy zrobić, jeśli funkcja AWS Lambda korzystająca z IronQR nie działa prawidłowo?
Jeśli Twoja funkcja AWS Lambda nie działa prawidłowo, rozważ zwiększenie ustawień pamięci i limitu czasu w pliku aws-lambda-tools-defaults.json, aby przydzielić więcej zasobów dla tej funkcji.
Jak wdrożyć funkcję Lambda w języku C# w AWS?
Wdroż funkcję Lambda w AWS, korzystając z opcji „Publish to AWS Lambda...” w Visual Studio, konfigurując niezbędne ustawienia i wykorzystując AWS Toolkit do wdrożenia.
Czy można przetestować moją funkcję AWS Lambda w Visual Studio?
Tak, możesz przetestować swoją funkcję AWS Lambda w Visual Studio, używając zestawu narzędzi AWS Toolkit do wywołania funkcji i sprawdzenia jej wyników bezpośrednio w swoim środowisku programistycznym.
Jak mogę rozwiązać problemy z pamięcią w mojej funkcji AWS Lambda?
Aby rozwiązać problemy z pamięcią, zwiększ przydział pamięci funkcji w pliku aws-lambda-tools-defaults.json i monitoruj wydajność funkcji po ponownym wdrożeniu.
What is the importance of modifying the Dockerfile in an AWS Lambda project?
Modifying the Dockerfile in an AWS Lambda project is crucial for setting up the environment correctly, including updating repositories and copying necessary build artifacts for the function to execute properly.
How do I ensure my AWS Lambda function handles QR code operations efficiently?
Ensure your AWS Lambda function handles QR code operations efficiently by optimizing memory and timeout settings, using proper libraries like IronQR, and configuring the Dockerfile and project settings correctly.
Can I automate QR code generation and retrieval in AWS Lambda?
Yes, you can automate QR code generation and retrieval in AWS Lambda using IronQR. The library allows you to programmatically create QR codes, upload them to S3, and read them back as needed.

