pfr*_*ied 6 amazon-web-services aws-lambda aws-iot
假设我想要一个临时环境和一个生产环境。该应用程序通过添加主题规则来工作,并使用 AWS lambda 处理摄取。
在 AWS IoT Core 中拥有多个环境的最佳方式是什么?
我想过这样做:
dev/*按主题前缀(例如或 )拆分环境prod/*
我强烈喜欢 3.,因为它允许我也使用生产设备进行测试。1.和2.都可以,但是不太灵活。
也许有一些最佳实践?
我们在项目中已经经历了几个月的阶段主题前缀方法。我认为我们会继续这样做,但我在下面提到了一些副作用。
大多数情况下,消息将路由到 IoTCore 规则,并会触发一些 AWS 服务,如 Lambda/S3/Dynamo 等。如果您使用无服务器,这可以通过环境变量实现,如下所示
...
custom:
myStage: ${opt:stage, self:provider.stage}
STAGES:
- dev
- prod
provider:
name: aws
runtime: nodejs12.x
region: eu-central-1
environment:
STAGE: ${self:custom.myStage}
functions:
someLambdaFunction:
timeout: 180
handler: someLambdaFunction.handler
events:
- iot:
name: "iotRuleName_${self:custom.myStage}"
sqlVersion: "2016-03-23"
sql: "SELECT * as data , topic() as topicName FROM '${self:custom.myStage}/room/+/temperature'"
Run Code Online (Sandbox Code Playgroud)
因此,当您将无服务器应用程序部署到开发环境时,规则名称将是iotRuleName_dev,规则sql将类似于dev/room/+/temperature
但也存在一些问题:
正如您所说,使用这种方法,端节点应该知道前缀值。
AWS 将您的主题级别限制为 8 -最多 7 个正斜杠 (/) - 因此,通过向所有主题添加 stage 作为前缀,您基本上可以将限制减少到 7 个AWS IoT Core 配额
您仍然需要检查 thingName 冲突。你不能同时在多个环境中拥有相同的 thingName 并且你不想处理它。在事物名称中添加阶段前缀可以解决混乱。类似于“DEV-Thing1”
您还需要考虑使用基本摄取来降低成本
还可以在 AWS 区域之间分割整个应用程序环境,没有冲突,没有副作用。但你几乎应该把所有的东西都分开,这样才能在晚上睡个好觉。因为访问不同地区的实体可能会造成很大的混乱。
构建您自己的物联网核心。好吧,如果你做到了这一点。不仅要使用它,还要出售它。
| 归档时间: |
|
| 查看次数: |
1093 次 |
| 最近记录: |