【发布时间】:2019-12-02 16:13:51
【问题描述】:
我有一个 lambda 函数,它发送邮件并在电子邮件发送成功时返回 MessageID 作为输出,如果发送失败则返回错误消息。现在我想创建一个架构,将返回的电子邮件状态保存在 SNS 主题中。将有另一个 Lambda 函数作为订阅者,该函数将由 SNS 主题的电子邮件状态触发。
示例:如果发布者 Lambda 返回 MessageID,订阅者 Lambda 将返回 "yes","no" 表示 错误消息。有没有可能实现?如果没有,我可以去最近的地方吗?
到目前为止我做了什么
- 创建了一个 SNS 主题
- 为主题创建了订阅者 Lambda 函数。在 Lambda 中为以下 SNS 主题添加了触发器。
- 在我想要用作发布者的现有 Lambda 中添加了 SNS 客户端。如果邮件发送成功,此 Lambda 将返回 MessageID。
- 我向指定的 SNS 主题发布了一条简单消息。
这是订阅者函数的代码,跟在文档后面:
import json
def lambda_handler(event, context):
# TODO implement
return {
# 'statusCode': 200,
# 'body': json.dumps('Hello from Lambda!')
message = json.loads(event['Records'][0]['Sns']['Message'])
print("JSON: " + json.dumps(message))
return message
}
向 SNS 主题发布消息的代码:
sns_client = boto3.client('sns', aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_KEY, region_name=AWS_REGION)
sns_response = sns_client.publish(
TopicArn='my-ARN',
Message='Hello World',
)
【问题讨论】:
-
架构似乎是正确的。您面临的问题是什么?有什么错误信息要分享吗?
-
@SébastienStormacq 当我运行我的发布者代码时,它会显示 sns_response。但我在我的 sns 中没有看到任何消息,也没有在我的 cloudwatch 中看到任何日志。卡在这里
-
您能否用上述内容更新问题以明确您的要求?此外,您能否共享用于创建该基础设施的 cloudformation 模板或 CDK 代码。这将有助于复制
标签: amazon-web-services aws-lambda amazon-sns