How to Read & Write Barcode 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"> AWS Lambda

Dieser Leitartikel bietet eine umfassende Anleitung zur Einrichtung einer AWS Lambda-Funktion mit IronBarcode. In diesem Leitfaden lernen Sie, wie Sie IronBarcode konfigurieren, um von einem S3-Bucket Barcodes zu lesen und Barcodes darauf zu schreiben.

class="hsg-featured-snippet">

Wie man Barcode auf AWS Lambda liest und schreibt

  1. Laden Sie eine C#-Bibliothek zum Lesen und Schreiben von Barcodes herunter
  2. Erstellen und wählen Sie die Projektvorlage aus
  3. Modifizieren Sie den FunctionHandler-Code
  4. Konfigurieren und bereitstellen Sie das Projekt
  5. Rufen Sie die Funktion auf und überprüfen Sie die Ergebnisse in S3

Installation

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

Verwendung von IronBarcode Zip

Wenn Sie IronBarcode ZIP verwenden, ist es wichtig, den temporären Ordner festzulegen.

var awsTmpPath = @"/tmp/";
IronBarCode.Installation.DeploymentPath = awsTmpPath;
var awsTmpPath = @"/tmp/";
IronBarCode.Installation.DeploymentPath = awsTmpPath;
Dim awsTmpPath = "/tmp/"
IronBarCode.Installation.DeploymentPath = awsTmpPath
$vbLabelText   $csharpLabel

Das Microsoft.ML.OnnxRuntime-Paket ist zum Lesen von Barcodes erforderlich. Während das Schreiben von Barcodes auch ohne funktioniert, basiert der Standardmodus für das Lesen auf maschinellem Lernen (ML). Wenn Sie auf einen Lesemodus umschalten, der kein ML verwendet, wird das Paket nicht benötigt.

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 IronBarcode-Bibliothek in .NET 8 funktioniert auf AWS Lambda ohne zusätzliche Abhängigkeiten. Um es einzurichten, aktualisieren Sie die Docker-Datei des Projekts wie folgt:

FROM public.ecr.aws/lambda/dotnet:8

# Install necessary packages
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 generiert einen EAN8-Barcode, lädt ihn in einen S3-Bucket hoch und liest den neu erstellten Barcode. Beim Verwenden von IronBarcode ZIP ist die Konfiguration des temporären Ordners entscheidend, da die Bibliothek Schreibberechtigungen benötigt, um den Laufzeitordner von den DLLs zu kopieren.

using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronBarCode;

// 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 IronBarcodeZipAwsLambda;

public class Function
{
    private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

    /// <summary>
    /// AWS Lambda Function Handler. It generates a barcode, uploads it to S3, and then reads it.
    /// </summary>
    /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
    public async Task FunctionHandler(ILambdaContext context)
    {
        var awsTmpPath = @"/tmp/";
        IronBarCode.Installation.DeploymentPath = awsTmpPath;

        // Set your IronBarcode license key here
        IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";

        string filename = Guid.NewGuid().ToString();
        string bucketName = "deploymenttestbucket";
        string objectKey = $"IronBarcodeZip/{filename}.png";

        try
        {
            // Creating a barcode with EAN8 encoding
            var myBarcode = BarcodeWriter.CreateBarcode("1212345", BarcodeWriterEncoding.EAN8);

            context.Logger.LogLine($"Barcode created.");

            // Upload the PNG image of the barcode to the specified S3 bucket
            await UploadPngToS3Async(bucketName, objectKey, myBarcode.ToPngBinaryData());
            context.Logger.LogLine($"Barcode uploaded successfully to {bucketName}/{objectKey}");

            // Read and log the barcode value from the PNG binary data
            var resultFromByte = BarcodeReader.Read(myBarcode.ToPngBinaryData());
            foreach (var item in resultFromByte)
            {
                context.Logger.LogLine($"Barcode value is = {item.Value}");
            }
        }
        catch (Exception e)
        {
            context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
        }
    }

