IronQR 開始 在 AWS 上設定 如何在 AWS Lambda 上讀取和寫入二維碼 Curtis Chau 更新:7月 22, 2025 下載 IronQR NuGet 下載 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在雙子座打開 請向 Gemini 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English 本文提供了使用 IronQR 設定 AWS Lambda 函數的詳細指南。 在本教程中,您將學習如何配置 IronQR,以便直接向 S3 儲存桶讀取和寫入二維碼。 如何在 AWS Lambda 上讀取和寫入二維碼 下載用於讀寫二維碼的 C# 庫 創建 AWS Lambda 容器化專案模板 修改 Dockerfile 和 FunctionHandler 代碼 增加記憶體和超時設置 部署並調用函數以在 S3 中查看結果 安裝 本文將使用 S3 儲存桶,因此需要AWSSDK.S3包。 立即開始在您的項目中使用 IronQR 並免費試用。 第一步: 免費啟動 建立 AWS Lambda 項目 使用 Visual Studio,建立容器化的 AWS Lambda 函數非常簡單: 安裝適用於 Visual Studio 的 AWS 工具包 選擇"AWS Lambda 專案(.NET Core - C#)" 選擇".NET 8(容器映像)"藍圖,然後選擇"完成"。 !選擇容器影像 新增包依賴項 .NET 8 中的 IronQR 函式庫可在 AWS Lambda 上執行,無需額外的相依性。 若要進行配置,請如下所示修改專案的 Dockerfile: 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" . 修改函數處理程序程式碼 此範例產生一個二維碼,將其上傳到 S3 儲存桶,並讀取新產生的二維碼。 檔案路徑在 IronQrNuget 目錄中指定,檔案名稱使用全域唯一識別碼 (GUID)。 Write方法根據提供的值產生二維碼,然後將產生的 JPG 位元組數組傳遞給Read方法以讀取二維碼。 這證明該 AWS Lambda 函數能夠讀取二維碼。 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(ByVal 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 item 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(ByVal bucketName As String, ByVal objectKey As String, ByVal jpgBytes() As Byte) As Task Using memoryStream As New MemoryStream(jpgBytes) Dim request = 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 增加記憶體和超時 Lambda 函數的記憶體分配取決於文件的大小和同時處理的文件數量。 首先,在aws-lambda-tools-defaults.json中將記憶體設定為 512 MB,逾時設定為 300 秒。 "function-memory-size" : 512, "function-timeout" : 300 如果記憶體不足,程式將引發錯誤:"運行時錯誤退出:訊號:已終止"。增加記憶體大小可以幫助解決此問題。 如需進一步指導,請查看故障排除文章: AWS Lambda - 執行時間退出訊號:已終止。 發布 要在 Visual Studio 中發布,只需右鍵單擊項目,然後選擇"發佈到 AWS Lambda..." 然後,配置所需的設定。 如需了解更多信息,請訪問AWS 網站。 試試看! 您可以透過Lambda 控制台或 Visual Studio 啟動 Lambda 函數。 常見問題解答 如何在 AWS Lambda 上將 QR 代碼函式庫整合到我的 C# 專案中? 您可以透過下載 IronQR 函式庫,使用 Visual Studio 建立容器化的 AWS Lambda 專案,並配置環境以支援 QR code 作業,將 IronQR 等 QR code 函式庫整合到 AWS Lambda 上的 C# 專案中。 為 AWS Lambda 配置 IronQR 的步驟為何? 透過在 Visual Studio 中設定容器化專案範本、修改 Dockerfile、更新 FunctionHandler,以及調整記憶體和逾時設定,為 AWS Lambda 配置 IronQR,以確保順利運作。 如何使用 C# 函式庫以 AWS S3 管理 QR 碼? 使用 IronQR,您可以透過建立、上傳至 AWS S3 套件以及從 AWS S3 套件讀取來管理 QR 碼。這需要將 IronQR 函式庫與 AWSSDK.S3 套件結合使用,以處理 S3 儲存桶的操作。 如果使用 IronQR 的 AWS Lambda 函式效能不佳,該怎麼辦? 如果您的 AWS Lambda 函式效能不佳,請考慮增加 aws-lambda-tools-defaults.json 檔案中的記憶體和逾時設定,以便為函式分配更多資源。 如何將 C# Lambda 函式部署到 AWS? 使用 Visual Studio 的「發佈到 AWS Lambda...」選項,配置必要的設定,並利用 AWS Toolkit 進行部署,將 C# Lambda 函式部署到 AWS。 是否可以在 Visual Studio 中測試我的 AWS Lambda 函式? 是的,您可以在 Visual Studio 中測試 AWS Lambda 函式,方法是使用 AWS Toolkit 在您的開發環境中直接調用函式並驗證其輸出。 如何排除 AWS Lambda 函式的記憶體問題? 若要排除記憶體問題,請在 aws-lambda-tools-defaults.json 檔案中增加函式的記憶體分配,並在重新部署後監控函式的效能。 在 AWS Lambda 專案中修改 Dockerfile 的重要性為何? 修改 AWS Lambda 專案中的 Dockerfile 對於正確設定環境至關重要,包括更新儲存庫以及複製必要的建立工件,以便功能正常執行。 如何確保我的 AWS Lambda 函式能有效率地處理 QR code 作業? 透過最佳化記憶體和逾時設定、使用適當的函式庫 (例如 IronQR),以及正確配置 Dockerfile 和專案設定,確保您的 AWS Lambda 函式能有效率地處理 QR code 作業。 我可以在 AWS Lambda 中自動產生和擷取 QR 碼嗎? 是的,您可以使用 IronQR 在 AWS Lambda 中自動進行 QR 代碼的產生與擷取。該函式庫可讓您以程式化的方式建立 QR 碼、將其上傳至 S3,並在需要時讀取回來。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 準備好開始了嗎? Nuget 下載 51,390 | Version: 2025.11 剛發表 免費下載 NuGet 下載總數:51,390 檢視授權