【问题标题】:AWS / LocalStack: How to verify/debug (failure of) execution of Lambda?AWS / LocalStack:如何验证/调试 Lambda 的执行(失败)?
【发布时间】:2020-10-17 13:26:27
【问题描述】:

我正在学习 AWS,并且非常了解我的元素,这通常是嵌入式软件。在几天没有牵引力之后,我从软件工程部移植了这个问题。

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

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

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

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


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

  • 创建了我的存储桶 (aws s3 mb my-bucket --endpoint-url=http://localhost:4572)
  • 创建了一个带有附加角色策略aws:policy/AWSLambdaFullAccess 的“hello-world”Lambda
  • 增加了对 Lambda 的权限 (aws lambda add-permission --function-name first_lambda --action lambda:InvokeFunction --statement-id sns-invoke-lambda --principal sns.amazonaws.com --endpoint-url=http://localhost:4574)
  • 创建了一个 SNS 主题 (aws sns create-topic --name my-topic --endpoint-url=http://localhost:4575)
  • 为我的 Lambda 订阅了该主题 (aws sns subscribe --topic-arn arn:aws:sns:us-east-1:000000000000:my-topic --protocol lambda --notification-endpoint arn:aws:lambda:us-east-1:000000000000:function:first_lambda --endpoint-url=http://localhost:4575)
  • 配置了一个 put-bucket-notification-configuration (aws s3api put-bucket-notification-configuration --bucket my-bucket --notification-configuration file://s3-ObjectCreated_notify.json --endpoint-url=http://localhost:4572)
  • 已验证能够向/从我的存储桶上传和下载
  • 已验证能够手动调用我的 Lambda (aws lambda invoke --function-name first_lambda outfile.txt --endpoint-url=http://localhost:4574)

这是我的“hello-world”Lambda 函数,天真地从 herehere 拼凑而成:

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 存储桶到 L​​ambda 调用的“管道”的成功或失败。

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

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

...但是我如何测试存储桶对象创建到 SNS 通知到 Lambda 调用之间的端到端功能或故障,因为没有要定向到 prints 的输出文件,也没有“上下文” " 将状态返回到哪个位置?

【问题讨论】:

    标签: amazon-s3 aws-lambda aws-cli amazon-sns localstack


    【解决方案1】:

    您的打印语句的输出将清楚地记录在 AWS CloudWatch 上,并且每个错误都将记录在那里。

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-16
      • 1970-01-01
      • 2021-07-29
      • 2014-11-05
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      • 2018-04-20
      相关资源
      最近更新 更多