AWS IoT Core多个环境

时间:2018-08-29 13:38:11

标签: amazon-web-services aws-lambda aws-iot

让我们说我想拥有一个临时环境和生产环境。该应用程序通过添加主题规则来工作,并使用AWS lambda处理提取。

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

我考虑过这样做:

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

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

也许有一些最佳做法?

1 个答案:

答案 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核心。好吧,如果您做到这一点。不仅要使用它,还要出售它。