AWS IoT Core 多个环境

pfr*_*ied 6 amazon-web-services aws-lambda aws-iot

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

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

我想过这样做:

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

我强烈喜欢 3.,因为它允许我也使用生产设备进行测试。1.和2.都可以,但是不太灵活。

也许有一些最佳实践?

Oza*_*ÜRK 5

我们在项目中已经经历了几个月的阶段主题前缀方法。我认为我们会继续这样做,但我在下面提到了一些副作用。

阶段作为主题前缀

大多数情况下,消息将路由到 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 区域之间分割整个应用程序环境,没有冲突,没有副作用。但你几乎应该把所有的东西都分开,这样才能在晚上睡个好觉。因为访问不同地区的实体可能会造成很大的混乱。

定制应用

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