运行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 Greengrass功能。

Prerequisites

要完成本教程,需要满足以下条件。

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

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

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT GreengrassDocker 镜像。本教程介绍如何将Amazon IoT GreengrassDocker Hub 中的 Docker 镜像。您还可以拉取Amazon IoT GreengrassDocker 镜像从 Amazon Elastic Container Registry (Amazon ECR) 中,或者您可以构建图像Amazon IoT GreengrassDockerfile.

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

  • Docker 引擎18.09 或更高版本。

  • (可选)Docker Compose1.22 或更高版本。仅当您希望使用 Docker 撰写 CLI 运行 Docker 映像时,才需要使用 Docker 撰写。

配置 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或者--envargument在您的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 DEPLOY_DEV_TOOLS=true

    然后,替换以下值。

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

    • 区域. 这些区域有:Amazon Web Services 区域您创建了资源。

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

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

    • 绿草 V2 代码交换器. 替换为允许 Greengrass 核心设备获取临时的 IAM 令牌交换角色的名称Amazon凭证。如果角色不存在,安装程序将创建该角色并创建并附加名为绿草 V2 代码交换器访问。有关更多信息,请参阅授权核心设备与Amazon服务

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

    注意

    设置DEPLOY_DEV_TOOLS环境变量true部署了本地开发工具,这些工具可以在 Docker 容器内部启用自定义组件开发。不要将此环境变量用于生产设备。

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

本教程介绍如何将最新的Amazon IoT GreengrassDocker Hub 中的 Docker 镜像,并启动 Docker 容器。您可以使用 Docker CLI 或 Docker 编写 CLI 运行Amazon IoT GreengrassDocker 容器中的核心软件映像。

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

    docker pull amazon/aws-iot-greengrass:latest
  2. 运行以下命令以启动 Docker 容器。此命令运行您从 Docker 中心下载的 Greengrass 码头映像。如果您使用来自其他源的 Docker 映像,请将亚马逊/aws-Iot-绿草: 最新替换为 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

    此示例命令使用以下参数码头运行

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

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

      注意

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

    • -it. (可选)将 Docker 容器作为交互进程在前台运行。您可以将该模板替换为-d参数来在分离模式下运行 Docker 容器。有关更多信息,请参阅 。独立 vs 前景在 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. 删除凭据文件path/to/greengrass-v2-credentials.

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

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

    nano docker-compose.yml
    注意

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

  2. 将以下内容添加到 “合成” 文件中。您的文件应类似于以下示例。此示例指定您从 Docker 中心下载的 Greengrass 码头映像。如果您使用来自其他源的 Docker 映像,请将亚马逊/aws-Iot-绿草: 最新替换为 Docker 镜像的名称。

    version: '3.7' services: greengrass: init: true build: context: . 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.

后续步骤

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

docker ps

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

docker exec -it container-id /bin/bash

有关创建简单组件的信息,请参阅创建您的第一个组件开始使用 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 目录。有关更多信息,请参阅将 Greengrass 日志保留在 Docker 容器之外

停止运行中的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 执行问题排查.