nomurabbitのブログ

【AWS】LambdaでS3オブジェクト一覧を取得してみた【C#】

こんにちは!nomurabbitです。
今回は、S3バケットのオブジェクト一覧を
C#のLambdaで取得してみます。

S3操作の入門編だね!

テンプレートの準備

まず、Lambdaのテンプレートを準備します。

.NET Core3.1のテンプレートは、
この記事この記事を参考にしてください。

ソースコード

今回はAWSSDK.S3が必要なので、
nugetでパッケージを追加します。

f:id:nomurabbit:20211113111205p:plain
nuget

ソースコードのポイントは下記の通りです。

public List<GlbResponseBody> GetAction(GlbRequestBody glbRequestBody)
{
    try
    {
        var s3Client = new AmazonS3Client(RegionEndpoint.APNortheast1);
        var request  = new Amazon.S3.Model.ListObjectsV2Request
        {
            BucketName  = GlbUtil.S3_NOMURABBIT_BLOG_XXX,
            Prefix      = glbRequestBody.Prefix
        };

        Amazon.S3.Model.ListObjectsV2Response response = s3Client.ListObjectsV2Async(request).Result;
        List<Amazon.S3.Model.S3Object> s3Objects = response.S3Objects;

        List<GlbResponseBody> glbResponseBodyList = new List<GlbResponseBody>();
        GlbResponseBody glbResponseBody = new GlbResponseBody();

        foreach(Amazon.S3.Model.S3Object s3Object in s3Objects)
        {
            glbResponseBody = new GlbResponseBody();
            glbResponseBody.BucketName       = s3Object.BucketName;
            glbResponseBody.ETag             = s3Object.ETag;
            glbResponseBody.Key              = s3Object.Key;
            glbResponseBody.LastModified     = s3Object.LastModified.ToString("yyyyMMddHHmmssfff");
            glbResponseBody.OwnerDisplayName = (s3Object.Owner == null) ? " " : s3Object.Owner.DisplayName;
            glbResponseBody.OwnerId          = (s3Object.Owner == null) ? " " : s3Object.Owner.Id;
            glbResponseBody.Size             = s3Object.Size.ToString();
            glbResponseBody.StorageClass     = s3Object.StorageClass.Value;
            glbResponseBodyList.Add(glbResponseBody);
        }

        return glbResponseBodyList;

    }
    catch (System.Exception e)
    {
        throw e;
    }
}

AmazonS3ClientのListObjectsV2Asyncメソッドの引数が
ListObjectsV2Requestのインスタンスになっています。

GitHubソースコードを載せていますので、
よければ参考にしてください。

github.com

オブジェクトのプロパティをリストで返すプログラムです。

以上でS3バケットのオブジェクト一覧を
Lambdaで取得できると思います。

よかったら試してみてください。
では!