运行Amazon IoT Greengrass在具有自动资源预置的 Docker 容器中 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

运行Amazon IoT Greengrass在具有自动资源预置的 Docker 容器中

本教程介绍如何安装和运行Amazon IoT GreengrassDocker 容器中的核心软件,可自动配置Amazon资源和地方发展工具. 你可以使用这个开发环境来探索Amazon IoT GreengrassDocker 容器中的功能。该软件需要Amazon提供这些资源和部署本地开发工具的证书。

如果你不能提供Amazon凭证的使用,您可以预置Amazon核心设备运行所需的资源。您还可以将开发工具部署到核心设备以用作开发设备。这样,您就可以在运行容器时向设备提供较少的权限。有关更多信息,请参阅 运行Amazon IoT Greengrass在 Docker 容器中使用手动资源调配

先决条件

要完成此教程,您需要以下内容。

  • 一个 Amazon Web Services 账户。如果没有,请参阅设置Amazon Web Services 账户

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon具有配置权限的 IAM 用户Amazon IoT和 Greengrass 核心设备的 IAM 资源。这些区域有:Amazon IoT Greengrass核心软件安装程序使用您的Amazon凭据以自动置备这些资源。有关自动预配置资源的最低 IAM 策略的信息,请参阅安装程序配置资源的最低 IAM 策略.

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT GreengrassDocker 镜像。本教程介绍如何拉取Amazon IoT GreengrassDocker Hub 中的 Docker 镜像。您还可在其他实例上运行拉取Amazon IoT GreengrassDocker 镜像Amazon EElastic Container Registry (Amazon ECR)从Amazon IoT GreengrassDockerfile.

  • 运行 Docker 容器的主机必须满足以下要求:

    • 基于 Linux 的具有互联网连接的操作系统。

    • Docker 引擎版本 18.09 或更高版本。

    • (可选)Docker Compose版本 1.22 或更高版本。只有当你想使用 Docker Compose CLI 来运行 Docker 镜像时,才需要 Docker Compose。

配置 Amazon凭证

在该步骤中,您在主机上创建一个凭证文件,其中包含您的Amazon安全凭证。当你运行Amazon IoT GreengrassDocker 镜像,您必须将包含此凭据文件的文件夹挂载到/root/.aws/在 Docker 容器中。这些区域有:Amazon IoT Greengrass安装程序使用这些凭据在您的Amazon Web Services 账户. 有关安装程序自动预配置资源所需的最低 IAM 策略的信息,请参阅安装程序配置资源的最低 IAM 策略.

  1. 检索以下操作之一。

  2. 创建用于存放凭证文件的文件夹。

    mkdir ./greengrass-v2-credentials
  3. 使用文本编辑器创建一个名为的配置文件credentials中的./greengrass-v2-credentialsfolder。

    例如,可以运行以下命令来使用 GNU nano 来创建credentials文件。

    nano ./greengrass-v2-credentials/credentials
  4. 添加您的Amazon的凭证credentials文件采用以下格式。

    [default] aws_access_key_id = AKIAIOSFODNN7EXAMPLE aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

    Includeaws_session_token仅适用于临时凭证。

重要

启动后,从主机中删除凭据文件Amazon IoT Greengrass容器。如果你不移除凭证文件,那么你的Amazon凭证将保持在容器内部。有关更多信息,请参阅 运行Amazon IoT Greengrass容器中的核心软件

创建环境文件

