0

我尝试将事件从 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)
});
4

1 回答 1

1

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

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

xxxxxxxxxx-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-11-02T06:29:20.660 回答