AWS Lambda'da QR Kodları Nasıl Okunur ve Yazılır

This article was translated from English: Does it need improvement?
Translated
View the article in English
Amazon Lambda Architecture Logo related to AWS Lambda'da QR Kodları Nasıl Okunur ve Yazılır

Bu nasıl yapılır makalesi, IronQR ile bir AWS Lambda işlevi ayarlamak için detaylı bir kılavuz sunuyor. Bu öğreticide, QR kodlarını doğrudan bir S3 kovasına okumak ve yazmak için IronQR'yi nasıl yapılandıracağınızı keşfedeceksiniz.

Kurulum

Bu makalede bir S3 kovası kullanılacak, bu yüzden AWSSDK.S3 paketi gereklidir.

Bugün IronQR ile projenizde ücretsiz bir deneme ile başlayın.

İlk Adım:
green arrow pointer

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.

Konteyner görüntüsünü seçin

Paket Bağımlılıklarını Ekleyin

.NET 8'deki IronQR kütüphanesi, ek bağımlılıklara ihtiyaç duymadan AWS Lambda'da çalışır. Bunu yapılandırmak için, projenizin Dockerfile dosyasını aşağıdaki gibi değiştirin:

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

# Install necessary packages and update repositories
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 QR kodu oluşturur, bunu bir S3 kovasına yükler ve yeni oluşturulmuş QR kodunu okur.

Dosya yolu, evrensel olarak benzersiz bir tanımlayıcının (GUID) dosya adı olarak kullanıldığı IronQrNuGet dizininde belirtilmiştir. Write yöntemi, sağlanan değere göre QR kodunu oluşturur ve ortaya çıkan JPG bayt dizisi, QR kodunu okumak için Read yöntemine aktarılır. Bu, bu AWS Lambda işlevinin QR kodlarını okuyabildiğini gösterir.

using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronQr;

// 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 IronQrNuGetAwsLambda
{
    public class Function
    {
        private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

        /// <summary>
        /// Main handler for AWS Lambda
        /// </summary>
        /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
        /// <returns></returns>
        public async Task FunctionHandler(ILambdaContext context)
        {
            // Set the license key for IronQR
            IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01";

            string bucketName = "deploymenttestbucket";
            string objectKey = $"IronQrNuGet/{Guid.NewGuid()}.png";

            try
            {
                // Create a QR code with the content "12345"
                var myQr = QrWriter.Write("12345");

                context.Logger.LogLine("QR created.");

                // Upload the JPG to S3
                await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg());

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

                // Read the QR code
                QrImageInput imageInput = new QrImageInput(myQr.Save());
                QrReader reader = new QrReader();
                var resultFromByte = reader.Read(imageInput);

                foreach (var item in resultFromByte)
                {
                    // Log the read value
                    context.Logger.LogLine($"QR value is = {item.Value}");
                }
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
            }
        }

        // Function to upload the JPG file to S3
        private async Task UploadJpgToS3Async(string bucketName, string objectKey, byte[] jpgBytes)
        {
            using (var memoryStream = new MemoryStream(jpgBytes))
            {
                var request = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = objectKey,
                    InputStream = memoryStream,
                    ContentType = "image/jpg",
                };

                await _s3Client.PutObjectAsync(request);
            }
        }
    }
}
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronQr;

// 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 IronQrNuGetAwsLambda
{
    public class Function
    {
        private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

        /// <summary>
        /// Main handler for AWS Lambda
        /// </summary>
        /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
        /// <returns></returns>
        public async Task FunctionHandler(ILambdaContext context)
        {
            // Set the license key for IronQR
            IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01";

            string bucketName = "deploymenttestbucket";
            string objectKey = $"IronQrNuGet/{Guid.NewGuid()}.png";

            try
            {
                // Create a QR code with the content "12345"
                var myQr = QrWriter.Write("12345");

                context.Logger.LogLine("QR created.");

                // Upload the JPG to S3
                await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg());

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

                // Read the QR code
                QrImageInput imageInput = new QrImageInput(myQr.Save());
                QrReader reader = new QrReader();
                var resultFromByte = reader.Read(imageInput);

                foreach (var item in resultFromByte)
                {
                    // Log the read value
                    context.Logger.LogLine($"QR value is = {item.Value}");
                }
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
            }
        }

        // Function to upload the JPG file to S3
        private async Task UploadJpgToS3Async(string bucketName, string objectKey, byte[] jpgBytes)
        {
            using (var memoryStream = new MemoryStream(jpgBytes))
            {
                var request = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = objectKey,
                    InputStream = memoryStream,
                    ContentType = "image/jpg",
                };

                await _s3Client.PutObjectAsync(request);
            }
        }
    }
}
Imports Amazon.Lambda.Core
Imports Amazon.S3
Imports Amazon.S3.Model
Imports IronQr

