IRONSOFTWAREHOME

How to Read & Write Barcode on AWS Lambda

Curtis Chau
Curtis Chau
Updated: August 2, 2026
AWS Lambda

This how-to article provides a comprehensive guide to setting up an AWS Lambda function using IronBarcode. In this guide, you will learn how to configure IronBarcode to read from and write barcodes to an S3 bucket.

Installation

This article will use an S3 bucket, so the AWSSDK.S3 package is required.

Using IronBarcode Zip

If you are using IronBarcode ZIP, it is essential to set the temporary folder.

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

The Microsoft.ML.OnnxRuntime package is required for reading barcodes. While writing barcodes works fine without it, the default mode for reading relies on machine learning (ML). If you switch to a reading mode that doesn't use ML, the package is not needed.

Create an AWS Lambda Project

With Visual Studio, creating a containerized AWS Lambda is an easy process:

  • Install the AWS Toolkit for Visual Studio
  • Select an 'AWS Lambda Project (.NET Core - C#)'
  • Select a '.NET 8 (Container Image)' blueprint, then select 'Finish'.

Select container image

Add Package Dependencies

The IronBarcode library in .NET 8 works on AWS Lambda without needing extra dependencies. To set it up, update the project's Dockerfile as follows:

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

Modify the FunctionHandler Code

This example generates an EAN8 barcode, uploads it to an S3 bucket, and reads the newly created barcode. When using IronBarcode ZIP, configuring the temp folder is crucial because the library needs write permissions to copy the runtime folder from the DLLs.

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

Before the try block, the file destination is set to the IronBarcodeZip directory, with the name generated as a globally unique identifier (GUID). The CreateBarcode method is used to generate the barcode. Afterward, the PNG byte array is passed to the Read method to read the barcode. This demonstrates that the AWS Lambda function is capable of reading barcodes.

The Read method also accepts a BarcodeReaderOptions object, which you can customize to enable features such as reading multiple barcodes, targeting specific areas, using asynchronous and multithreaded processing, applying image correction filters, and much more.

Increase Memory and Timeout

The amount of memory allocated in the Lambda function will vary based on the size of the documents being processed and the number of documents processed simultaneously. As a baseline, set the memory to 512 MB and the timeout to 300 seconds in aws-lambda-tools-defaults.json.

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

When the memory is insufficient, the program will throw the error: 'Runtime exited with error: signal: killed.' Increasing the memory size can resolve this issue. For more details, refer to the troubleshooting article: AWS Lambda - Runtime Exited Signal: Killed.

Publish

To publish in Visual Studio, right-click on the project and select 'Publish to AWS Lambda...', then configure the necessary settings. You can read more about publishing a Lambda on the AWS website.

Try It Out!

You can activate the Lambda function either through the Lambda console or through Visual Studio.

Frequently Asked Questions

How do I set up IronBarcode on AWS Lambda?

To set up IronBarcode on AWS Lambda, you need to create an AWS Lambda project using Visual Studio, install necessary packages such as AWSSDK.S3, configure the deployment path for IronBarcode, and write the FunctionHandler code to read and write barcodes to an S3 bucket.

What packages are required to use IronBarcode on AWS Lambda?

You need the AWSSDK.S3 package for managing S3 buckets and the Microsoft.ML.OnnxRuntime package for barcode reading, assuming you use the default machine learning reading mode.

How can I install IronBarcode in a Dockerfile for AWS Lambda?

In your Dockerfile, copy the .NET Lambda project’s build artifacts into the image and configure the IronBarcode deployment path for the AWS Lambda environment.

Is a license key required for IronBarcode on AWS Lambda?

Yes, you must set your IronBarcode license key in the FunctionHandler's code to use IronBarcode within an AWS Lambda function.

What options can I customize when reading barcodes with IronBarcode in AWS Lambda?

When using IronBarcode in AWS Lambda, you can customize options like reading multiple barcodes, targeting specific image areas, and using asynchronous processing via the BarcodeReaderOptions object.

How can I handle the temporary folder configuration in AWS Lambda using IronBarcode?

Set the temporary folder configuration by assigning the DeploymentPath for IronBarcode to '/tmp/' in your AWS Lambda FunctionHandler.

What should I do if my AWS Lambda function using IronBarcode runs out of memory?

Increase the allocated memory for your Lambda function using the 'function-memory-size' setting in aws-lambda-tools-defaults.json and ensure it is set appropriately for your workload.

How do I upload a barcode image to an S3 bucket using IronBarcode on AWS Lambda?

Use IronBarcode to generate a barcode, convert it to PNG binary data, and use the Amazon S3 client to upload this data to your specified S3 bucket.

Can I generate and read barcodes without using OnnxRuntime in AWS Lambda?

Yes, you can generate and write barcodes without using OnnxRuntime, but reading requires OnnxRuntime if you use the default machine learning mode. Switch to a non-ML reading mode if you prefer not to use it.

How can I publish an AWS Lambda function that uses IronBarcode?

In Visual Studio, right-click your project and select 'Publish to AWS Lambda'. Configure the necessary settings for deployment, and follow AWS guidelines to complete the process.

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Ready to Get Started?

Nuget Downloads 2,422,100Version:2026.9just released

Get your free 30-day Trial Key instantly.
No credit card or account creation required
C# NuGet Library for PDF
Install with NuGet

Version: 2026.9

PM > Install-Package BarCode
nuget.org/packages/BarCode/
  1. In Solution Explorer, right-click References, Manage NuGet Packages
  2. Select Browse and search "IronBarCode"
  3. Select the package and install
C# PDF DLL
Download DLL

Version: 2026.9

  1. Download and unzip IronBarCode to a location such as ~/Libs within your Solution directory
  2. In Visual Studio Solution Explorer, right click References. Select Browse, "IronBarCode.dll"

Licenses from $999

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required