How to Read & Write QR Codes on AWS Lambda

This article was translated from English: Does it need improvement?
Translated
View the article in English
class="container-fluid">
class="row">
class="col-md-2"> Amazon Lambda Architecture Logo related to How to Read & Write QR Codes on AWS Lambda

Dieser How-to-Artikel bietet eine detaillierte Anleitung zur Einrichtung einer AWS Lambda-Funktion mit IronQR. In diesem Tutorial erfahren Sie, wie Sie IronQR konfigurieren, um QR-Codes direkt in einen S3-Bucket zu lesen und zu schreiben.

class="hsg-featured-snippet">

Wie man QR-Codes auf AWS Lambda liest und schreibt

  1. Laden Sie eine C#-Bibliothek herunter, um QR-Codes zu lesen und zu schreiben
  2. Erstellen Sie die AWS Lambda containerisierte Projektvorlage
  3. Passen Sie die Dockerfile- und FunctionHandler-Code an
  4. Erhöhen Sie die Speicher- und Zeitüberschreitungseinstellungen
  5. Stellen Sie die Funktion bereit und rufen Sie sie auf, um die Ergebnisse in S3 zu sehen

Installation

Für diesen Artikel wird ein S3-Bucket verwendet. Daher ist das AWSSDK.S3-Paket erforderlich.

Nutzen Sie IronQR heute kostenlos in Ihrem Projekt.

Erster Schritt:
green arrow pointer

Erstellen Sie ein AWS Lambda-Projekt

Mit Visual Studio ist die Erstellung eines containerisierten AWS Lambda ein einfacher Prozess:

  • Installieren Sie das AWS Toolkit für Visual Studio
  • Wählen Sie ein 'AWS Lambda Project (.NET Core - C#)'
  • Wählen Sie eine '.NET 8 (Container Image)' Blaupause aus und wählen dann 'Fertigstellen'.

Container Image auswählen

Abhängigkeitspakete hinzufügen

Die IronQR-Bibliothek in .NET 8 arbeitet auf AWS Lambda ohne zusätzliche Abhängigkeiten. Um es zu konfigurieren, ändern Sie die Dockerfile des Projekts wie unten gezeigt:

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"  .

Ändern Sie den FunctionHandler-Code

Dieses Beispiel erstellt einen QR-Code, lädt ihn in einen S3-Bucket hoch und liest den neu generierten QR-Code.

