AWS Snowball
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本指南适用于 Snowball Edge。如果您正在查找 Snowball 的相关文档,请参阅 AWS Snowball 用户指南

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

要开始在 Snowball Edge 上使用 由 AWS Greengrass 提供支持的 AWS Lambda 函数,请执行以下步骤:

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

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

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

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

  1. 登录 AWS 管理控制台 并通过以下网址打开 IAM 控制台 https://console.amazonaws.cn/iam/

  2. 对于 Role Type,选择 AWS Greengrass Role

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

  4. 键入角色的名称,然后选择 Create Role

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

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

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

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

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

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

现在,您可以为 Snowball Edge 创建一个任务,并使用 由 AWS Greengrass 提供支持的 AWS Lambda。

为 Snowball Edge 配置 AWS IoT Greengrass

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

  • AWS IoT Greengrass 核心软件 – AWS IoT Greengrass 可分发包已预安装在 Snowball Edge 上。

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

如果您想对与 Snowball Edge 关联的 AWS IoT Greengrass 组进行其他配置更改,可以在解锁设备并将其连接到 Internet 后进行更改。

创建任务

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

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

创建虚拟网络接口

当 Snowball Edge 到达后,解锁设备,并创建一个虚拟网络接口以绑定到 AWS 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" } }

在 Snowball Edge 上启动 AWS IoT Greengrass

您需要先使用 Snowball 客户端启动 由 AWS Greengrass 提供支持的 AWS Lambda,然后才能使用它。

注意

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

启动 由 AWS Greengrass 提供支持的 AWS Lambda

  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. 使用虚拟网络接口启动 AWS IoT Greengrass 服务,如以下示例所示。

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

由 AWS Greengrass 提供支持的 AWS Lambda 现已启动。无论何时需要 AWS IoT Greengrass 的 IP 地址或虚拟网络接口 ARN,都可以使用 snowballEdge describe-virtual-network-interfaces Snowball 客户端命令。

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

每次您启动 AWS IoT Greengrass 服务时,都必须使用在 AWS Snowball 管理控制台中创建任务所用的账户登录 AWS IoT Greengrass 控制台,并启动将 AWS IoT Greengrass 组部署到 AWS IoT Greengrass 核心的过程。有关更多信息,请参阅 AWS IoT Greengrass 开发人员指南 中的将云配置部署到 AWS Greengrass 核心设备。之后,您可以从 Internet 断开设备。关联的 AWS IoT Greengrass 组随后以脱机模式工作。

重要

当本地 AWS IoT Greengrass 组中的任何设备的 IP 地址发生变化时,将 Snowball Edge 重新连接到 Internet,以便它获得新证书。

在 Snowball Edge 上使用由 AWS Greengrass 提供支持的 Lambda 函数

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

您可以使用 由 AWS Greengrass 提供支持的 AWS Lambda 函数针对云中 AWS 服务之间的公共终端节点执行 Python 代码。为了让此 Python 代码执行顺利进行,您的 AWS Snowball Edge 设备需要连接到 Internet。有关更多信息,请参阅 AWS Lambda Developer Guide

更新现有函数

您可在控制台中更新现有 Lambda 函数。如果您这样做,并且您的 AWS Snowball Edge 设备连接至 Internet,则部署代理将通知每个 Lambda 函数更新后的 AWS IoT Greengrass 组配置。有关更多信息,请参阅 AWS IoT Greengrass 开发人员指南 中的创建部署

添加新函数

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

测试由 AWS IoT Greengrass 函数提供支持的 Lambda

您可以在创建任务之前或在设备上启动 AWS IoT Greengrass 之后,测试您的 Lambda 函数。在创建任务之前在 Lambda 控制台中测试用 Python 编码的函数时,您可能会遇到错误。如果出现这种情况,请参阅 AWS Lambda Developer Guide 中的出错时重试

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

在本地测试 Lambda 函数

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

  2. 将包含该订阅的 AWS IoT Greengrass 组部署到在 Snowball Edge 设备上运行的 AWS IoT Greengrass 核心。在此订阅中,指定以下内容:

    • Source (源) 指定为具有在创建任务时生成的 Snowball Edge 任务 ID 的设备。

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

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

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

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

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

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

然后 JSON 对象显示发布到 AWS IoT Greengrass 核心(为在 Snowball Edge 设备上运行的 AWS IoT Greengrass 服务提供支持)的 MQTT 消息中包含的负载。此负载包含对象名称以及将此对象放入其中的存储桶的名称。

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

停止 AWS IoT Greengrass

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

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