AWS Lambda'da Barkod Okuma ve Yazma
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.
AWS Lambda'da Barkod Okuma ve Yazma
- Barkod okumak ve yazmak için bir C# kütüphanesi indirin
- Proje şablonunu oluşturun ve seçin
- FunctionHandler kodunu düzenleyin
- Projeyi yapılandırın ve dağıtın
- İşlevi çalıştırın ve sonuçları S3'te kontrol edin
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
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.

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