    /// <summary>
    /// Uploads a PNG byte array to the specified S3 bucket.
    /// </summary>
    /// <param name="bucketName">The name of the S3 bucket.</param>
    /// <param name="objectKey">The object key for the uploaded file in the bucket.</param>
    /// <param name="pdfBytes">Byte array of the PNG to be uploaded.</param>
    private async Task UploadPngToS3Async(string bucketName, string objectKey, byte[] pdfBytes)
    {
        using (var memoryStream = new MemoryStream(pdfBytes))
        {
            var request = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = objectKey,
                InputStream = memoryStream,
                ContentType = "image/png",
            };

            await _s3Client.PutObjectAsync(request);
        }
    }
}
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronBarCode;

// 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 IronBarcodeZipAwsLambda;

public class Function
{
    private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

    /// <summary>
    /// AWS Lambda Function Handler. It generates a barcode, uploads it to S3, and then reads it.
    /// </summary>
    /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
    public async Task FunctionHandler(ILambdaContext context)
    {
        var awsTmpPath = @"/tmp/";
        IronBarCode.Installation.DeploymentPath = awsTmpPath;

        // Set your IronBarcode license key here
        IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";

        string filename = Guid.NewGuid().ToString();
        string bucketName = "deploymenttestbucket";
        string objectKey = $"IronBarcodeZip/{filename}.png";

        try
        {
            // Creating a barcode with EAN8 encoding
            var myBarcode = BarcodeWriter.CreateBarcode("1212345", BarcodeWriterEncoding.EAN8);

            context.Logger.LogLine($"Barcode created.");

            // Upload the PNG image of the barcode to the specified S3 bucket
            await UploadPngToS3Async(bucketName, objectKey, myBarcode.ToPngBinaryData());
            context.Logger.LogLine($"Barcode uploaded successfully to {bucketName}/{objectKey}");

            // Read and log the barcode value from the PNG binary data
            var resultFromByte = BarcodeReader.Read(myBarcode.ToPngBinaryData());
            foreach (var item in resultFromByte)
            {
                context.Logger.LogLine($"Barcode value is = {item.Value}");
            }
        }
        catch (Exception e)
        {
            context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
        }
    }

    /// <summary>
    /// Uploads a PNG byte array to the specified S3 bucket.
    /// </summary>
    /// <param name="bucketName">The name of the S3 bucket.</param>
    /// <param name="objectKey">The object key for the uploaded file in the bucket.</param>
    /// <param name="pdfBytes">Byte array of the PNG to be uploaded.</param>
    private async Task UploadPngToS3Async(string bucketName, string objectKey, byte[] pdfBytes)
    {
        using (var memoryStream = new MemoryStream(pdfBytes))
        {
            var request = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = objectKey,
                InputStream = memoryStream,
                ContentType = "image/png",
            };

            await _s3Client.PutObjectAsync(request);
        }
    }
}
Imports Amazon.Lambda.Core
Imports Amazon.S3
Imports Amazon.S3.Model
Imports IronBarCode

