由提供支持的 Lambda 入门Amazon IoT Greengrass - Amazon Snowball Edge Developer Guide
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

由提供支持的 Lambda 入门Amazon IoT Greengrass

开始使用Amazon Lambda支持的 JoamleAmazon IoT Greengrass函数Amazon SnowballEdge 设备,执行以下步骤:

将 Amazon IoT Greengrass 服务角色与您的账户关联

在您可以使用Amazon IoT Greengrass与 Snowball Edge 核心设备,则必须将Amazon IoT Greengrass服务角色。此关联允许Amazon IoT Greengrass来访问您的 Lambda 函数,Amazon IoT资源的费用。如果在关联服务角色之前尝试创建 Snowball Edge 任务,则任务创建请求将失败。

以下过程显示了如何在云中配置和存储 Amazon IoT Greengrass 设置。此配置意味着您可以将 Lambda 函数更改以及对Amazon IoT Greengrass组中)。第一个过程使用 Amazon Identity and Access Management (IAM) 控制台,第二个过程使用 Amazon Command Line Interface (Amazon CLI)。

在 IAM 控制台中创建 Amazon IoT Greengrass 服务角色

  1. 登录 Amazon Web Services Management Console,单击 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 适用于角色类型中,选择AmazonGreengrass 角色

  3. 选择 AWSGreengrassResourceAccessPolicy,然后选择 Next Step

  4. 输入角色的名称,然后选择创建角色

创建角色后,记下该角色的 Amazon 资源名称 (ARN),并将其用于下一个过程。

将 Amazon IoT Greengrass 服务角色与您的账户关联

  1. 在计算机上安装 Amazon CLI (如果您尚未这么做)。有关更多信息,请参阅 。安装Amazon CLI中的Amazon Command Line Interface用户指南

  2. 在计算机上配置 Amazon CLI (如果您尚未这么做)。有关更多信息,请参阅 。配置AmazonCLI中的Amazon Command Line Interface用户指南

  3. 在计算机上打开一个终端,并使用您在第一个过程中创建的 Amazon IoT Greengrass 角色 ARN 运行以下 Amazon CLI 命令。

    aws greengrass associate-service-role-to-account --role-arn arn:aws:iam::123EXAMPLE12:role/GreengrassRole

现在,您可以为 Snowball Edge 创建一个任务,并使用Amazon Lambda支持的 JoamleAmazon IoT Greengrass。

配置Amazon IoT Greengrass带 Snowball Edge

当您为 Snowball Edge 创建计算任务时,该服务会自动配置以下Amazon IoT Greengrass元素:

  • Amazon IoT Greengrass核心软件—Amazon IoT Greengrass可分发已预安装在 Snowball Edge 上。

  • Amazon IoT Greengrass组— 当您创建计算任务时,将会显示一个Amazon IoT Greengrass命名的组JobID_group创建和预配置。此组的核心名为 JobID_core,并拥有一个名为 JobID_s3adapter 的设备。用于 Snowball 的 Amazon S3 Adapter 注 IoT 为您的Amazon IoT Greengrass组中)。进行此注册的原因是,适配器将为 Snowball Edge 上的存储桶的每个 Amazon S3 PUT 对象操作发送 MQTT 消息。

如果您有其他配置更改,您希望为Amazon IoT Greengrass组,您可以在解锁设备并将其连接到 Internet 后,让他们进行。

创建任务

在 Amazon Snow Family Management Console中创建一个任务,并将至少一个已发布 Lambda 函数的 Amazon 资源名称 (ARN) 与一个存储桶相关联。有关创建您的第一个任务的演练,请参阅创建AmazonSnowball Edge

您在创建任务期间选择的所有 Lambda 函数都由与适用 Snowball 的 Amazon S3 适配器关联的 IoT 设备发送的 MQTT 消息触发。这些 MQTT 消息在Amazon S3 PUT 对象操作,对上的存储桶执行Amazon SnowballEdge 设备。

创建虚拟网络接口

当 Snowball Edge 到达后,解锁设备,并创建一个虚拟网络接口以绑定到Amazon IoT Greengrass。每个 Snowball Edge 具有三个网络接口 (NIC),即设备的物理网络接口控制器。这些接口就是设备背面的 RJ45、SFP 和 QSFP 端口。

