AWS 람다에서 바코드를 읽고 쓰는 방법

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

이 사용 방법 아티클은 IronBarcode를 사용하는 AWS 람다 함수 설정에 대한 종합적인 가이드를 제공합니다. 이 가이드에서는 IronBarcode를 구성하여 S3 버킷에서 바코드를 읽고 쓰는 방법을 배우게 됩니다.

설치

이 문서에서는 S3 버킷을 사용하므로 AWSSDK.S3 패키지가 필요합니다.

IronBarcode Zip 사용

IronBarcode ZIP을 사용하는 경우 임시 폴더를 설정하는 것이 중요합니다.

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

강력한 Microsoft.ML.OnnxRuntime 패키지는 바코드를 읽는 데 필수입니다. 바코드를 쓰는 것은 문제없이 작동하지만, 읽기의 기본 모드는 머신 러닝(ML)에 의존합니다. ML을 사용하지 않는 읽기 모드로 전환한 경우, 패키지가 필요하지 않습니다.

AWS 람다 프로젝트 생성

Visual Studio를 사용하면 컨테이너화된 AWS 람다를 쉽게 생성할 수 있습니다.

  • AWS Toolkit for Visual Studio 설치
  • 'AWS 람다 프로젝트(.NET Core - C#)'를 선택하세요
  • ' .NET 8(컨테이너 이미지)' 블루프린트를 선택한 다음 '완료'를 선택합니다.

컨테이너 이미지 선택

패키지 종속성 추가

.NET 8의 IronBarcode 라이브러리는 추가적인 종속성 없이 AWS 람다에서 작동합니다. 설정하려면 프로젝트의 Dockerfile을 다음과 같이 업데이트하세요:

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

함수 핸들러 코드를 수정하세요

이 예제는 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);

    /// <summary>
    /// AWS 람다 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 람다 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);
        }
    }
}
$vbLabelText   $csharpLabel

try 블록 전에 파일 목적지는 IronBarcodeZip 디렉토리로 설정되며, 이름은 전역 고유 식별자(GUID)로 생성됩니다. CreateBarcode 메서드는 바코드를 생성하는 데 사용됩니다. 그 후, PNG 바이트 배열이 Read 메서드로 전달되어 바코드를 읽습니다. 이것은 AWS 람다 함수가 바코드를 읽을 수 있음을 보여줍니다.

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 람다 - 런타임 종료 신호: 종료됨를 참조하십시오.

게시

Visual Studio에서 배포하려면 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 'Publish to AWS 람다...'를 선택한 후 필요한 설정을 구성합니다. Lambda를 게시하는 방법에 대한 더 많은 정보를 AWS 웹사이트에서 읽을 수 있습니다.

한번 시도해 보세요!

Lambda 함수는 Lambda 콘솔 또는 Visual Studio를 통해 활성화할 수 있습니다.

자주 묻는 질문

AWS Lambda에서 바코드 읽기 및 쓰기를 설정하는 방법은 무엇인가요?

AWS Lambda에서 바코드 읽기 및 쓰기를 설정하려면 IronBarcode 라이브러리를 다운로드하고 Visual Studio를 사용하여 AWS Lambda 프로젝트를 생성하세요. 바코드 작업을 처리하도록 FunctionHandler 코드를 수정하고, 프로젝트 설정을 구성한 후 배포합니다. AWSSDK.S3와 같은 필수 패키지 종속성이 포함되어 있는지 확인하세요.

AWS Lambda에서 바코드 처리를 위해 필요한 패키지는 무엇입니까?

AWS Lambda에서 바코드 처리를 하려면 S3 상호 작용을 위한 AWSSDK.S3 패키지를 포함하고, 고급 머신 러닝 기반 바코드 읽기를 위한 Microsoft.ML.OnnxRuntime 패키지를 선택적으로 포함하세요. 단, 표준 바코드 읽기 방법을 사용하는 경우에는 필요하지 않을 수 있습니다.

AWS Lambda에서 바코드 작업을 위한 FunctionHandler 코드를 어떻게 수정할 수 있나요?

IronBarcode를 사용하여 바코드를 생성하고 읽도록 FunctionHandler 코드를 수정하십시오. IronBarcode 라이선스 키를 설정하고 IronBarcode ZIP 파일이 제대로 작동하도록 임시 폴더를 구성해야 합니다.

바코드를 처리하는 AWS Lambda 함수의 메모리 사용량과 타임아웃 시간을 늘리려면 어떻게 해야 하나요?

IronBarcode를 사용한 바코드 처리 요구 사항을 충족하려면 aws-lambda-tools-defaults.json 파일에서 function-memory-size를 512MB로, function-timeout을 300초로 설정하여 메모리 및 타임아웃 설정을 조정하십시오.

Visual Studio를 사용하여 바코드 처리를 위한 Lambda 함수를 게시하는 방법은 무엇인가요?

Visual Studio에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 'AWS Lambda에 게시...'를 선택한 다음 설정을 구성하여 Lambda 함수를 게시하세요. 자세한 단계는 AWS 설명서를 참조하고 IronBarcode가 올바르게 설정되었는지 확인하십시오.

배포된 AWS Lambda 함수의 바코드 처리 기능을 어떻게 테스트할 수 있나요?

AWS Lambda 콘솔 또는 Visual Studio에서 직접 Lambda 함수를 활성화하여 IronBarcode가 올바르게 작동하고 바코드 처리 작업이 예상대로 수행되는지 테스트하십시오.

AWS Lambda에서 바코드 처리를 설정하는 데 있어 Dockerfile의 역할은 무엇인가요?

Dockerfile은 필요한 패키지를 업데이트하고 .NET Lambda 프로젝트의 빌드 아티팩트를 이미지에 복사하는 데 도움이 되므로 AWS Lambda에서 IronBarcode를 사용하여 원활한 바코드 처리를 가능하게 합니다.

AWS Lambda에서 바코드 라이브러리를 사용할 때 임시 폴더를 설정하는 것이 중요한 이유는 무엇입니까?

IronBarcode는 ZIP 작업에 쓰기 권한이 필요하므로 임시 폴더를 설정하는 것이 필수적입니다. 이를 통해 런타임 폴더가 DLL에서 올바르게 복사되어 AWS Lambda에서 원활하게 작동할 수 있습니다.

AWS Lambda에서 바코드 읽기 기능을 사용자 지정할 수 있나요?

예, IronBarcode는 BarcodeReaderOptions 사용하여 바코드 읽기 기능을 사용자 지정할 수 있습니다. 여기에는 여러 바코드 읽기, 특정 영역 선택, 비동기 처리 활성화 및 이미지 보정 필터 적용이 포함됩니다.

바코드 처리 중 '런타임이 오류와 함께 종료되었습니다: signal: killed' 오류가 발생하면 어떻게 해야 하나요?

이 오류는 메모리 할당이 부족함을 나타냅니다. IronBarcode를 사용할 때 이 문제를 해결하려면 aws-lambda-tools-defaults.json 파일에서 Lambda 함수의 메모리 할당량을 늘리십시오.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

시작할 준비 되셨나요?
Nuget 다운로드 2,108,094 | 버전: 2026.3 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package BarCode
샘플을 실행하세요 실이 바코드로 변하는 모습을 지켜보세요.