' 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 IronBarcodeZipAwsLambda

	Public Class [Function]
		Private Shared ReadOnly _s3Client As IAmazonS3 = New AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1)

		''' <summary>
		''' AWS Lambda Function Handler. It generates a barcode, uploads it to S3, and then reads it.
		''' </summary>
		''' <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
		Public Async Function FunctionHandler(ByVal context As ILambdaContext) As Task
			Dim awsTmpPath = "/tmp/"
			IronBarCode.Installation.DeploymentPath = awsTmpPath

			' Set your IronBarcode license key here
			IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01"

			Dim filename As String = Guid.NewGuid().ToString()
			Dim bucketName As String = "deploymenttestbucket"
			Dim objectKey As String = $"IronBarcodeZip/{filename}.png"

			Try
				' Creating a barcode with EAN8 encoding
				Dim myBarcode = BarcodeWriter.CreateBarcode("1212345", BarcodeWriterEncoding.EAN8)

				context.Logger.LogLine($"Barcode created.")

				' Upload the PNG image of the barcode to the specified S3 bucket
				Await UploadPngToS3Async(bucketName, objectKey, myBarcode.ToPngBinaryData())
				context.Logger.LogLine($"Barcode uploaded successfully to {bucketName}/{objectKey}")

				' Read and log the barcode value from the PNG binary data
				Dim resultFromByte = BarcodeReader.Read(myBarcode.ToPngBinaryData())
				For Each item In resultFromByte
					context.Logger.LogLine($"Barcode value is = {item.Value}")
				Next item
			Catch e As Exception
				context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}")
			End Try
		End Function

		''' <summary>
		''' Uploads a PNG byte array to the specified S3 bucket.
		''' </summary>
		''' <param name="bucketName">The name of the S3 bucket.</param>
		''' <param name="objectKey">The object key for the uploaded file in the bucket.</param>
		''' <param name="pdfBytes">Byte array of the PNG to be uploaded.</param>
		Private Async Function UploadPngToS3Async(ByVal bucketName As String, ByVal objectKey As String, ByVal pdfBytes() As Byte) As Task
			Using memoryStream As New MemoryStream(pdfBytes)
				Dim request = New PutObjectRequest With {
					.BucketName = bucketName,
					.Key = objectKey,
					.InputStream = memoryStream,
					.ContentType = "image/png"
				}

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

Vor dem try-Block wird das Dateiziel auf das IronBarcodeZip-Verzeichnis gesetzt, wobei der Name als global eindeutiger Bezeichner (GUID) generiert wird. Methode CreateBarcode wird zur Generierung des Barcodes verwendet. Danach wird das PNG-Byte-Array an die Read-Methode übergeben, um den Barcode zu lesen. Dies zeigt, dass die AWS Lambda-Funktion in der Lage ist, Barcodes zu lesen.

The Read method also accepts a BarcodeReaderOptions object, which you can customize to enable features such as reading multiple barcodes, targeting specific areas, using asynchronous and multithreaded processing, applying image correction filters, and much more.

Erhöhen Sie Speicher und Timeout

Die Menge des in der Lambda-Funktion zugewiesenen Speichers hängt von der Größe der zu verarbeitenden Dokumente und der Anzahl der gleichzeitig verarbeiteten Dokumente ab. Als Ausgangspunkt stellen Sie den Speicher auf 512 MB und das Timeout auf 300 Sekunden in aws-lambda-tools-defaults.json ein.

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

Wenn der Speicher nicht ausreicht, wirft das Programm den Fehler: 'Runtime exited with error: signal: killed.' Eine Erhöhung der Speichergröße kann dieses Problem lösen. Weitere Details finden Sie im Artikel zur Fehlerbehebung: AWS Lambda - Runtime Exited Signal: Killed.

Veröffentlichen

Um in Visual Studio zu veröffentlichen, klicken Sie mit der rechten Maustaste auf das Projekt und wählen 'Publish to AWS Lambda...', dann die erforderlichen Einstellungen konfigurieren. Weitere Informationen zum Veröffentlichen von Lambda finden Sie auf der 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 richte ich das Lesen und Schreiben von Barcodes auf AWS Lambda ein?

Um das Lesen und Schreiben von Barcodes auf AWS Lambda einzurichten, verwenden Sie die IronBarcode-Bibliothek, indem Sie sie herunterladen und ein AWS Lambda-Projekt mit Visual Studio erstellen. Ändern Sie den FunctionHandler-Code, um Barcode-Operationen zu handhaben, konfigurieren Sie die Projekteinstellungen und stellen Sie es bereit. Stellen Sie sicher, dass notwendige Paketabhängigkeiten wie AWSSDK.S3 enthalten sind.

Welche Pakete sind für die Barcode-Verarbeitung auf AWS Lambda erforderlich?

