AWS / LocalStack:如何 verify/debug (失败)执行 Lambda?

AWS / LocalStack: How to verify/debug (failure of) execution of Lambda?

我正在学习 AWS,而且在我的领域之外,这通常是嵌入式软件。在几天没有牵引力之后,我从软件工程移植这个问题。

Problem/question:在尝试设置文件添加触发 Lambda 的 S3 存储桶时,如何调试或跟踪从文件添加到 SNS 通知到 Lambda 执行的事件序列?

我正在尝试设置以下内容:

  1. 有人向 S3 存储桶添加内容
  2. 文件添加会触发 Lambda,它将文件添加到 git 存储库 (更具体地说:文件添加会触发有关订阅 Lambda 的主题的 SNS 通知——我觉得这比 S3 存储桶由于解耦而直接调用 Lambda“更好”)

我对所有内容都使用 AWS CLI,在不久的将来,我仅限于使用 LocalStack 来替代“真正的”AWS。


到目前为止我做了什么(简体):


这是我的“hello-world”Lambda 函数,由 here and here:

天真地拼凑而成
import json

def lambda_handler(event, context):
    print("Hello from Lambda!")
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

这是我的 put-bucket-notification-configuration 文件:

{
    "TopicConfigurations": [
        {
            "TopicArn": "arn:aws:sns:us-east-1:000000000000:my-topic",
            "Events": [
                "s3:ObjectCreated:*"
            ]
        }
    ]
}

我的问题是:我不确定如何测试 我尝试构建的从 S3 Bucket 到 Lambda 调用的“管道”是成功还是失败。

(请纠正误解:)如果我手动调用Lambda函数,“执行上下文”是我发出AWS的shell CLI 请求。但是当“执行上下文”是我从 S3 Bucket 构建到 SNS 通知到 Lambda 的“管道”时,我不明白 Lambda 的 print 语句或 return-status 将被定向到哪里。 IE。当我手动调用 Lambda 时,我的 shell 获得 return-状态,并且 print 语句似乎被定向到我指定的输出文件;例如:

$ aws lambda invoke --function-name first_lambda outfile.txt --endpoint-url=http://localhost:4574
{
    "StatusCode": 200
}

...但是我如何在存储桶对象创建到 SNS 通知到 Lambda 调用之间测试端到端功能或失败,因为没有 prints 的输出文件被定向到,并且没有 return 状态的“上下文”?

打印语句的输出会清楚地记录在 AWS CloudWatch 上,每个错误也会记录在那里。

因此请务必访问 cloudwatch 并查看幕后发生的情况。

文档:https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/index.html