AWS Lambda Üzerinde Barkodun Nasıl Okunur ve Yazılır
Bu nasıl yapılır makalesi, IronBarcode kullanarak bir AWS Lambda işlevi kurmanın kapsamlı bir kılavuzunu sağlar. Bu kılavuzda, IronBarcode'u bir S3 kovasından okuma ve barkod yazma olarak yapılandırmayı öğreneceksiniz.
AWS Lambda üzerinde Barkod Okuma ve Yazma Nasıl Yapılır
- Barkod okumak ve yazmak için bir C# kütüphanesi indirin
- Proje şablonunu oluşturun ve seçin
- FunctionHandler kodunu değiştirin
- Projeyi yapılandırın ve dağıtın
- İşlevi çağırın ve sonuçları S3'te kontrol edin
Kurulum
Bu makale bir S3 kovası kullanacak, bu nedenle AWSSDK.S3 paketi gereklidir.
IronBarcode ZIP Kullanarak
Eğer 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 paketine ihtiyaç vardır. Barkod yazma işlemi bunda çalışırken, okuma için varsayılan mod makine öğrenmesi (ML) kullanır. Eğer ML kullanmayan bir okuma moduna geçerseniz, paket gerekli değildir.
Bir AWS Lambda Projesi Oluşturun
Visual Studio ile bir kaplamalı AWS Lambda oluşturmak kolay bir süreçtir:
- AWS Toolkit for Visual Studio kurun
- 'AWS Lambda Project (.NET Core - C#)' seçin
- '.NET 8 (Container Image)' şablonunu seçin, ardından 'Finish' ile tamamlayın.