每个虚拟 NIC (VNIC) 基于物理接口,您可以有任意数量的 VNIC 与每个 NIC 关联。要创建虚拟网络接口,请使用 snowballEdge create-virtual-network-interface 命令。

注意

仅当将 STATIC 用于 --ip-address-assignment 时,--static-ip-address-configuration 才是有效的选项。

用法(已配置 Snowball 客户端)

snowballEdge create-virtual-network-interface --ip-address-assignment [DHCP or STATIC] --physical-network-interface-id [physical network interface id] --static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]

用法(未配置 Snowball 客户端)

snowballEdge create-virtual-network-interface --endpoint https://[ip address] --manifest-file /path/to/manifest --unlock-code [unlock code] --ip-address-assignment [DHCP or STATIC] --physical-network-interface-id [physical network interface id] --static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]

例 创建 VNIC (DHCP)

./snowballEdge create-virtual-network-interface --ip-address-assignment dhcp --physical-network-interface-id s.ni-8EXAMPLEaEXAMPLEd { "VirtualNetworkInterface" : { "VirtualNetworkInterfaceArn" : "arn:aws:snowball-device:::interface/s.ni-8EXAMPLE8EXAMPLEf", "PhysicalNetworkInterfaceId" : "s.ni-8EXAMPLEaEXAMPLEd", "IpAddressAssignment" : "DHCP", "IpAddress" : "192.0.2.0", "Netmask" : "255.255.255.0", "DefaultGateway" : "192.0.2.1", "MacAddress" : "EX:AM:PL:E1:23:45" } }

正在启动Amazon IoT GreengrassSnowball Edge

在您可以使用Amazon Lambda支持的 JoamleAmazon IoT Greengrass,您需要使用 Snowball 客户端来启动它。

注意

可能需要几分钟的时间才能启动Amazon IoT Greengrass上 Snowball Edge. 我们建议使用describe-service在启动服务以确定其处于活动状态后,Snowball 客户端命令。有关更多信息,请参阅获取服务状态

启动Amazon Lambda支持的 JoamleAmazon IoT Greengrass

  1. 运行 snowballEdge describe-device 命令以获取网络接口 ID 的列表。有关此命令的更多信息,请参阅 获取设备状态

  2. 标识您要使用的物理网络接口的 ID 并记下它。以下示例显示使用两种不同的 IP 地址分配方法(DHCPSTATIC)运行此命令。

    snowballEdge create-virtual-network-interface \ --physical-network-interface-id s.ni-abcd1234 \ --ip-address-assignment DHCP                  //OR//         snowballEdge create-virtual-network-interface \ --physical-network-interface-id s.ni-abcd1234 \ --ip-address-assignment STATIC \ --static-ip-address-configuration IpAddress=192.0.2.0,Netmask=255.255.255.0
  3. 该命令会返回一个 JSON 结构,其中包括虚拟网络接口 ARN。记录此 ARN。

  4. 使用虚拟网络接口启动Amazon IoT Greengrass服务,如以下示例所示。

    snowballEdge start-service \ --service-id greengrass\ --virtual-network-interface-arns arn:aws:snowball-device:::interface/s.ni-abcd1234abcd1234a

Amazon Lambda支持的 JoamleAmazon IoT Greengrass现已启动。只要您需要 IP 地址或虚拟网络接口 ARN,就可以使用Amazon IoT Greengrass,您可以使用snowballEdge describe-virtual-network-interfacesSnowball 客户端命令。

连接到 Internet 以更新 Amazon IoT Greengrass 组证书

每次启动Amazon IoT Greengrass服务,则必须登录Amazon IoT Greengrass控制台中用于创建作业的帐户Amazon Snow Family Management Console并启动Amazon IoT Greengrass组部署到Amazon IoT Greengrass核心。有关更多信息,请参阅 。将云配置部署到 Greengrass 核心设备中的Amazon IoT Greengrass开发人员指南。之后,您可以从 Internet 断开设备。关联的 Amazon IoT Greengrass 组随后以脱机模式工作。

重要

当本地任何设备的 IP 地址Amazon IoT Greengrass组更改,将 Snowball Edge 重新连接到 Internet,以便它获得新的证书。

使用 LambdaAmazon IoT GreengrassSnowball Edge 上的函数

