AWS Lambda微服务设计和将C#Lambda与SNS链接(安全?)

AWS Lambda微服务设计和将C#Lambda与SNS链接(安全?),c#,amazon-web-services,aws-lambda,amazon-sns,C#,Amazon Web Services,Aws Lambda,Amazon Sns,我不熟悉微服务,所以尝试做一个小应用 这是我目前的设计: 创建两个LambdaServices: 1) GetSomeData (string domainName, string nextSNS, ILambdaContext context) 2) StoreSomeData (string jsonData) 第1部分: 我对微服务的理解是,每个功能只能做一件事。所以“GetSomeData”获取域名,进行web调用,将结果解析为JSON。然后我需要将其存储在StoreSomeData

我不熟悉微服务,所以尝试做一个小应用

这是我目前的设计:

创建两个LambdaServices:

1) GetSomeData (string domainName, string nextSNS, ILambdaContext context) 
2) StoreSomeData (string jsonData)
第1部分:

我对微服务的理解是,每个功能只能做一件事。所以“GetSomeData”获取域名,进行web调用,将结果解析为JSON。然后我需要将其存储在StoreSomeData中的RDS数据库中。 但在将来,我可能只想获取数据,或者用它做些别的事情

我现在99%的时间都需要的函数是GetAndStoreSomeData。但如果我这样做,我就不是一个微服务,对吗

所以我在想,如果一个程序只是想从“GetSomeData”返回JSON,那么它只会在下一个TSN中传递null。但是如果它想要存储数据,它将在nextSNS中传递一个SNSTopicName或arn,然后“GetSomeData”将使用JSON响应向该SNS发布一条消息

这个过程将由我还没有完全弄清楚的其他过程开始,该过程将从RDS数据库中选择一些域,并可能调用API网关来启动“GetSomeData”。我可能必须从某种调度程序运行它

我想知道这是不是一个好的设计。我刚刚发布了“GetSomeData”,并在没有“nextSNS”参数的情况下进行了测试

第二部分:

如果“GetSomeData”需要发布到SNS,我如何在不存储IAM凭据的情况下发布呢。我可以使用角色吗?或者我必须使用秘密访问密钥,也许我可以把它放在一个环境变量中,至少不让它出现在代码中


我在考虑克隆这个方法:发布SNS消息。但是,我在这里找到了一个Java示例,该示例仅包含调用的6行代码:。在C#中是否有类似的短方法可以实现同样的效果?除了原始的请求/响应,我在亚马逊网站上找不到关于如何发布SNS的更多信息。()

根据定义,你在这里得到的任何答案都会有点自以为是,但是

第1部分

“微服务”是一个非常好的营销名称,但最终它是一种设计模式,而不是一种硬性的设计规则。对我来说,这在很大程度上取决于围绕服务的支持结构。例如,我主要在创业环境中工作。这意味着我必须使用AWS ELB处理AWS RDS、AWS VPC、AWS EC2等

其他环境有专门的DevOps人员协助管理环境

这是一个很长的说法,如果你只想维护一个Lambda,那么就维护一个Lambda。微服务警察可能会也可能不会跟你搭讪,但只有你知道这方面最有意义的是什么

第二部分

AWS Lambda(和EC2有一个非常相似的概念)的一个很酷的地方是,您可以设置。基本上,这是IAM中的一个角色,您的Lambda代码在该角色下运行。因此,例如,如果您的Lambda需要发送SNS消息,您可以向运行Lambda的角色添加
amazonsfullaccess
,您的Lambda现在可以发送和接收SNS消息

在获取C#环境的凭据方面,它似乎让您了解了如何做到这一点


我承认,我不熟悉发送SNS消息的C端,但它看起来很适合Java端。

根据定义,你在这里得到的任何答案都会有点自以为是,但

第1部分

“微服务”是一个非常好的营销名称,但最终它是一种设计模式,而不是一种硬性的设计规则。对我来说,这在很大程度上取决于围绕服务的支持结构。例如,我主要在创业环境中工作。这意味着我必须使用AWS ELB处理AWS RDS、AWS VPC、AWS EC2等

其他环境有专门的DevOps人员协助管理环境

这是一个很长的说法,如果你只想维护一个Lambda,那么就维护一个Lambda。微服务警察可能会也可能不会跟你搭讪,但只有你知道这方面最有意义的是什么

第二部分

AWS Lambda(和EC2有一个非常相似的概念)的一个很酷的地方是,您可以设置。基本上,这是IAM中的一个角色,您的Lambda代码在该角色下运行。因此,例如,如果您的Lambda需要发送SNS消息,您可以向运行Lambda的角色添加
amazonsfullaccess
,您的Lambda现在可以发送和接收SNS消息

在获取C#环境的凭据方面,它似乎让您了解了如何做到这一点


我承认,我不熟悉发送SNS消息的C端,但它似乎很好地映射到Java端。

您特定的安全问题的答案是,您为每个Lambda函数分配一个IAM执行角色,允许它访问SNS之类的东西。Lambda函数不使用AWS secret access key之类的凭据


考虑到Java和C#与AWS交互的不同,您链接到SNS的C#方法使用原始HTTP连接,而不是使用AWS SDK for.NET,因此当然需要更多的代码行。您肯定应该使用,这将使您的C#代码看起来与您链接的Java代码几乎相同。

您特定安全问题的答案是,您为每个Lambda函数分配一个IAM执行角色,允许它访问SNS之类的内容。Lambda函数不使用AWS secret access key之类的凭据

考虑到Java和C#与AWS交互的不同,您链接到SNS的C#方法使用原始HTTP连接,而不是使用AWS SDK for.NET,因此当然需要更多的代码行。你一定要用,w