Paket Bağımlılıklarını Ekleyin
NET 8'deki IronBarcode kütüphanesi AWS Lambda üzerinde ekstra bağımlılıklar olmadan çalışır. Kurulumu yapmak için projenin Dockerfile dosyasını aşağıdaki gibi 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 Değiştirin
Bu örnek, bir EAN8 barkodu oluşturur, bir S3 kovasına yükler ve yeni oluşturulan barkodu okur. IronBarcode ZIP kullanırken, geçici klasörü yapılandırmak önemlidir çünkü kütüphane, DLL'lerden çalışma zamanı klasörünü kopyalamak için yazma izinlerine ihtiyaç duyar.
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 isim küresel olarak benzersiz bir tanımlayıcı (GUID) olarak üretilir. CreateBarcode yöntemi barkod oluşturmak için kullanılır. Sonrasında, PNG bayt dizisi barkodu okumak için Read yöntemine geçirilir. Bu, AWS Lambda işlevinin barkod okumayı başardığını gösterir.
Read yöntemi ayrıca BarcodeReaderOptions nesnesini kabul eder ve bu nesneyi birden fazla barkod okuma, belirli alanları hedefleme, eşzamanlı ve çok iş parçacıklı işlem kullanma, görüntü düzeltme filtreleri uygulama gibi özellikleri etkinleştirmek için özelleştirebilirsiniz.
Bellek ve Zaman Aşımı Artırın
Lambda işlevinde ayrılan bellek miktarı, işlenen belgelerin boyutuna ve aynı anda işlenen belge sayısına bağlı olarak değişir. Temel 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 kaldığında program, 'Çalışma zamanı hata ile çıktı: sinyal: durduruldu.' şeklinde hata fırlatacaktır. Bellek boyutunu artırmak bu sorunu çözebilir. Daha fazla ayrıntı için, şu sorun giderme makalesine bakın: AWS Lambda - Çalışma Zamanı Çıktı Sinyali: Durduruldu.
Yayınla
Visual Studio'da yayınlamak için projeye sağ tıklayın ve 'AWS Lambda'ya Yayınla...' seçeneğini seçin, ardından gerekli ayarları yapılandırın. AWS web sitesinde Lambda yayınlama hakkında daha fazla okuyabilirsiniz: AWS web sitesi.
Dene!
Lambda işlevini ya Lambda konsolu ya da Visual Studio aracılığıyla etkinleştirebilirsiniz.
Sıkça Sorulan Sorular
AWS Lambda'da barkod okuma ve yazmayı nasıl ayarlayabilirim?
AWS Lambda'da barkod okuma ve yazmayı ayarlamak için, IronBarcode kütüphanesini indirip Visual Studio ile bir AWS Lambda projesi oluşturarak kullanın. Barkod işlemlerini ele almak için FunctionHandler kodunu değiştirin, proje ayarlarını yapılandırın ve dağıtın. AWSSDK.S3 gibi gerekli paket bağımlılıklarının dahil edildiğinden emin olun.
AWS Lambda'da barkod işleme için hangi paketler gereklidir?
AWS Lambda'da barkod işleme için, S3 etkileşimleri için AWSSDK.S3 paketini ve isteğe bağlı olarak standart barkod okuma yöntemlerini kullanıyorsanız gerekmeyebilecek ileri makine öğrenimi barkod okuma için Microsoft.ML.OnnxRuntime paketini dahil edin.
AWS Lambda'daki 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 belleği ve zaman aşımını nasıl artırırım?
IronBarcode ile barkod işleme ihtiyaçlarını karşılamak için fonksiyon belleğini 512 MB olarak ayarlayıp, zaman aşımını 300 saniye olarak ayarlayarak aws-lambda-tools-defaults.json dosyasındaki bellek ve zaman aşımı ayarlarını değiştirebilirsiniz.
Visual Studio kullanarak barkod işleme için bir Lambda fonksiyonu nasıl yayınlanırım?
Proje üzerinde sağ tıklayıp 'AWS Lambda'ya Yayımla...' seçeneğini seçerek ve ayarları yapılandırarak Lambda fonksiyonunu yayınlayın. IronBarcode'un doğru bir şekilde kurulduğundan emin olmak ve ayrıntılı adımlar için AWS belgelerine bakın.
Barkod işlemleri için dağıtılmış AWS Lambda fonksiyonunu nasıl test edebilirim?
Lambda fonksiyonunu, AWS Lambda konsolu üzerinden veya doğrudan Visual Studio'dan etkinleştirerek test edin, IronBarcode'un doğru çalıştığından ve barkod işleme görevlerinin beklendiği gibi yerine getirildiğinden emin olun.
AWS Lambda'da barkod işlemeyi ayarlarken Dockerfile'ın rolü nedir?
Dockerfile, gerekli paket güncellemelerini yapmaya ve .NET Lambda projesi yapıtlarını görüntüye kopyalamaya yardımcı olur, AWS Lambda'da IronBarcode ile kesintisiz barkod işlemesi sağlar.
AWS Lambda'da barkod kütüphaneleri kullanırken geçici klasörü ayarlamak neden önemlidir?
IronBarcode'un yazma izinlerine ihtiyaçı olduğu için geçici klasörün ayarlanması gereklidir, ZIP işleminin çalışmasını sağlamak ve çalışma zamanı klasörlerinin AWS Lambda üzerinde düzgün çalışması için DLL'lerden doğru bir şekilde kopyalandığından emin olun.
AWS Lambda'da barkod okuma özelleştirilebilir mi?
Evet, IronBarcode, birden çok barkodu okuma, belirli alanları hedef alma, asenkron işlemeyi etkinleştirme ve görüntü düzeltme filtreleri uygulama dahil olmak üzere BarcodeReaderOptions kullanarak barkod okuma özelleştirmesine olanak tanır.
'Çalışma zamanı hata ile sona erdi: sinyal: öldürüldü' hatasıyla karşılaşırsam ne yapmalıyım?
Bu hata, yetersiz bellek tahsisini işaret eder. Sorunu çözmek için IronBarcode kullanırken aws-lambda-tools-defaults.json dosyasında Lambda fonksiyonu için belleği artırın.

