【问题标题】:.net core aws Lambda No error, but Lambda halts.net core aws Lambda 没有错误,但 Lambda 停止
【发布时间】:2018-05-16 14:30:54
【问题描述】:

我构建了一个 .NET Core aws Lambda,它从 S3 读取一个 xml 文件并对其进行一些处理。当我在本地运行 lambda 时,它可以正常工作;但是,当我上传 Lambda 并尝试执行它时,它会停止尝试获取文件的内容,并且 cloudwatch 中没有显示错误。这是我的代码有问题:

public async Task<string> GetFileContentsFromS3(string bucket, string key)
    {
        try
        {
            Console.WriteLine("Getting File Contents for Bucket: " + bucket + " and Key: " + key);

                GetObjectRequest request = new GetObjectRequest
                {
                    BucketName = bucket,
                    Key = key
                };

                Console.WriteLine("request: " + request.BucketName + " | " + request.Key);
                using (GetObjectResponse responseObject = await S3Client.GetObjectAsync(request))
                {
                    Console.WriteLine("In Response Object");
                    using (Stream responseStream = responseObject.ResponseStream)
                    {
                        Console.WriteLine("In Response Stream");
                        using (StreamReader reader = new StreamReader(responseStream))
                        {
                            Console.WriteLine("Successfully got File Contents");
                            return reader.ReadToEnd();
                        }
                    }
                }
        }
        catch(Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
            return string.Empty;
        }

    }

当我查看我的 cloudwatch 日志时,我可以看到以下输出:

Console.WriteLine("Getting File Contents for Bucket: " + bucket + " and Key: " + key); and this: Console.WriteLine("request: " + request.BucketName + " | " + request.Key);

在那之后我什么也没有得到,并且日志指出该函数在完成之前就结束了。它没有达到超时,因为它设置为 30 秒,我的内存分配应该足够了。此外,我已让我的 IAM 用户完全控制 S3,因此这不应该成为问题。我认为是这一行:

using (GetObjectResponse responseObject = await S3Client.GetObjectAsync(request))

这是导致问题的原因,但我不知道获取文件内容的另一种方法或可能是什么实际问题。

【问题讨论】:

    标签: c# amazon-s3 lambda .net-core


    【解决方案1】:

    尝试使用作为 ILambdaContext 一部分的 Logger(入口点的第二个参数),而不是使用 Console.WriteLine。如果您的 lambda 配置了必要的权限,它将输出到 CloudWatch。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 2020-06-04
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 2017-02-11
      • 2016-09-10
      • 2022-07-15
      相关资源
      最近更新 更多