Für die Barcode-Verarbeitung auf AWS Lambda binden Sie das AWSSDK.S3-Paket für S3-Interaktionen ein und optional das Microsoft.ML.OnnxRuntime-Paket für fortgeschrittenes maschinelles Lernen beim Barcode-Lesen, was möglicherweise nicht erforderlich ist, wenn Sie Standardmethoden zum Barcode-Lesen verwenden.

Wie kann ich den FunctionHandler-Code in AWS Lambda für Barcode-Aufgaben modifizieren?

Ändern Sie den FunctionHandler-Code, um Barcodes mit IronBarcode zu erstellen und zu lesen. Stellen Sie sicher, dass Sie den IronBarcode-Lizenzschlüssel festlegen und den temporären Ordner für den ordnungsgemäßen Betrieb der IronBarcode-ZIP-Dateien konfigurieren.

Wie erhöhe ich den Speicher und das Timeout für eine AWS Lambda-Funktion, die Barcodes verarbeitet?

Passen Sie die Speicher- und Timeout-Einstellungen in der aws-lambda-tools-defaults.json-Datei an, indem Sie die function-memory-size auf 512 MB und das function-timeout auf 300 Sekunden setzen, um den Bedürfnissen der Barcode-Verarbeitung mit IronBarcode gerecht zu werden.

Wie veröffentliche ich eine Lambda-Funktion mit Visual Studio zur Barcode-Verarbeitung?

Veröffentlichen Sie die Lambda-Funktion, indem Sie mit der rechten Maustaste auf das Projekt in Visual Studio klicken, 'Publish to AWS Lambda...' auswählen und die Einstellungen konfigurieren. Folgen Sie der AWS-Dokumentation für detaillierte Schritte und stellen Sie sicher, dass IronBarcode korrekt eingerichtet ist.

Wie kann ich die bereitgestellte AWS Lambda-Funktion für Barcode-Operationen testen?

Testen Sie die Lambda-Funktion, indem Sie sie über die AWS Lambda-Konsole oder direkt aus Visual Studio aktivieren und sicherstellen, dass IronBarcode korrekt arbeitet und die Barcode-Verarbeitungsaufgaben wie erwartet ausgeführt werden.

Welche Rolle spielt die Dockerfile beim Einrichten der Barcode-Verarbeitung auf AWS Lambda?

Die Dockerfile hilft beim Aktualisieren notwendiger Pakete und beim Kopieren der Build-Artefakte des .NET Lambda-Projekts in das Image, was eine nahtlose Barcode-Verarbeitung mit IronBarcode auf AWS Lambda erleichtert.

Warum ist das Festlegen des temporären Ordners wichtig, wenn Barcode-Bibliotheken auf AWS Lambda verwendet werden?

Das Festlegen des temporären Ordners ist wichtig, da IronBarcode Schreibberechtigungen für die ZIP-Operation erfordert und sicherstellt, dass die Laufzeitordner korrekt von DLLs kopiert werden, um einen reibungslosen Betrieb auf AWS Lambda zu gewährleisten.

Kann ich das Barcode-Lesen auf AWS Lambda anpassen?

Ja, IronBarcode ermöglicht die Anpassung des Barcode-Lesens mithilfe von BarcodeReaderOptions, die das Lesen mehrerer Barcodes, das Anvisieren spezifischer Bereiche, die Aktivierung der asynchronen Verarbeitung und die Anwendung von Bildkorrekturfiltern umfassen.

Was soll ich tun, wenn ich den Fehler 'Runtime exited with error: signal: killed' während der Barcode-Verarbeitung erhalte?

Dieser Fehler deutet auf eine unzureichende Speicherzuweisung hin. Erhöhen Sie den Speicher für die Lambda-Funktion in der aws-lambda-tools-defaults.json-Datei, um das Problem beim Verwenden von IronBarcode zu beheben.

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 1,935,276 | Version: 2025.11 gerade veröffentlicht