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

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

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

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

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

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

以下过程显示了如何在云中配置和存储 Amazon IoT Greengrass 设置。此配置意味着,您可以将 Lambda 函数更改以及对 Snowball Edge 中其他设备的更改推送到 Snowball Edge 中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,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. SelectAWSGreengrassResourceAccessPolicy,然后选择下一步.

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

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

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

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

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

  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支持的Amazon IoT Greengrass.

配置Amazon IoT Greengrass使用Sowball 边缘

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

  • Amazon IoT GreengrassCore— theAmazon IoT Greengrass可分发包已预安装在 Snowball Edge 上。

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

如果您要对其他配置进行更改Amazon IoT Greengrass组与 Snowball Edge 关联,您可在解锁设备并将其连接到 Internet 后创建它们。

创建任务

在 Amazon Snow 系列管理控制台中创建一个任务,并将至少一个已发布 Lambda 函数的 Amazon 资源名称 (ARN) 与一个存储桶相关联。有关创建您的第一个任务的演练,请参阅创建Amazon Snowball Edge作业.

您在创建任务期间选择的所有 Lambda 函数都由与 Amazon S3 接口关联的 IoT 设备发送的 MQTT 消息触发。这些 MQTT 消息在以下情况下触发Amazon S3对上的存储桶执行操作Amazon Snowball Edge设备。

创建虚拟网络接口

当 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 Edge 客户端

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 Edge 客户端)

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 Greengrass在Sowball 边缘

在使用之前Amazon Lambda支持的Amazon IoT Greengrass,你需要使用 Snowball Edge 客户端来启动它。

注意

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

启动Amazon Lambda支持的Amazon 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支持的Amazon IoT Greengrass现已启动。无论何时需要的 IP 地址或虚拟网络接口 ARN,都需要Amazon IoT Greengrass,您可以使用。snowballEdge describe-virtual-network-interfacesSnowball Edge 客户端命令。

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

每次你启动Amazon IoT Greengrass服务,您必须登录Amazon IoT Greengrass控制台使用用于在中创建任务的账户Amazon Snow 系列管理控制台然后启动Amazon IoT Greengrass组部署到Amazon IoT Greengrass核心。有关更多信息,请参阅 Amazon IoT Greengrass 开发人员指南中的 https://docs.amazonaws.cn/greengrass/v2/developerguide/import-lambda-function-console.html。之后,您可以从 Internet 断开设备。关联的 Amazon IoT Greengrass 组随后以脱机模式工作。

重要

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

使用由提供支持的 LambdaAmazon IoT Greengrass在SSnowball Edge

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

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

更新现有函数

您可在控制台中更新现有的 Lambda 函数。如果你这样做,如果你的Amazon Snowball Edge设备连接到 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 对象操作触发。相反,您编程为触发新函数的事件将执行函数触发,就像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 Edge 设备上运行。在此订阅中,指定以下内容:

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

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

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

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

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

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

  7. 使用Amazon CLI、Amazon S3 接口或其中一个Amazon开发工具包,将对象复制到指定的存储桶。

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

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

停止 Amazon IoT Greengrass

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

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