簡體   English   中英

如何使用 C# 通過 AWS lambda 處理 S3 事件上的文件

[英]How to Process file on S3 event through AWS lambda using C#

我正在尋找 C# 代碼塊以在 PUT 事件上從 S3 讀取文件並將文件上傳到另一個存儲桶。 我是 C# 的新手,看到大多數博客都是為 python 和 java 編寫的。 任何幫助將不勝感激。

謝謝,

我知道為時已晚,但也許這會對其他人有所幫助。 您需要添加 Amazon.Lambda.S3Events Nuget 包。 查看代碼,這就是您的 Lambda 函數的樣子:

using System;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
using Amazon.Lambda.S3Events;
using Amazon.S3;
using Amazon.S3.Model;

public async Task<string> FunctionHandler(S3Event evnt, ILambdaContext context)
{
    var s3Event = evnt.Records?[0].S3;
    if(s3Event == null)
    {
        return null;
    }

    try
    {
        var destinationBucketName = "your_bucket_to_upload";
        var destinationKey= "folder/subfolder/fileName.txt";

        var s3 = new AmazonS3Client();
        var request = new CopyObjectRequest
        {
            SourceBucket = s3Event.Bucket.Name,
            SourceKey = s3Event.Object.Key,
            DestinationBucket = destinationBucketName,
            DestinationKey = destinationKey
        };
        
        var response = await s3.CopyObjectAsync(request);
        return response.HttpStatusCode.ToString();
    }
    catch(Exception e)
    {
        context.Logger.LogLine($"Error getting object {s3Event.Object.Key} from bucket {s3Event.Bucket.Name}. Make sure they exist and your bucket is in the same region as this function.");
        context.Logger.LogLine(e.Message);
        context.Logger.LogLine(e.StackTrace);
        throw;
    }
}

您可以在此處找到適用於 Visual Studio 的 AWS 工具包: https ://docs.aws.amazon.com/lambda/latest/dg/csharp-package-toolkit.html

流程是:

  • 配置Amazon S3 事件以在創建新對象時觸發 AWS Lambda 函數
  • 創建的對象的詳細信息將通過event傳遞給 Lambda 函數
  • 然后,您的 Lambda 函數應調用CopyObject()將對象復制到另一個存儲桶(無需下載/上傳)

另請參閱: 復制對象 - Amazon Simple Storage Service

創建一個存儲桶並創建有權訪問您創建的存儲桶的 IAM 角色。 將該角色分配給您的 lambda 函數(通過 AWS 控制台或 AWS 開發工具包,如果您使用 Visual Studio。該選項在以下屏幕截圖中可用)

在此處輸入圖片說明

發布后,轉到“事件觸發器”選項卡並添加您創建的存儲桶。 設置此觸發器后,請確保再次上傳代碼

在此處輸入圖片說明

上傳文件並從雲監視日志中查看功能是否已執行。 一些示例代碼附在這里在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM