AWS Lambda'da Barkod Okuma ve Yazma

This article was translated from English: Does it need improvement?
Translated
View the article in English
AWS Lambda

Bu nasıl yapılır makalesi, IronBarcode kullanarak bir AWS Lambda işlevinin nasıl kurulacağına dair kapsamlı bir kılavuz sağlar. Bu kılavuzda, IronBarcode'un bir S3 kovasından nasıl okuyup nasıl yazacak şekilde yapılandırılacağını öğreneceksiniz.

Kurulum

Bu makalede bir S3 kovası kullanılacak, bu yüzden AWSSDK.S3 paketi gereklidir.

IronBarcode Zip Kullanımı

IronBarcode ZIP kullanıyorsanız, geçici klasörü ayarlamak önemlidir.

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

Barkod okumak için Microsoft.ML.OnnxRuntime paketi gereklidir. Barkod yazma, doğru çalışmakla birlikte, okuma için varsayılan mod makine öğrenmesine (ML) dayanır. ML kullanmayan bir okuma moduna geçerseniz, paket gerekli değildir.

Bir AWS Lambda Projesi Oluşturun

Visual Studio ile, kapsayıcılaştırılmış bir AWS Lambda oluşturmak kolay bir işlemdir:

  • AWS Araç Seti for Visual Studio yükleyin
  • 'AWS Lambda Projesi (.NET Core - C#)' seçin
  • '.NET 8 (Kapsayıcı Görüntü)' şablonunu seçin, ardından 'Bitir' seçin.

Konteyner görüntüsünü seçin

Paket Bağımlılıklarını Ekleyin

.NET 8'deki IronBarcode kütüphanesi, ek bağımlılıklara ihtiyaç duymadan AWS Lambda üzerinde çalışır. Kurulumunu yapmak için, projenizin Dockerfile'ını aşağıdaki şekilde güncelleyin:

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

FunctionHandler Kodunu Düzenleyin

Bu örnek, bir EAN8 barkodu oluşturur, S3 kovasına yükler ve yeni oluşturulan barkodu okur. IronBarcode ZIP kullanırken, kütüphanenin DLL'lerden çalışma zamanı klasörünü kopyalamak için yazma izinlerine ihtiyaç duyması nedeniyle geçici klasörün yapılandırılması çok önemlidir.

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

Try bloğundan önce, dosya hedefi IronBarcodeZip dizinine ayarlanır ve adı evrensel olarak benzersiz bir tanımlayıcı (GUID) olarak üretilir. BARCODE oluşturmak için CreateBarcode yöntemi kullanılır. Ardından, PNG bayt dizisi, BarCode'u okumak için Read yöntemine aktarılır. Bu, AWS Lambda işlevinin barkodları okuyabileceğini gösterir.

Read yöntemi, BarCodeReaderOptions nesnesini de kabul eder. Bu nesneyi özelleştirerek birden fazla BarCode okuma, belirli alanları hedefleme, eşzamansız ve çok iş parçacıklı işleme kullanma, görüntü düzeltme filtreleri uygulama ve çok daha fazlası gibi özellikleri etkinleştirebilirsiniz.

Bellek ve Zaman Aşımını Artırın

Lambda fonksiyonunda tahsis edilen bellek miktarı, işlenen belgelerin boyutuna ve aynı anda işlenen belge sayısına bağlı olarak değişecektir. Temel ayar olarak, aws-lambda-tools-defaults.json içinde belleği 512 MB ve zaman aşımını 300 saniye olarak ayarlayın.

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

Bellek yetersiz olduğunda, program 'Çalışma zamanı hatayla çıktı: sinyal: öldürüldü.' hatasını verecektir. Bellek boyutunu artırmak bu sorunu çözebilir. Daha fazla ayrıntı için, sorun giderme makalesine başvurun: AWS Lambda - Çalışma Zamanı Sinyali: Öldürüldü.

Yayınla

Visual Studio'da yayınlamak için, proje üzerine sağ tıklayın ve 'AWS Lambda'ya Yayınla...' seçin, ardından gerekli ayarları yapılandırın. Lambda yayımlamak hakkında daha fazla bilgiyi AWS web sitesinde bulabilirsiniz.

Deneyin!

Lambda işlevini, Lambda konsolu veya Visual Studio aracılığıyla etkinleştirebilirsiniz.