现在该服务已启动,并且您已启动Amazon IoT Greengrass组部署到Amazon IoT Greengrass核心,您可以通过将数据写入设备上的 Amazon S3 存储桶来触发 Lambda 函数。除非另有设定,否则 Lambda 函数将由与适用 Snowball 的 Amazon S3 适配器关联的 IoT 设备发送的 MQTT 消息触发。这些 MQTT 消息又由 Amazon S3 PUT 对象操作触发。Amazon S3 PUT 对象操作可通过文件接口(使用写入操作)执行,Amazon CLI(使用适用 Snowball 的 Amazon S3 适配器),也可以通过由您自行设计的某个开发工具包或 REST 应用程序以编程方式执行。

你可以使用你的 LambdaAmazon IoT Greengrass函数针对公共端点运行 Python 代码Amazon服务。为了让此 Python 代码执行顺利进行,您的Amazon SnowballEdge 设备必须连接到 Internet。有关更多信息,请参阅 Amazon Lambda 开发人员指南

更新现有函数

您可在控制台中更新现有 Lambda 函数。如果你这样做,如果你的Amazon SnowballEdge 设备连接到 Internet,则部署代理将通知每个 Lambda 函数更新后的Amazon IoT Greengrass组配置。有关更多信息,请参阅 https://docs.amazonaws.cn/lambda/latest/dg/create-deployment.html 开发人员指南 中的Amazon IoT Greengrass创建部署

添加新函数

收到 Snowball Edge 并将其解锁和连接到 Internet 后,即可添加或删除 Lambda 函数。这些新的 Lambda 函数不必由 Amazon S3 PUT 对象操作触发。相反,您编程为触发新函数的事件将执行函数触 Lambda,就像运行在Amazon IoT Greengrass组中)。

测试 LambdaAmazon IoT Greengrass函数

您可以在创建任务之前或在您开始之后,测试 Lambda 函数Amazon IoT Greengrass在设备上。在创建任务之前在 Lambda 控制台中测试用 Python 编码的函数时,您可能会遇到错误。如果出现这种情况,请参阅错误处理和自动重试中的Amazon Lambda开发人员指南

要在本地测试 Lambda 函数,请使用以下过程。

在本地测试 Lambda 函数

  1. 在 Amazon IoT Greengrass 控制台中创建订阅。有关更多信息,请参阅 。配置订阅中的Amazon IoT Greengrass开发人员指南

  2. 部署Amazon IoT Greengrass组,其中包含对Amazon IoT Greengrass核心在 Snowball 边缘设备上运行。在此订阅中,指定以下内容:

    • 这些区域有:作为具有在创建任务时生成的 Snowball Edge 任务 ID 的设备。

    • Target (目标) 指定为 Amazon IoT 服务。

  3. 在部署成功完成后,请使用用于创建任务的账户登录 Amazon IoT 控制台。

  4. 选择测试,然后选择订阅主题

  5. 适用于订阅主题中,输入 Snowball Edge 上要将对象复制到其中的存储桶的名称。

  6. 选择订阅主题。然后,MQTT 客户端页面将向您显示对您指定的存储桶的订阅。

  7. 使用Amazon CLI、用于雪球的 Amazon S3 Adapter (Amazon Snowball) 或其中一个Amazon开发工具包,将对象复制到指定的存储桶。

然后,JSON 对象将显示 MQTT 消息中包含的负载,发布到Amazon IoT Greengrass核心Amazon IoT Greengrass服务在 Snowball 边缘设备上运行。此负载包含对象名称以及将此对象放入其中的存储桶的名称。

现在,您已成功测试您的 Lambda 函数。JSON 对象指示 MQTT 消息发布到Amazon IoT Greengrass核心已成功接收,并且关联的 Lambda 函数已运行。有关添加Amazon IoT Greengrass订阅Amazon IoT Greengrass组,请参阅配置订阅中的Amazon IoT Greengrass开发人员指南

停止 Amazon IoT Greengrass

当你完成 Lambda 由提供支持的Amazon IoT Greengrass,您可以使用snowballEdge stop-serviceSnowball 客户端命令。有关更多信息,请参阅在 Snowball Edge 上停止服务

支持的 LambdaAmazon IoT Greengrass在 Snowball Edge 设备上运行的是无状态的。因此,任何数据(包括Amazon IoT Greengrass配置、证书和 Lambda 函数),当Amazon IoT Greengrass服务进入DEACTIVATING状态或变为INACTIVE