【问题标题】:How to Publish/Subscribe an event to IOT through VPC endpoint(AWS)如何通过 VPC 端点(AWS)向 IOT 发布/订阅事件
【发布时间】:2021-12-08 20:46:27
【问题描述】:

我尝试将事件从 Lambda 函数发布到 IOT,该执行环境驻留在 VPC 私有子网中,但它不起作用。

  • 我有一个 IOT 设备,其策略配置为允许所有 连接。
  • 创建了一个具有两个私有子网的 VPC,并配置了 Lambda 函数以在其中运行
  • Lambda 函数具有访问 IOT 所需的权限,并且安全组配置为允许所有出站流量到任何端口和任何类型的协议 (0.0.0.0/0)
  • 创建了一个 VPC 终端节点 (com.amazonaws.eu-central-1.iot.data)(选择了两个私有子网)并分配了一个安全组,该安全组具有允许来自 Lambda 函数安全组的任何流量的规则

试图在不添加 NAT 网关的情况下使用公共端点发布事件但它不起作用(出现超时错误) 注意:- 如果我添加 NAT 网关,工作正常。

请找到以下尝试连接到 IOT 的示例代码以供参考

const region = 'eu-central-1';
const endpoint = 'xxxx'; //public endpoint;
const clientId = 'test' //random string;

const {IotData} = require('aws-sdk')
const params = {
        topic: 'test_topic', /* required, subscribed to this topic */
        payload: 'STRING_VALUE' /* Strings will be Base-64 encoded on your behalf */,
        qos: 1
    };
const iotdata = new IotData({endpoint, region});
iotdata.publish(params, (res, err) => {
    console.log('res', res)
    console.log('err', err)
});

【问题讨论】:

    标签: aws-lambda aws-sdk aws-iot vpc-endpoint aws-private-link


    【解决方案1】:

    IoT Core VPC 终端节点不支持私有 DNS 名称,因此需要在 Route53 中手动创建私有托管区域以使用默认 AWS IoT 默认终端节点或 IoT 自定义域。

    1. 在同一 VPC 中创建一个 Route53 私有托管区域。私有托管区域的域名需要与默认 IoT 端点匹配,或者,如果您使用的是 IoT 可配置端点,则需要与您的自定义域的名称匹配

    xxxxxxxxx-ats.iot.us-east-1.amazonaws.com

    IoT Data-ATS 端点之上应用作私有托管区域的域名。

    1. 创建私有托管区域后,导航以查看其记录,然后单击“创建记录”。配置如下:
    • 别名:使用右侧的滑动按钮启用它。

    • 记录名称:(空白)

    • 记录类型:A - 将流量路由到 IPV4 (...)

    • 将流量路由到:“别名到 VPC 端点”,然后选择区域 (us-east-1) 和 VPC 端点 (vpce-xxxx.data.iot.us-east-1.vpce.amazonaws.com)。

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 2019-03-30
      • 2018-09-27
      • 2019-01-30
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2019-02-25
      • 2019-08-12
      相关资源
      最近更新 更多