AWS Lambdaでバーコードを読み取りおよび書き込む方法

This article was translated from English: Does it need improvement?
Translated
View the article in English
Amazon Lambda Architecture Logo related to AWS Lambdaでバーコードを読み取りおよび書き込む方法

このハウツー記事は、IronBarcodeを使用したAWS Lambda関数のセットアップ方法に関する包括的なガイドを提供します。 このガイドでは、IronBarcodeを設定してS3バケットからバーコードを読み取り、書き込む方法を学びます。

インストール

この記事ではS3バケットを使用しますので、AWSSDK.S3パッケージが必要です。

IronBarcode Zipの使用

IronBarcode ZIPを使用している場合、一時フォルダを設定することが重要です。

var awsTmpPath = @"/tmp/";
IronBarCode.Installation.DeploymentPath = awsTmpPath;
var awsTmpPath = @"/tmp/";
IronBarCode.Installation.DeploymentPath = awsTmpPath;
Dim awsTmpPath = "/tmp/"
IronBarCode.Installation.DeploymentPath = awsTmpPath
VB   C#

申し訳ありませんが、提供された内容が不完全です。翻訳すべき完全な内容を提供してください。Microsoft.ML.OnnxRuntime**パッケージは、バーコードを読み取るために必要です。 バーコードの書き込みは問題なく動作するものの、読み取りのデフォルトモードは機械学習に依存しています。(機械学習 (ML)). MLを使用しないリーディングモードに切り替える場合、そのパッケージは必要ありません。

今日から無料トライアルでIronBarcodeをあなたのプロジェクトで使い始めましょう。

最初のステップ:
green arrow pointer

AWS Lambdaプロジェクトを作成する

