Amazon s3 AWS/LocalStack:如何验证/调试Lambda的执行(失败)?
我正在学习AWS,这在我的元素(通常是嵌入式软件)之外。我将这个问题从软件工程中移植过来,在那里几天没有任何进展 问题/问题:在尝试设置S3存储桶时,文件添加会触发Lambda,如何调试或跟踪从文件添加到SNS通知再到Lambda执行的事件序列? 我正在尝试设置以下内容:Amazon s3 AWS/LocalStack:如何验证/调试Lambda的执行(失败)?,amazon-s3,aws-lambda,aws-cli,amazon-sns,localstack,Amazon S3,Aws Lambda,Aws Cli,Amazon Sns,Localstack,我正在学习AWS,这在我的元素(通常是嵌入式软件)之外。我将这个问题从软件工程中移植过来,在那里几天没有任何进展 问题/问题:在尝试设置S3存储桶时,文件添加会触发Lambda,如何调试或跟踪从文件添加到SNS通知再到Lambda执行的事件序列? 我正在尝试设置以下内容: 有人在S3桶中添加了一些东西 文件添加触发Lambda,该Lambda将文件添加到git repo (更具体地说:文件添加触发了一个关于Lambda订阅的主题的SNS通知——我觉得这比S3 bucket直接调用Lambda“更
AWS CLI
来处理所有事情,并且在不久的将来,我仅限于使用LocalStack
来替代“真正的”AWS。
到目前为止我所做的工作(简化):
- 已创建my bucket(
)aws s3 mb my bucket--端点url=http://localhost:4572
- 创建了一个带有附加角色策略的“hello world”Lambda
aws:policy/AWSLambdaFullAccess
- 向Lambda添加权限(
)aws Lambda add permission--function name first_Lambda--action Lambda:invokeffunction--statement id sns invoke Lambda--principal sns.amazonaws.com--endpoint url=http://localhost:4574
- 创建了SNS主题(
)aws SNS创建主题--命名我的主题--端点url=http://localhost:4575
- 将我的Lambda订阅到主题(
)aws sns订阅--主题arn:aws:sns:us-east-1:000000000000:我的主题--协议Lambda--通知端点arn:aws:Lambda:us-east-1:000000000000000000:函数:first_Lambda--端点url=http://localhost:4575
- 配置了put bucket通知配置(
)aws s3api put bucket通知配置--bucket my bucket--通知配置file://s3-ObjectCreated_notify.json --端点url=http://localhost:4572
- 验证是否能够上传和下载到我的bucket
- 已验证是否能够手动调用我的Lambda(
)aws Lambda invoke--function name first_Lambda outfile.txt--endpoint url=http://localhost:4574
这是我的“hello world”Lambda函数,由和天真地拼凑而成: 这是我的put bucket通知配置文件:
{
"TopicConfigurations": [
{
"TopicArn": "arn:aws:sns:us-east-1:000000000000:my-topic",
"Events": [
"s3:ObjectCreated:*"
]
}
]
}
我的问题是:我不确定如何测试我尝试构建的从S3 Bucket到Lambda调用的“管道”的成功或失败 (请纠正误解:)如果我手动调用Lambda函数,“执行上下文”是我发出AWS CLI请求的shell。但是,当“执行上下文”是我从S3 Bucket到SNS通知构建到Lambda的“管道”时,我不知道Lambda的
print
语句或返回状态将指向哪里。也就是说,当我手动调用Lambda时,我的shell获得返回状态,print
语句似乎指向我指定的输出文件;e、 g:
$ aws lambda invoke --function-name first_lambda outfile.txt --endpoint-url=http://localhost:4574
{
"StatusCode": 200
}
…但我如何测试bucket对象创建到SNS通知到Lambda调用之间的端到端功能或失败,因为没有要指向的
print
s的输出文件,也没有要返回状态的“上下文”?您的print语句的输出将清楚地记录在AWS CloudWatch上,而且每个错误都会记录在那里
因此,一定要访问cloudwatch并检查幕后发生的事情
文件:
$ aws lambda invoke --function-name first_lambda outfile.txt --endpoint-url=http://localhost:4574
{
"StatusCode": 200
}