【发布时间】:2018-04-08 11:45:17
【问题描述】:
我是微服务新手,所以尝试做一个小应用程序。
这是我目前的设计:
创建两个 LambdaService:
1) GetSomeData (string domainName, string nextSNS, ILambdaContext context)
2) StoreSomeData (string jsonData)
第 1 部分:
我对微服务的理解是每个功能应该只做一件事。所以“GetSomeData”接受一个域名,进行网络调用,将结果解析为 JSON。然后我需要将它存储在 StoreSomeData 中的 RDS 数据库中。 但在未来,我可能只想获取数据,或者用它做其他事情。
我现在 99% 的时间都需要的函数是 GetAndStoreSomeData。但如果我这样做,我就不是微服务了,对吧?
所以我在想如果一个程序只想从“GetSomeData”返回 JSON,它只会在 nextSNS 中传递 null。但是如果它想要存储数据,它将在 nextSNS 中传递一个 SNSTopicName 或 arn,然后“GetSomeData”将使用 JSON 响应向该 SNS 发布一条消息。
该进程将由我尚未完全弄清楚的其他进程启动,该进程将从 RDS 数据库中选择一些域,并可能调用 API-Gateway 以启动“GetSomeData”。我可能不得不从某种类型的调度程序运行它。
我想知道这是否是一个好的设计。我刚刚发布并测试了没有“nextSNS”参数的“GetSomeData”。
第 2 部分:
如果“GetSomeData”需要发布到 SNS,我如何在不存储 IAM 凭证的情况下做到这一点。我可以使用角色吗?或者我必须使用秘密访问密钥,也许我可以将它放入一个环境变量中,以至少将其排除在代码之外。
我正在考虑克隆这个方法:https://gist.github.com/bkizzy/2705156 来发布 SNS 消息。但是后来我发现了一个 Java 示例,它只有大约 6 行代码用于调用:Lambda does not trigger SNS event. Chaining AWS lambdas with SNS。是否有类似的简短方法可以从 C# 中执行相同的操作?除了原始请求/响应之外,我在亚马逊网站上找不到太多关于如何发布 SNS 的信息。 (https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)
【问题讨论】:
标签: c# amazon-web-services aws-lambda amazon-sns