【问题标题】:AWS IoT Core multiple environmentsAWS IoT Core 多环境
【发布时间】:2019-02-04 07:46:30
【问题描述】:

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

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

我想过这样做:

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

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

也许有一些最佳实践?

【问题讨论】:

  • 我有同样的问题,因为我的“事物”的 IoT https 端点似乎是相同的。我也在考虑将 dev 和 prod 放在不同的地区。你最后做了什么?

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


【解决方案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 -max 7 个正斜杠 (/) - 因此,通过将 stage 作为前缀添加到所有主题,您基本上可以将限制减少到 7 AWS IoT Core Quotas

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

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

以地区为舞台

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

自定义应用程序

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

【讨论】:

  • 亲爱的 Ozan,感谢您提供详细的答复。我们还在我们的云解决方案中将这个阶段作为主题前缀,其中拆分帐户没有意义。基本摄取技巧很有帮助,我们也采用这种方法进行基本摄取
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 2022-06-12
  • 2018-07-06
  • 2021-07-28
  • 1970-01-01
  • 2017-02-28
  • 2020-06-22
  • 1970-01-01
相关资源
最近更新 更多