本教程使用环境文件来设置环境变量,这些环境变量将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。您还可以使用-e要么--env争论在您的docker run命令在 Docker 容器中设置环境变量,或者你可以在一个environment街区中的docker-compose.yml文件。

  1. 使用文本编辑器创建一个名为的环境文件.env.

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建.env在当前目录中。

    nano .env
  2. 将以下内容复制到该文件中。

    GGC_ROOT_PATH=/greengrass/v2 AWS_REGION=region PROVISION=true THING_NAME=MyGreengrassCore THING_GROUP_NAME=MyGreengrassCoreGroup TES_ROLE_NAME=GreengrassV2TokenExchangeRole TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias COMPONENT_DEFAULT_USER=ggc_user:ggc_group

    然后,替换以下值。

    • /greengrass/v2. 您要用于安装的 Greengrass 根文件夹。您将GGC_ROOT环境变量来设置此值。

    • 领域. 这些区域有:Amazon Web Services 区域创建资源的地方。

    • MyGreengrassCore. Amazon IoT 事物的名称。如果事物不存在,安装程序将创建它。安装程序下载证书以作为Amazon IoTthing。

    • MyGreengrassCoreGroup. 的名称Amazon IoT事物组。如果事物组不存在,则安装程序会创建该事物组并将事物添加到其中。如果事物组存在且具有活动部署,则核心设备将下载并运行部署指定的软件。

    • 格林格拉斯 V2TokenExchangeRole. 替换为允许 Greengrass 核心设备临时使用的 IAM 令牌交换角色的名称Amazon凭证。如果角色不存在,则安装程序会创建该角色并创建并附加名为的策略格林格拉斯 V2TokenExchangeRole访问。有关更多信息,请参阅 授权核心设备与Amazon服务

    • GreengrassCoreTokenExchangeRoleAlias. 令牌交换角色别名。如果角色别名不存在,安装程序会创建它并将其指向您指定的 IAM 令牌交换角色。有关更多信息,请参阅 。

    注意

    您可以设置DEPLOY_DEV_TOOLS环境变量为true部署Greengrass CLI 组件,使您能够在 Docker 容器中开发自定义组件。我们建议您只在开发环境中使用此组件,而不要在生产环境中使用。通过此组件,您可以访问在生产环境中通常不需要的信息和操作。通过将此组件仅部署到您需要它的核心设备,遵循最低特权原则。

运行Amazon IoT Greengrass容器中的核心软件

本教程介绍如何拉最新的Amazon IoT GreengrassDocker Hub 中的 Docker 镜像,然后启动 Docker 容器。可以使用 Docker CLI 或 Docker Compose CLI 来运行Amazon IoT GreengrassDocker 容器中的核心软件映像。

Docker
  1. 运行以下命令来拉取最新Amazon IoT GreengrassDocker Hub 中的 Docker 镜像。

    docker pull amazon/aws-iot-greengrass:latest
  2. 运行以下命令以启动 Docker 容器。此命令运行你从 Docker Hub 下载的 Greengrass Docker 映像。如果您使用来自其他来源的 Docker 镜像,请将amazon/aws-iot-greengrass:LATEST使用 Docker 镜像的名称。

    docker run --rm --init -it --name aws-iot-greengrass \ -v path/to/greengrass-v2-credentials:/root/.aws/:ro \ --env-file .env \ -p 8883 \ amazon/aws-iot-greengrass:latest

    此示例命令将以下参数用于docker run

    • --rm. 当容器退出时清理容器。

    • --init. 在容器中使用初始化进程。

      注意

      这些区域有:--init需要参数才能关闭Amazon IoT Greengrass停止 Docker 容器时的核心软件。

    • -it. (可选)作为交互式进程在前台运行 Docker 容器。可以将此替换为以下应用程序时:-d参数改为在分离模式下运行 Docker 容器。有关更多信息,请参阅 。分离与前景在 Docker 文档中。

    • --name. 运行名为的容器aws-iot-greengrass

    • -v. 将卷装入 Docker 容器以使配置文件和证书文件可用于Amazon IoT Greengrass在容器内运行。

    • --env-file. (可选)指定环境文件以设置环境变量,这些环境变量将被传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。仅当您创建了环境文件设置环境变量。如果您没有创建环境文件,可以使用--env参数直接在 Docker 运行命令中设置环境变量。

    • -p. (可选)将 8883 容器端口发布到主机。如果您想通过 MQTT 进行连接和通信,则需要此参数,因为Amazon IoT Greengrass将端口 8883 用于 MQTT 通信。要打开其他端口,请使用其他-p参数。

    注意

    要以更高的安全性运行 Docker 容器,可以使用--cap-drop--cap-add参数来选择性地为容器启用 Linux 功能。有关更多信息,请参阅 。运行时权限和 Linux 功能在 Docker 文档中。

  3. 从移除凭证./greengrass-v2-credentials在主机设备上。

    rm -rf ./greengrass-v2-credentials
    重要

    您正在移除这些凭证,因为它们提供了核心设备仅在安装期间需要的广泛权限。如果您不删除这些证书,Greengrass 组件和容器中运行的其他进程可以访问它们。如果您需要提供AmazonGreengrass 组件的凭据,请使用令牌交换服务。有关更多信息,请参阅 与交互Amazon服务

