nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【AWS】LambdaでS3のファイルを読み込んでみた【S3】

こんにちは!nomurabbitです。
この記事ではLambdaでS3から
ファイルを読み込む方法を紹介します。

ファイルの読み書きができると
プログラミングの幅がぐっと広がりますね!

テンプレートの準備

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

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

.NET toolsのコマンドはこんな感じです。

dotnet new lambda.EmptyFunction --name 20211113_my_glb_invokesample

ソースコード

書き込みと同様、AWSSDK.S3が必要なので、
nugetでパッケージを追加します。

f:id:nomurabbit:20211113111205p:plain
nuget

今回もAmazonS3Clientを使います。
ソースコードのポイントは下記の通りです。

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

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

        using(Amazon.S3.Model.GetObjectResponse response = s3Client.GetObjectAsync(request).Result)
        using(var stream = response.ResponseStream)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));

            string line = "";

            while((line = streamReader.ReadLine()) != null)
            {
                glbResponseBody = new GlbResponseBody();
                glbResponseBody.Message = line;
                glbResponseBodyList.Add(glbResponseBody);
            }
        }

        return glbResponseBodyList;

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

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

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

github.com

S3のキーを使ってファイルを読み込むプログラムです。

以上でLambdaでS3から
ファイルを読み込むことができると思います。

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