' 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 IronQrNuGetAwsLambda
    Public Class Function
        Private Shared ReadOnly _s3Client As IAmazonS3 = New AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1)

        ''' <summary>
        ''' Main handler for AWS Lambda
        ''' </summary>
        ''' <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
        ''' <returns></returns>
        Public Async Function FunctionHandler(context As ILambdaContext) As Task
            ' Set the license key for IronQR
            IronQr.License.LicenseKey = "IronQR-MYLICENSE-KEY-1EF01"

            Dim bucketName As String = "deploymenttestbucket"
            Dim objectKey As String = $"IronQrNuGet/{Guid.NewGuid()}.png"

            Try
                ' Create a QR code with the content "12345"
                Dim myQr = QrWriter.Write("12345")

                context.Logger.LogLine("QR created.")

                ' Upload the JPG to S3
                Await UploadJpgToS3Async(bucketName, objectKey, myQr.Save().ExportBytesAsJpg())

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

                ' Read the QR code
                Dim imageInput As New QrImageInput(myQr.Save())
                Dim reader As New QrReader()
                Dim resultFromByte = reader.Read(imageInput)

                For Each item In resultFromByte
                    ' Log the read value
                    context.Logger.LogLine($"QR value is = {item.Value}")
                Next
            Catch e As Exception
                context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}")
            End Try
        End Function

        ' Function to upload the JPG file to S3
        Private Async Function UploadJpgToS3Async(bucketName As String, objectKey As String, jpgBytes As Byte()) As Task
            Using memoryStream As New MemoryStream(jpgBytes)
                Dim request As New PutObjectRequest With {
                    .BucketName = bucketName,
                    .Key = objectKey,
                    .InputStream = memoryStream,
                    .ContentType = "image/jpg"
                }

                Await _s3Client.PutObjectAsync(request)
            End Using
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

Bellek ve Zaman Aşımını Artırın

Lambda fonksiyonu için bellek tahsisi, belgelerin boyutuna ve aynı anda işlenen sayıya bağlıdır. Başlangıç noktası 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 yetersizse, program, 'Çalışma zamanı hata ile sona erdi: sinyal: öldürüldü.' hatasını yükseltecektir. Bellek boyutunu artırmak bu sorunu çözmeye yardımcı olabilir. Daha fazla rehberlik için çözüm makalesini inceleyin: AWS Lambda - Çalışma Zamanı Sinyali Çıkıldı: Öldürüldü.

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. Daha fazla bilgi için, AWS web sitesini ziyaret edin.

Deneyin!

Lambda işlevini, Lambda konsolu veya Visual Studio aracılığıyla etkinleştirebilirsiniz.

Sıkça Sorulan Sorular

C# projemde bir QR kod kütüphanesini AWS Lambda'ya nasıl entegre edebilirim?

IronQR gibi bir QR kod kütüphanesini C# projenize AWS Lambda üzerinde entegre etmek için IronQR kütüphanesini indirerek, Visual Studio kullanarak konteyner tabanlı bir AWS Lambda projesi oluşturarak ve QR kod operasyonlarını desteklemek için ortamınızı yapılandırarak gerçekleştirebilirsiniz.

IronQR'yi AWS Lambda için nasıl yapılandırabilirim?

IronQR'yi AWS Lambda için, Visual Studio'da konteyner tabanlı bir proje şablonu oluşturarak, Dockerfile'ı düzenleyerek, FunctionHandler’ı güncelleyerek ve sorunsuz bir işlem sağlamak için bellek ve zaman aşımı ayarlarını ayarlayarak yapılandırın.

AWS S3 ile C# kütüphanesi kullanarak QR kodlarını nasıl yönetebilirim?

IronQR'yu kullanarak, QR kodlarını oluşturarak, AWS S3 kovalarına yükleyip, ve ordan okuyarak yönetebilirsiniz. Bu, S3 kova işlemlerini gerçekleştirmek için IronQR kütüphanesini AWSSDK.S3 paketi ile birleştirerek yapılır.

IronQR kullanarak AWS Lambda işlevim iyi çalışmıyorsa ne yapmalıyım?

AWS Lambda işleviniz iyi performans göstermiyorsa, aws-lambda-tools-defaults.json dosyanızdaki bellek ve zaman aşımı ayarlarını artırarak işlev için daha fazla kaynak ayırmayı düşünün.

Bir C# Lambda işlevini AWS'ye nasıl dağıtırım?

Bir C# Lambda işlevini AWS'ye dağıtmak için Visual Studio'nun 'AWS Lambda'ya Yayınla...' seçeneğini kullanın, gerekli ayarları yapılandırın ve dağıtım için AWS Toolkit'i kullanın.

AWS Lambda işlevimi Visual Studio'da test etmem mümkün mü?

Evet, AWS Toolkit'i kullanarak işlevi çağırmanız ve çıktısını doğrudan geliştirme ortamınız içinde doğrulamanız mümkündür.

AWS Lambda işlevimde bellek sorunlarını nasıl çözerim?

Bellek sorunlarını gidermek için, işlevin bellek tahsisini aws-lambda-tools-defaults.json dosyasında artırın ve yeniden dağıttıktan sonra işlevin performansını izleyin.

Bir AWS Lambda projesinde Dockerfile değiştirilmesinin önemi nedir?

AWS Lambda projesinde Dockerfile'ı değiştirmenin önemi, ortamı doğru şekilde ayarlamak ve işlevin düzgün çalışması için gerekli yapı artefaktlarını kopyalamak gibi işlemleri içerir.

AWS Lambda işlevimin QR kod operasyonlarını verimli bir şekilde düzenlediğinden nasıl emin olabilirim?

AWS Lambda işlevinizin QR kod operasyonlarını verimli bir şekilde düzenlediğinden emin olmak için bellek ve zaman aşımı ayarlarını optimize edin, IronQR gibi uygun kütüphaneleri kullanın ve Dockerfile ile proje ayarlarını doğru şekilde yapılandırın.

AWS Lambda'da QR kod oluşturma ve alma işlemlerini otomatikleştirebilir miyim?

Evet, IronQR kullanarak QR kod oluşturma ve alma işlemlerini AWS Lambda'da otomatikleştirebilirsiniz. Bu kütüphane, QR kodları programlı olarak oluşturmanıza, S3'e yüklemenize ve gerektiğinde tekrar okumanıza olanak tanır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 67,270 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronQR
bir örnek çalıştırın url'nizin bir QR koda dönüşmesini izleyin.