【发布时间】:2020-10-17 13:26:27
【问题描述】:
我正在学习 AWS,并且非常了解我的元素,这通常是嵌入式软件。在几天没有牵引力之后,我从软件工程部移植了这个问题。
问题/问题:在尝试设置 S3 存储桶时,文件添加会触发 Lambda,如何调试或跟踪从文件添加到 SNS 通知再到 Lambda 执行的事件序列?
我正在尝试设置以下内容:
- 有人向 S3 存储桶添加了一些东西
- 文件添加会触发 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 函数,天真地从 here 和 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 存储桶到 Lambda 调用的“管道”的成功或失败。
(请纠正误解:)如果我手动调用 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