AWS IoT Core 多环境

AWS IoT Core multiple environments

假设我想要一个暂存环境和一个生产环境。该应用程序通过添加主题规则来工作,并使用 AWS lambda 处理摄取。

在 AWS IoT Core 中拥有多个环境的最佳方式是什么?

我考虑过这样做:

  1. 设置两个帐户(在我的项目中不可能)
  2. dev/*prod/* 等主题前缀拆分环境
    • 意味着设备需要提前知道它属于哪里
  3. 将设备添加到组并进行基于规则的过滤
    • 是否有任何指导如何做到这一点?我知道我可以调用 lambda 函数,但这似乎是个坏主意。有一个基于组的过滤器会很棒,但是据我所知,现在无法访问设备的组或属性

我非常喜欢 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'"

因此,当您将无服务器应用程序部署到开发环境时,规则名称将为 iotRuleName_dev,规则 sql 将类似于 dev/room/+/temperature

但是有一些问题:

  • 正如您所说的这种方法,端节点应该知道前缀值。

  • AWS 将您的主题级别限制为 8 - 最多 7 个正斜杠 (/) - 因此通过将阶段添加为所有主题的前缀,您基本上可以将限制降低到 7 AWS IoT Core Quotas

  • 您仍然需要检查 thingName 冲突。您不能同时在多个环境中拥有相同的 thingName,并且您不想处理它。为事物名称添加阶段前缀可以解决混淆。像 'DEV-Thing1'

您还想考虑使用 basic ingest 来降低成本

按地区分阶段

也可以在 AWS 区域之间拆分整个应用程序环境,无冲突,无副作用。但是你几乎应该把所有的东西都分开,以便在晚上睡个好觉。因为访问不同地区的实体会造成很大的混乱。

自定义应用程序

构建您自己的物联网核心。好吧,如果你做到了这一点。不仅要用还要卖。