Der Dateipfad wird im IronQrNuget-Verzeichnis angegeben, wobei ein global eindeutiger Bezeichner (GUID) als Dateiname verwendet wird. Die Write-Methode generiert den QR-Code basierend auf dem bereitgestellten Wert, und das resultierende JPG-Byte-Array wird dann an die Read-Methode übergeben, um den QR-Code zu lesen. Dies zeigt, dass diese AWS Lambda-Funktion QR-Codes lesen kann.

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(ByVal 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 item
			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(ByVal bucketName As String, ByVal objectKey As String, ByVal jpgBytes() As Byte) As Task
			Using memoryStream As New MemoryStream(jpgBytes)
				Dim request = New PutObjectRequest With {
					.BucketName = bucketName,
					.Key = objectKey,
					.InputStream = memoryStream,
					.ContentType = "image/jpg"
				}

				Await _s3Client.PutObjectAsync(request)
			End Using
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Erhöhen Sie Speicher und Timeout

Die Speicherzuweisung für die Lambda-Funktion hängt von der Größe der Dokumente und der Anzahl ab, die gleichzeitig verarbeitet werden. Als Ausgangspunkt setzen Sie den Speicher auf 512 MB und die Zeitüberschreitung auf 300 Sekunden in der aws-lambda-tools-defaults.json.

"function-memory-size" : 512,
"function-timeout" : 300

Wenn der Speicher nicht ausreicht, wird das Programm den Fehler auslösen: 'Runtime exited with error: signal: killed.' Durch Erhöhen der Speichergröße kann dieses Problem behoben werden. Für weitere Anleitungen lesen Sie den Fehlerbehebungsartikel: AWS Lambda - Laufzeit beendete Signal: Killed.

Veröffentlichen

Um in Visual Studio zu veröffentlichen, klicken Sie einfach mit der rechten Maustaste auf das Projekt und wählen Sie 'Publish to AWS Lambda...'. Konfigurieren Sie dann die erforderlichen Einstellungen. Für weitere Informationen besuchen Sie die AWS-Website.

Probieren Sie es aus!

Sie können die Lambda-Funktion entweder über die Lambda-Konsole oder über Visual Studio aktivieren.

Häufig gestellte Fragen

Wie kann ich eine QR-Code-Bibliothek in mein C#-Projekt auf AWS Lambda integrieren?

Sie können eine QR-Code-Bibliothek wie IronQR in Ihr C#-Projekt auf AWS Lambda integrieren, indem Sie die IronQR-Bibliothek herunterladen, ein containerisiertes AWS-Lambda-Projekt mit Visual Studio erstellen und Ihre Umgebung für QR-Code-Operationen konfigurieren.

Welche Schritte sind erforderlich, um IronQR für AWS Lambda zu konfigurieren?

Konfigurieren Sie IronQR für AWS Lambda, indem Sie eine containerisierte Projektvorlage in Visual Studio einrichten, den Dockerfile ändern, den FunctionHandler aktualisieren und Speicher- sowie Timeout-Einstellungen anpassen, um einen reibungslosen Betrieb zu gewährleisten.

Wie verwalte ich QR-Codes mit AWS S3 unter Verwendung einer C#-Bibliothek?

Mit IronQR können Sie QR-Codes erstellen, in AWS-S3-Buckets hochladen und von dort lesen. Dies beinhaltet die Verwendung der IronQR-Bibliothek in Kombination mit dem AWSSDK.S3-Paket zur Verwaltung von Operationen mit S3-Buckets.

Was sollte ich tun, wenn meine AWS Lambda-Funktion mit IronQR nicht gut funktioniert?

Wenn Ihre AWS Lambda-Funktion nicht gut funktioniert, ziehen Sie in Betracht, die Speicher- und Timeout-Einstellungen in Ihrer aws-lambda-tools-defaults.json-Datei zu erhöhen, um der Funktion mehr Ressourcen zuzuweisen.

Wie kann ich eine C#-Lambda-Funktion auf AWS bereitstellen?

Stellen Sie eine C#-Lambda-Funktion auf AWS bereit, indem Sie die Option 'Publish to AWS Lambda...' in Visual Studio verwenden, die erforderlichen Einstellungen konfigurieren und das AWS Toolkit für die Bereitstellung nutzen.

Ist es möglich, meine AWS Lambda-Funktion in Visual Studio zu testen?

Ja, Sie können Ihre AWS Lambda-Funktion in Visual Studio testen, indem Sie das AWS Toolkit verwenden, um die Funktion aufzurufen und deren Ausgabe direkt in Ihrer Entwicklungsumgebung zu überprüfen.

Wie kann ich Speicherprobleme mit meiner AWS Lambda-Funktion beheben?

Um Speicherprobleme zu beheben, erhöhen Sie die Speicherzuweisung der Funktion in der aws-lambda-tools-defaults.json-Datei und überwachen die Leistung der Funktion nach der erneuten Bereitstellung.

Welche Wichtigkeit hat das Ändern des Dockerfile in einem AWS Lambda-Projekt?

Das Ändern des Dockerfile in einem AWS Lambda-Projekt ist entscheidend für die korrekte Einrichtung der Umgebung, einschließlich der Aktualisierung von Repositories und der Kopie von notwendigen Build-Artefakten für die ordnungsgemäße Ausführung der Funktion.

Wie stelle ich sicher, dass meine AWS Lambda-Funktion QR-Code-Operationen effizient handhabt?

Stellen Sie sicher, dass Ihre AWS Lambda-Funktion QR-Code-Operationen effizient handhabt, indem Sie Speicher- und Timeout-Einstellungen optimieren, geeignete Bibliotheken wie IronQR verwenden und Dockerfile und Projekteinstellungen korrekt konfigurieren.

Kann ich die Generierung und den Abruf von QR-Codes in AWS Lambda automatisieren?

Ja, Sie können die Generierung und den Abruf von QR-Codes in AWS Lambda mithilfe von IronQR automatisieren. Die Bibliothek ermöglicht es Ihnen, QR-Codes programmgesteuert zu erstellen, in S3 hochzuladen und bei Bedarf wieder auszulesen.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 47,669 | Version: 2025.11 gerade veröffentlicht