Visual Studioを使用すれば、コンテナ化されたAWS Lambdaの作成は簡単なプロセスです。

  • インストールAWSツールキット for Visual Studio
  • 「AWS Lambdaプロジェクト」を選択(.NET Core - C#)申し訳ありませんが、提供されたテキストが表示されていません。翻訳するためのコンテンツを提供してください。
  • 「.NET 8」を選択(コンテナイメージ)「ブループリント」を選択し、「完了」をクリックします。

    コンテナイメージを選択

パッケージ依存関係を追加する

.NET 8のIronBarcodeライブラリは、追加の依存関係なしでAWS Lambda上で動作します。 設定するには、プロジェクトのDockerfileを次のように更新します。 もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

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

必要なパッケージをインストールする

RUN dnf update -y

作業ディレクトリ /var/task

このCOPYコマンドは、ホストマシンからイメージ内に.NET Lambdaプロジェクトのビルドアーティファクトをコピーします。

COPYのソースは、.NET Lambdaプロジェクトがビルドアーティファクトを公開する場所と一致する必要があります。

Lambda関数が構築されている場合

AWS .NET Lambda ツールを使用すると、--docker-host-build-output-dir スイッチによって .NET Lambda プロジェクトの出力先を制御します。

構築されます。

.NET Lambdaプロジェクトテンプレートはデフォルトで --docker-host-build-output-dir を持っています。

aws-lambda-tools-defaults.json ファイルで "bin/Release/lambda-publish" に設定します。

もちろんです。テキストを提供してください。

また、Dockerのマルチステージビルドを使用して、イメージ内で.NET Lambdaプロジェクトをビルドすることもできます。

この手法についての詳細は、プロジェクトのREADME.mdファイルを確認してください。

以下の内容を日本語に翻訳してください:

"bin/Release/lambda-publish" をコピー。 もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

関数ハンドラーコードの修正

この例では、EAN8バーコードを生成し、それをS3バケットにアップロードして、新しく作成されたバーコードを読み取ります。 IronBarcode ZIPを使用する際、DLLからランタイムフォルダーをコピーするためにライブラリが書き込み権限を必要とするため、一時フォルダーの設定が重要です。

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);

    /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
    /// <returns></returns>
    public async Task FunctionHandler(ILambdaContext context)
    {
        var awsTmpPath = @"/tmp/";
        IronBarCode.Installation.DeploymentPath = awsTmpPath;

        IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";

        string filename = Guid.NewGuid().ToString();

        string bucketName = "deploymenttestbucket";
        string objectKey = $"IronBarcodeZip/{filename}.png";

        try
        {
            // Creating a barcode is as simple as:
            var myBarcode = BarcodeWriter.CreateBarcode("1212345", BarcodeWriterEncoding.EAN8);

            // Use pdfData (byte array) as needed
            context.Logger.LogLine($"Barocde created.");

            // Upload the PDF to S3
            await UploadPngToS3Async(bucketName, objectKey, myBarcode.ToPngBinaryData());

            context.Logger.LogLine($"Barocde uploaded successfully to {bucketName}/{objectKey}");

            var resultFromByte = BarcodeReader.Read(myBarcode.ToPngBinaryData());

            foreach (var item in resultFromByte)
            {
                // Log the read value out
                context.Logger.LogLine($"Barcode value is = {item.Value}");
            }
        }
        catch (Exception e)
        {
            context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
        }
    }
    // Function to upload the PNG file to S3
    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);

    /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
    /// <returns></returns>
    public async Task FunctionHandler(ILambdaContext context)
    {
        var awsTmpPath = @"/tmp/";
        IronBarCode.Installation.DeploymentPath = awsTmpPath;

        IronBarCode.License.LicenseKey = "IRONBARCODE-MYLICENSE-KEY-1EF01";

        string filename = Guid.NewGuid().ToString();

        string bucketName = "deploymenttestbucket";
        string objectKey = $"IronBarcodeZip/{filename}.png";

        try
        {
            // Creating a barcode is as simple as:
            var myBarcode = BarcodeWriter.CreateBarcode("1212345", BarcodeWriterEncoding.EAN8);

            // Use pdfData (byte array) as needed
            context.Logger.LogLine($"Barocde created.");

            // Upload the PDF to S3
            await UploadPngToS3Async(bucketName, objectKey, myBarcode.ToPngBinaryData());

            context.Logger.LogLine($"Barocde uploaded successfully to {bucketName}/{objectKey}");

            var resultFromByte = BarcodeReader.Read(myBarcode.ToPngBinaryData());

            foreach (var item in resultFromByte)
            {
                // Log the read value out
                context.Logger.LogLine($"Barcode value is = {item.Value}");
            }
        }
        catch (Exception e)
        {
            context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
        }
    }
    // Function to upload the PNG file to S3
    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)

		''' <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
			Dim awsTmpPath = "/tmp/"
			IronBarCode.Installation.DeploymentPath = awsTmpPath

			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 is as simple as:
				Dim myBarcode = BarcodeWriter.CreateBarcode("1212345", BarcodeWriterEncoding.EAN8)

				' Use pdfData (byte array) as needed
				context.Logger.LogLine($"Barocde created.")

				' Upload the PDF to S3
				Await UploadPngToS3Async(bucketName, objectKey, myBarcode.ToPngBinaryData())

				context.Logger.LogLine($"Barocde uploaded successfully to {bucketName}/{objectKey}")

				Dim resultFromByte = BarcodeReader.Read(myBarcode.ToPngBinaryData())

				For Each item In resultFromByte
					' Log the read value out
					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
		' Function to upload the PNG file to S3
		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
VB   C#

tryブロックの前に、ファイルの保存先はIronBarcodeZipディレクトリに設定され、名前はグローバル一意識別子として生成されます。(GUID). CreateBarcode メソッドはバーコードを生成するために使用されます。 その後、PNGバイト配列がバーコードを読み取るためにReadメソッドに渡されます。 これは、AWS Lambda関数がバーコードを読み取ることができることを示しています。

Read メソッドは、BarcodeReaderOptions オブジェクトも受け入れます。このオブジェクトをカスタマイズして、次のような機能を有効にできます。複数のバーコードを読み取る, 特定の領域をターゲットにする, 非同期およびマルチスレッド処理を使用して, 画像補正フィルターを適用するなど多くの機能があります。

メモリとタイムアウトの増加

Lambda関数で割り当てられるメモリの量は、処理されるドキュメントのサイズと同時に処理されるドキュメントの数によって異なります。 ベースラインとして、aws-lambda-tools-defaults.jsonでメモリを512 MB、タイムアウトを300秒に設定します。 もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

「function-memory-size」:512

「function-timeout」: 300 もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

メモリが不足している場合、プログラムはエラーをスローします: 'Runtime exited with error: signal: killed.' メモリサイズを増やすことでこの問題は解決できます。 詳細については、トラブルシューティングの記事を参照してください:AWS Lambda - ランタイム終了シグナル: Killed.

出版

Visual Studio で発行するには、プロジェクトを右クリックして「Publish to AWS Lambda...」を選択し、必要な設定を構成します。 Lambdaの公開について詳しくは、AWSウェブサイト.

お試しください!

Lambda関数を有効化するには、LambdaコンソールまたはVisual Studioを通して。