Docker Compose
  1. 使用文本编辑器创建一个名为Docker 合成文件docker-compose.yml.

    例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建docker-compose.yml在当前目录中。

    nano docker-compose.yml
    注意

    您也可以下载和使用最新版本的Amazon-提供的撰写文件来自GitHub.

  2. 将以下内容添加到 Compose 文件。您的文件应类似于以下示例。此示例指定了您从 Docker Hub 下载的 Greengrass Docker 映像。如果您使用来自其他来源的 Docker 镜像,请将amazon/aws-iot-greengrass:LATEST使用 Docker 镜像的名称。

    version: '3.7' services: greengrass: init: true container_name: aws-iot-greengrass image: amazon/aws-iot-greengrass:latest volumes: - ./greengrass-v2-credentials:/root/.aws/:ro env_file: .env ports: - "8883:8883"

    此示例合成文件中的以下参数是可选的:

    • ports— 将 8883 容器端口发布到主机。如果您想通过 MQTT 进行连接和通信,则需要此参数,因为Amazon IoT Greengrass将端口 8883 用于 MQTT 通信。

    • env_file— 指定环境文件以设置环境变量,这些环境变量将被传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。仅当您创建了环境文件设置环境变量。如果您没有创建环境文件,您可以使用环境参数直接在 Compose 文件中设置变量。

    注意

    要以更高的安全性运行 Docker 容器,可以使用cap_dropcap_add以选择性地为容器启用 Linux 功能。有关更多信息,请参阅 。运行时权限和 Linux 功能在 Docker 文档中。

  3. 运行以下命令启动 Docker 容器。

    docker-compose -f docker-compose.yml up
  4. 从移除凭证./greengrass-v2-credentials在主机设备上。

    rm -rf ./greengrass-v2-credentials
    重要

    您正在移除这些凭证,因为它们提供了核心设备仅在安装期间需要的广泛权限。如果您不删除这些证书,Greengrass 组件和容器中运行的其他进程可以访问它们。如果您需要提供AmazonGreengrass 组件的凭据,请使用令牌交换服务。有关更多信息,请参阅 与交互Amazon服务

后续步骤

Amazon IoT Greengrass核心软件现在在 Docker 容器中运行。运行以下命令以检索当前正在运行的容器 ID。

docker ps

然后,您可以运行以下命令来访问容器并浏览Amazon IoT Greengrass在容器内运行的核心软件。

docker exec -it container-id /bin/bash

有关创建简单组件的信息,请参阅第 4 步:在您的设备上开发和测试组件教程:Amazon IoT Greengrass V2 入门

注意

当您使用以下应用程序时:docker exec若要在 Docker 容器内运行命令,则这些命令不会记录在 Docker 日志中。要在 Docker 日志中记录您的命令,请将交互式 shell 附加到 Docker 容器。有关更多信息,请参阅 将交互式 Shell 附加到 Docker 容器

这些区域有:Amazon IoT Greengrass核心日志文件被称为greengrass.log并且位于以下应用程序时:/greengrass/v2/logs. 组件日志文件也位于同一个目录中。要将 Greengrass 日志复制到主机上的临时目录中,请运行以下命令:

docker cp container-id:/greengrass/v2/logs /tmp/logs

如果你想在容器退出或被移除后保留日志,我们建议你只绑定挂载/greengrass/v2/logs目录到主机上的临时日志目录,而不是挂载整个 Greengrass 目录。有关更多信息,请参阅 在 Docker 容器之外保留 Greengrass 日志

停止运行Amazon IoT GreengrassDocker 容器,运行docker stop要么docker-compose -f docker-compose.yml stop. 此操作发送SIGTERM到 Greengrass 进程,并关闭在容器中启动的所有关联进程。Docker 容器使用docker-init可执行为进程 PID 1,这有助于删除任何剩余的僵尸进程。有关更多信息,请参阅 Docker 文档

有关解决运行问题的信息Amazon IoT Greengrass在 Docker 容器中,请参阅对 Docker 容器中的 Amazon IoT Greengrass 执行问题排查.