本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
运行Amazon IoT Greengrass在 Docker 容器中使用手动资源配置
本教程介绍如何安装和运行Amazon IoT Greengrass使用手动配置的 Docker 容器中的核心软件Amazon资源的费用。
主题
Prerequisites
要完成本教程,您需要:
-
一个 Amazon Web Services 账户。如果没有,请参阅设置Amazon Web Services 账户。
-
网络 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 Compose
1.22 或更高版本。仅当您希望使用 Docker 撰写 CLI 运行 Docker 映像时,才需要使用 Docker 撰写。
创建Amazon IoTthing
Amazon IoT things表示连接到Amazon IoT. Greengrass 核心设备Amazon IoT事物。当您将设备注册为Amazon IoT事情,该设备可以使用数字证书来验证Amazon. 此证书允许设备与Amazon IoT和Amazon IoT Greengrass.
在本节中,您将创建Amazon IoT事物并下载证书,您的设备可用于连接到Amazon.
创建Amazon IoTthing
-
创建Amazon IoT事物为您的设备。在您的开发计算机上运行以下命令。
-
Replace
我的绿色草原
替换为要使用的事物名称。此名称也是 Greengrass 核心设备的名称。注意 事物名称不能包含冒号(
:
) 字符。
aws iot create-thing --thing-name
MyGreengrassCore
如果请求成功,响应类似于下列示例。
{ "thingName": "MyGreengrassCore", "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42" }
-
-
创建一个文件夹,您可以在其中下载Amazon IoT事物。
mkdir greengrass-v2-certs
-
创建并下载Amazon IoT事物。
aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
如果请求成功,响应类似于下列示例。
{ "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificatePem": "-----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw 3rrszlaEXAMPLE= -----END CERTIFICATE-----", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n" } }
-
将证书附加到Amazon IoT事物。
-
Replace
我的绿色草原
的名称为Amazon IoT事物。 -
将证书 Amazon 资源名称 (ARN) 替换为您在上一步中创建的证书的 ARN。
aws iot attach-thing-principal --thing-name
MyGreengrassCore
--principalarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
如果请求成功,命令没有任何输出。
-
-
创建并附加Amazon IoT策略,该策略定义Amazon IoT权限。以下策略允许访问所有 MQTT 主题和 Greengrass 操作,因此您的设备适用于需要新 Greengrass 操作的自定义应用程序和未来更改。您可以基于自己的使用案例来限制此策略。有关更多信息,请参阅最低Amazon IoT用于 的 策略Amazon IoT Greengrass V2核心设备。
如果您之前已经设置过 Greengrass 核心设备,您可以将其Amazon IoT策略,而不是创建新策略。
执行以下操作:
-
创建包含Amazon IoT策略文档,Greengrass 的核心设备需要。
nano greengrass-v2-iot-policy.json
将以下 JSON 复制到该文件中。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect", "greengrass:*" ], "Resource": [ "*" ] } ] }
-
创建Amazon IoT策略文档中。
-
Replace
绿色草原 V2 政策
替换为要创建的策略的名称。
aws iot create-policy --policy-name
GreengrassV2IoTThingPolicy
--policy-document file://greengrass-v2-iot-policy.json如果请求成功,响应类似于下列示例。
{ "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Subscribe\", \"iot:Receive\", \"iot:Connect\", \"greengrass:*\" ], \"Resource\": [ \"*\" ] } ] }", "policyVersionId": "1" }
-
-
将Amazon IoT策略添加到Amazon IoT事物的证书。
-
Replace
绿色草原 V2 政策
替换为要附加的策略的名称。 -
将目标 ARN 替换为您的证书的 ARN。Amazon IoT事物。
aws iot attach-policy --policy-name
GreengrassV2IoTThingPolicy
--targetarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
如果请求成功,则命令没有任何输出。
-
-
-
(可选)将Amazon IoT事物添加到新的或现有事物组。您可以使用事物组来管理 Greengrass 核心设备的队列。在将软件组件部署到设备时,可以选择针对单个设备或设备组。您可以将设备添加到具有活动 Greengrass 部署的事物组,以将该事物组的软件组件部署到该设备。执行以下操作:
-
(可选)创建Amazon IoT事物组。
-
Replace
我的格林格拉斯考雷集团
替换为要创建的事物组的名称。注意 事物组名称不能包含冒号 (
:
) 字符。
aws iot create-thing-group --thing-group-name
MyGreengrassCoreGroup
如果请求成功,响应类似于下列示例。
{ "thingGroupName": "MyGreengrassCoreGroup", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup", "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa" }
-
-
添加Amazon IoT事物到事物组。
-
Replace
我的绿色草原
的名称为Amazon IoT事物。 -
Replace
我的格林格拉斯考雷集团
替换为事物组的名称。
aws iot add-thing-to-thing-group --thing-name
MyGreengrassCore
--thing-group-nameMyGreengrassCoreGroup
如果请求成功,则命令没有任何输出。
-
-
下载亚马逊根证书颁发机构
在上一步中,您下载了Amazon IoT事物。在该步骤中,您将下载 Amazon 根证书颁发机构 (CA) 证书。Amazon IoT证书默认与亚马逊的根 CA 证书关联。
运行以下命令下载根 CA 证书。
curl ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
检索Amazon IoT终端节点
GetAmazon IoT您的终端节点Amazon Web Services 账户,然后保存它们以便稍后使用。您的设备使用这些端点连接到Amazon IoT. 执行以下操作:
-
GetAmazon IoT数据终端节点Amazon Web Services 账户.
aws iot describe-endpoint --endpoint-type iot:Data-ATS
如果请求成功,响应类似于下列示例。
{ "endpointAddress": "
device-data-prefix
-ats.iot.us-west-2.amazonaws.com" } -
GetAmazon IoT凭据终端节点Amazon Web Services 账户.
aws iot describe-endpoint --endpoint-type iot:CredentialProvider
如果请求成功,响应类似于下列示例。
{ "endpointAddress": "
device-credentials-prefix
.credentials.iot.us-west-2.amazonaws.com" }
创建令牌交换角色
Greengrass 核心设备使用 IAM 服务角色,称为令牌交换角色,以授权调用Amazon服务。设备使用Amazon IoT凭证提供程序来获取临时Amazon凭据,这允许设备与Amazon IoT,将日志发送到 Amazon CloudWatch Logs,并从 Amazon S3 下载自定义组件工件。有关更多信息,请参阅授权核心设备与Amazon服务。
您使用Amazon IoT 角色别名配置 Greengrass 核心设备的令牌交换角色。角色别名使您能够更改设备的令牌交换角色,但使设备配置保持不变。有关更多信息,请参阅 。授予直接呼叫Amazon服务中的Amazon IoT Core开发人员指南.
在本部分中,您创建令牌交换 IAM 角色和Amazon IoT角色别名。如果您已经设置了 Greengrass 核心设备,则可以使用其令牌交换角色和角色别名,而不是创建新的。然后,您可以配置设备的Amazon IoT使用该角色和别名的东西。
创建令牌交换 IAM 角色
-
创建一个 IAM 角色,您的设备可用作令牌交换角色。执行以下操作:
-
创建包含令牌交换角色所需的信任策略文档的文件。
nano device-role-trust-policy.json
将以下 JSON 复制到该文件中。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
使用信任策略文档创建令牌交换角色。
-
Replace
绿草 V2 代码交换器
替换为要创建的 IAM 角色的名称。
aws iam create-role --role-name
GreengrassV2TokenExchangeRole
--assume-role-policy-document file://device-role-trust-policy.json如果请求成功,响应类似于下列示例。
{ "Role": { "Path": "/", "RoleName": "GreengrassV2TokenExchangeRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole", "CreateDate": "2021-02-06T00:13:29+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }
-
-
创建一个文件,其中包含令牌交换角色所需的访问策略文档。
nano device-role-access-policy.json
将以下 JSON 复制到该文件中。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:DescribeCertificate", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "s3:GetBucketLocation" ], "Resource": "*" } ] }
注意 此访问策略不允许访问 S3 存储桶中的组件项目。要部署用于在 Amazon S3 中定义对象的自定义组件,您必须向角色添加权限,以允许核心设备检索组件工件。有关更多信息,请参阅允许访问 S3 存储桶。
如果您还没有用于组件对象的 S3 存储桶,您可以稍后在创建存储桶后添加这些权限。
-
从策略文档创建 IAM 策略。
-
Replace
绿色草原 V2 代币交换访问
替换为要创建的 IAM 策略的名称。
aws iam create-policy --policy-name
GreengrassV2TokenExchangeRoleAccess
--policy-document file://device-role-access-policy.json如果请求成功,响应类似于下列示例。
{ "Policy": { "PolicyName": "GreengrassV2TokenExchangeRoleAccess", "PolicyId": "ANPAZ2YMUHYHACI7C5Z66", "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-02-06T00:37:17+00:00", "UpdateDate": "2021-02-06T00:37:17+00:00" } }
-
-
将 IAM 策略附加到令牌交换角色。
-
Replace
绿草 V2 代码交换器
替换为 IAM 角色的名称。 -
将策略 ARN 替换为您在上一步中创建的 IAM 策略的 ARN。
aws iam attach-role-policy --role-name
GreengrassV2TokenExchangeRole
--policy-arnarn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
如果请求成功,则命令没有任何输出。
-
-
-
创建Amazon IoT角色别名,该别名指向令牌交换角色。
-
Replace
绿色草芯代币交换别名
替换为要创建的角色别名的名称。 -
将角色 ARN 替换为您在上一步中创建的 IAM 角色的 ARN。
aws iot create-role-alias --role-alias
GreengrassCoreTokenExchangeRoleAlias
--role-arnarn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
如果请求成功,响应类似于下列示例。
{ "roleAlias": "GreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" }
注意 要创建角色别名,您必须有权将令牌交换 IAM 角色传递给Amazon IoT. 如果您在尝试创建角色别名时收到错误消息,请检查您的角色别名Amazon用户具有此权限。有关更多信息,请参阅 。向用户授予权限以将角色传递给Amazon服务中的Amazon Identity and Access Management用户指南.
-
-
创建并附加Amazon IoT策略,该策略允许您的 Greengrass 核心设备使用角色别名来代入令牌交换角色。如果您之前已经设置过 Greengrass 核心设备,则可以附加其角色别名Amazon IoT策略,而不是创建新策略。执行以下操作:
-
(可选)创建包含Amazon IoT角色别名所需的策略文档。
nano greengrass-v2-iot-role-alias-policy.json
将以下 JSON 复制到该文件中。
-
将资源 ARN 替换为您的角色别名的 ARN。
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "
arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias
" } ] } -
-
创建Amazon IoT策略文档中。
-
Replace
绿色草原代币交易所别墅政策
的名称是Amazon IoT策略创建。
aws iot create-policy --policy-name
GreengrassCoreTokenExchangeRoleAliasPolicy
--policy-document file://greengrass-v2-iot-role-alias-policy.json如果请求成功,响应类似于下列示例。
{ "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy", "policyDocument": "{ \"Version\":\"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": \"iot:AssumeRoleWithCertificate\", \"Resource\": \"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\" } ] }", "policyVersionId": "1" }
-
-
将Amazon IoT策略添加到Amazon IoT事物的证书。
-
Replace
绿色草原代币交易所别墅政策
替换为角色别名的名称Amazon IoT政策。 -
将目标 ARN 替换为您的证书的 ARN。Amazon IoT事物。
aws iot attach-policy --policy-name
GreengrassCoreTokenExchangeRoleAliasPolicy
--targetarn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
如果请求成功,则命令没有任何输出。
-
-
创建配置文件
-
创建放置配置文件的文件夹。
mkdir ./greengrass-v2-config
-
使用文本编辑器创建名为
config.yaml
中的./greengrass-v2-config
folder。例如,您可以运行以下命令来使用 GNU nano 创建
config.yaml
.nano ./greengrass-v2-config/config.yaml
-
将以下 YAML 内容复制到文件中。此部分配置文件指定系统参数和 Greengrass 核参数。
--- system: certificateFilePath: "
/tmp/certs
/device.pem.crt" privateKeyPath: "/tmp/certs
/private.pem.key" rootCaPath: "/tmp/certs
/AmazonRootCA1.pem" rootpath: "/greengrass/v2
" thingName: "MyGreengrassCore
" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "nucleus-version
" configuration: awsRegion: "region
" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias
" iotDataEndpoint: "device-data-prefix
-ats.iot.region
.amazonaws.com" iotCredEndpoint: "device-credentials-prefix
.credentials.region
.amazonaws.com"然后,替换以下值:
-
/tmp/ccess
. 启动容器时将下载的证书装载到的 Docker 容器中的目录。 -
/绿草/v2
. 要用于安装的 Greengrass 根文件夹。您将GGC_ROOT
环境变量来设置此值。 -
我的绿色草原
. Amazon IoT 事物的名称。 -
核心版本
. 的版本Amazon IoT Greengrass要安装的核心软件。该值必须与 Docker 映像或 Docker 文件的版本匹配。如果您下载了 Greengrass 码头图像latest
标签,使用docker inspect
可查看映像版本image-id
-
区域
. 这些区域有:Amazon Web Services 区域您在哪里创建了Amazon IoT资源的费用。还必须为AWS_REGION
环境变量环境文件. -
绿色草芯代币交换别名
. 令牌交换角色别名。 -
设备数据前缀
. 您的的前缀Amazon IoT数据终端节点。 -
设备凭据前缀
. 您的的前缀Amazon IoT凭证终端节点。
-
创建环境文件
本教程使用环境文件来设置环境变量,这些变量将传递给Amazon IoT GreengrassDocker 容器中的核心软件安装程序。您还可以使用的-e
或者--env
argumentdocker run
命令在 Docker 容器中设置环境变量,也可以在一个environment
数据块docker-compose.yml
文件。
-
使用文本编辑器创建名为
.env
.例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 创建
.env
在当前目录中。nano .env
-
将以下内容复制到文件中。
GGC_ROOT_PATH=
/greengrass/v2
AWS_REGION=region
PROVISION=false COMPONENT_DEFAULT_USER=ggc_user:ggc_group DEPLOY_DEV_TOOLS=true INIT_CONFIG=/tmp/config/
config.yaml然后,替换以下值。
-
/绿草/v2
. 根文件夹的路径,用于安装Amazon IoT GreengrassCore 软件。 -
区域
. 这些区域有:Amazon Web Services 区域您在哪里创建了Amazon IoT资源的费用。您必须为awsRegion
配置参数配置文件. -
/tmp/配置/
. 启动 Docker 容器时将配置文件装载到的目录。
-
运行Amazon IoT Greengrass容器中的核心软件
本教程介绍如何将最新的Amazon IoT GreengrassDocker Hub 中的 Docker 镜像,并启动 Docker 容器。您可以使用 Docker CLI 或 Docker 编写 CLI 运行Amazon IoT GreengrassDocker 容器中的核心软件映像。
后续步骤
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 日志复制到主机上的临时目录中,请运行以下命令:/greengrass/v2
/logs
docker cp
container-id
:/greengrass/v2/logs/tmp/logs
如果要在容器退出或被删除后保留日志,我们建议您只绑定装载
目录添加到主机上的临时日志目录,而不是挂载整个 Greengrass 目录。有关更多信息,请参阅将 Greengrass 日志保留在 Docker 容器之外。/greengrass/v2
/logs
停止运行中的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 执行问题排查.