让我们说我想拥有一个临时环境和生产环境。该应用程序通过添加主题规则来工作,并使用AWS lambda处理提取。
在AWS IoT Core中拥有多个环境的最佳方法是什么?
我考虑过这样做:
dev/*
或prod/*
)拆分环境
我强烈希望使用3.,因为它还允许我使用生产设备进行测试。 1.和2.可以,但不太灵活。
也许有一些最佳做法?
答案 0 :(得分:1)
我们在项目中已经经历了几个月的舞台主题前缀方法。我认为我们会继续这样做,但下面会提到一些副作用。
大多数时间,消息将被路由到IoTCore规则,并将触发一些AWS服务,例如Lambda / S3 / Dynamo等。如果您使用的是无服务器,则可以使用如下的env变量来实现
...
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'"
因此,当您将无服务器应用程序部署到开发环境时,规则名称将为iotRuleName_dev
,规则sql将类似于dev/room/+/temperature
但是有一些问题:
正如您所说的那样,终端节点应该知道前缀值。
AWS将主题级别限制为8-最大7个正斜杠(/)-因此,通过将stage作为前缀添加到所有主题,您基本上可以将限制降低到7 AWS IoT Core Quotas
您仍然必须检查thingName冲突。您不能同时在多个环境中拥有相同的thingName,并且您不想处理它。在事物名称上添加阶段前缀可以解决混淆问题。像“ DEV-Thing1”
您还希望考虑使用basic ingest来降低成本
还可以在AWS区域之间拆分整个应用程序环境,没有冲突,没有副作用。但是,您应该几乎将所有事情都分解掉,以便在晚上遇到不好的情况时可以睡个好觉。因为访问不同地区的实体可能会造成很大的混乱。
构建您自己的IoT核心。好吧,如果您做到这一点。不仅要使用它,还要出售它。