Sıkça Sorulan Sorular

AWS Lambda üzerinde barkod okuma ve yazma nasıl ayarlanır?

AWS Lambda üzerinde barkod okuma ve yazma ayarlamak için, IronBarcode kütüphanesini indirip Visual Studio ile bir AWS Lambda projesi oluşturun. Barkod işlemlerini yönetmek için FunctionHandler kodunu düzenleyin, proje ayarlarını yapılandırın ve dağıtın. AWSSDK.S3 gibi gereken paket bağımlılıklarının dahil olduğundan emin olun.

AWS Lambda üzerinde barkod işlemleri için hangi paketler gereklidir?

AWS Lambda üzerinde barkod işlemleri için, S3 etkileşimleri için AWSSDK.S3 paketi ve tercihe bağlı olarak, standart barkod okuma yöntemlerini kullanmadığınız sürece gerekli olmayan gelişmiş makine öğrenimi barkod okumaları için Microsoft.ML.OnnxRuntime paketini dahil edin.

AWS Lambda'da barkod görevleri için FunctionHandler kodunu nasıl değiştirebilirim?

IronBarcode kullanarak barkod oluşturmak ve okumak için FunctionHandler kodunu değiştirin. IronBarcode lisans anahtarını ayarladığınızdan ve IronBarcode ZIP dosyalarının doğru çalışması için geçici klasörü yapılandırdığınızdan emin olun.

Barkodları işleyen bir AWS Lambda fonksiyonu için bellek ve zaman aşımını nasıl artırırım?

IronBarcode ile barkod işleme ihtiyaçlarına yönelik olarak, aws-lambda-tools-defaults.json dosyasındaki bellek ve zaman aşımı ayarlarını düzenleyerek, fonksiyon bellek boyutunu 512 MB ve zaman aşımını 300 saniyeye ayarlayın.

Barkod işleme için Lambda fonksiyonunu Visual Studio kullanarak nasıl yayınlarım?

Visual Studio'da projeyi sağ tıklayarak, 'Publish to AWS Lambda...' seçeneğini belirleyip ayarları yapılandırarak Lambda fonksiyonunu yayınlayın. Detaylı adımlar için AWS dökümantasyonunu takip edin ve IronBarcode'un doğru kurulduğundan emin olun.

Barkod işlemleri için dağıtılmış AWS Lambda fonksiyonunu nasıl test edebilirim?

Lambda fonksiyonunu AWS Lambda konsolu veya doğrudan Visual Studio üzerinden çalıştırarak test edin, IronBarcode'un düzgün çalıştığından ve barkod işleme görevlerinin beklendiği gibi yerine getirildiğinden emin olun.

AWS Lambda üzerinde barkod işlemeyi ayarlamada Dockerfile'nin rolü nedir?

Dockerfile, gerekli paketlerin güncellenmesine ve .NET Lambda projesi build artefaktlarının imaja kopyalanmasına yardımcı olur, AWS Lambda üzerinde IronBarcode ile sorunsuz barkod işleme sağlar.

AWS Lambda üzerinde barkod kütüphanelerini kullanırken geçici klasör ayarlanması neden önemlidir?

Geçici klasör ayarlaması önemlidir çünkü IronBarcode, ZIP işlemi için yazma izinlerine ihtiyaç duyar, bu da çalışma zamanı klasörlerinin DLL'lerden doğru bir şekilde kopyalanmasını sağlar, AWS Lambda üzerinde sorunsuz bir işletim sağlar.

AWS Lambda üzerinde barkod okuma özelleştirilebilir mi?

Evet, IronBarcode, BarcodeReaderOptions kullanarak barkod okuma özelleştirmesine izin verir, bu da birden fazla barkod okuma, belirli alanları hedefleme, asenkron işlemeyi etkinleştirme ve görüntü düzeltme filtreleri uygulama gibi özellikler içerir.

Barkod işlemleri sırasında 'Runtime exited with error: sinyal: öldürüldü' hatasına karşı ne yapmalıyım?

Bu hata, yetersiz bellek tahsisi önerir. IronBarcode kullanırken sorunu çözmek için aws-lambda-tools-defaults.json dosyasında Lambda fonksiyonu için belleği artırın.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 2,240,258 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package BarCode
bir örnek çalıştır dizginizin barkoda dönüştüğünü izle.