AWS IoT Greengrass Version 1 는 2023년 6월 30일에 수명 연장 단계에 들어갔습니다. AWS IoT Greengrass V1 관리형 정책에 대한 자세한 정보는 섹션을 참조하세요. 이 날짜 이후에는 기능, 개선 사항, 버그 수정 또는 보안 패치를 제공하는 업데이트를 릴리스하지 AWS IoT Greengrass V1 않습니다. 에서 실행되는 디바이스는 중단 AWS IoT Greengrass V1 되지 않고 계속 작동하며 클라우드에 연결됩니다. 로 마이그레이션 AWS IoT Greengrass Version 2하는 것이 좋습니다. 이 마이그레이션하면 추가 플랫폼 에 대한 중요한 새 기능과 지원이 추가됩니다. https://docs.aws.amazon.com/greengrass/v2/developerguide/operating-system-feature-support-matrix.html
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Docker 애플리케이션 배포 커넥터
Greengrass Docker 애플리케이션 배포 커넥터를 사용하면 AWS IoT Greengrass 코어에서 Docker 이미지를 더 쉽게 실행할 수 있습니다. 커넥터는 Docker Compose를 사용하여 docker-compose.yml
파일에서 멀티컨테이너 Docker 애플리케이션을 시작합니다. 특히 커넥터는 docker-compose
명령을 실행하여 단일 코어 디바이스에서 Docker 컨테이너를 관리합니다. 자세한 내용은 Docker 설명서의 Docker Compose 개요
Greengrass 그룹을 배포하고 난 후 커넥터는 최신 이미지를 가져오고 Docker 컨테이너를 시작합니다. docker-compose pull
및 docker-compose
up
명령을 실행합니다. 커낵터는 output MQTT topic에 명령의 상태를 게시합니다. 또한 Docker 컨테이너 실행에 대한 상태 정보를 기록합니다. 이렇게 하면 Amazon에서 애플리케이션 로그를 모니터링할 수 CloudWatch 있습니다. 자세한 설명은 AWS IoT Greengrass 로그를 사용하여 모니터링 섹션을 참조하세요. 또한 커넥터는 Greengrass 대몬(daemon)이 다시 시작될 때마다 Docker 컨테이너를 시작합니다. 코어에서 실행할 수 있는 Docker 컨테이너의 수는 하드웨어에 따라 다릅니다.
Docker 컨테이너는 코어 디바이스의 Greengrass 도메인 밖에서 실행되므로 코어의 프로세스 간 통신(IPC) 에 액세스 할 수 없습니다. 그러나 로컬 Lambda 함수 같은 Greengrass 구성 요소와의 일부 통신 채널을 구성할 수 있습니다. 자세한 설명은 Docker 컨테이너와 통신 섹션을 참조하세요.
코어 디바이스에서 웹 서버 또는 MySQL 서버를 호스팅하는 등의 시나리오에서 커넥터를 사용할 수 있습니다. Docker 애플리케이션의 로컬 서비스는 서로 통신할 수 있으며, 로컬 환경의 다른 프로세스 및 클라우드 서비스와도 통신할 수 있습니다. 예를 들어, 코어에서 웹 서버를 실행하여 Lambda 함수에서 클라우드의 웹 서비스로 요청을 보낼 수 있습니다.
이 커넥터는 컨테이너 없음 격리 모드에서 실행되므로 Greengrass 컨테이너화 없이 실행되는 Greengrass 그룹에 배포할 수 있습니다.
이 커넥터의 버전은 다음과 같습니다.
버전 |
ARN |
---|---|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
버전 변경 사항에 대한 자세한 내용은 Changelog를 참조하십시오.
요구 사항
이 커넥터에는 다음과 같은 요구 사항이 있습니다.
-
AWS IoT Greengrass 코어 소프트웨어 v1.10 이상.
참고
OpenWrt 배포판에서는 이 커넥터가 지원되지 않습니다.
-
코어 디바이스에 설치되고 PATH 환경 변수에 추가된 Python
버전 3.7 또는 3.8입니다. 참고
Python 3.8을 사용하려면 다음 명령을 실행하여 기본 Python 3.7 설치 폴더에서 설치된 Python 3.8 바이너리로 연결되는 심볼릭 링크를 만드십시오.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7이렇게 하면 AWS IoT Greengrass에 대한 Python 요구 사항을 충족하도록 디바이스가 구성됩니다.
-
커넥터가 실행 중인 Docker 컨테이너를 모니터링하기 위해서는 Greengrass 코어에서 최소 36MB RAM이 필요합니다. 총 메모리 요구 사항은 코어에서 실행되는 Docker 컨테이너의 수에 따라 다릅니다.
-
Greengrass 코어에 설치된 Docker Engine
1.9.1 이상입니다. 버전 19.0.3은 커넥터와 함께 사용하도록 확인된 최신 버전입니다. docker
실행 파일은/usr/bin
또는/usr/local/bin
디렉터리에 있어야 합니다.중요
Docker 자격 증명의 로컬 복사본을 보호하려면 자격 증명 저장소를 설치하는 것이 좋습니다. 자세한 설명은 보안 참고 사항 섹션을 참조하세요.
Amazon Linux 배포판에 Docker를 설치하는 방법에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서의 Amazon ECS용 Docker 기본 사항을 참조하십시오.
-
Greengrass 코어에 설치된 Docker Compose
입니다. docker-compose
실행 파일은/usr/bin
또는/usr/local/bin
디렉터리에 있어야 합니다.다음 Docker Compose 버전은 커넥터와 함께 사용하도록 확인되었습니다.
커넥터 버전
확인된 Docker Compose 버전
7
1.25.4
6
1.25.4
5
1.25.4
4
1.25.4
3
1.25.4
2
1.25.1
1
1.24.1
-
Amazon Simple Storage Service(S3)에 저장된 단일 Docker Compose 파일(예:
docker-compose.yml
) 형식은 코어에 설치된 Docker Compose의 버전과 호환되어야 합니다. 코어에서 사용하기 전에 파일을 테스트해야 합니다. Greengrass 그룹을 배포한 후 파일을 편집하는 경우, 그룹을 다시 배포하여 코어의 로컬 복사본을 업데이트해야 합니다. -
로컬 Docker 대몬(daemon)을 호출하고 Compose 파일의 로컬 복사본을 저장하는 디렉터리에 쓸 수 있는 권한이 있는 Linux 사용자입니다. 자세한 설명은 코어에서 Docker 사용자 설정 섹션을 참조하세요.
-
Compose 파일이 포함된 S3 버킷에서
s3:GetObject
작업을 허용하는 Greengrass 그룹 역할에 추가된 정책입니다. 이 권한은 다음 IAM 정책 예제에 나와 있습니다.{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::
bucket-name
/*" } ] }참고
S3 버킷에서 버전 관리를 사용하는 경우,
s3:GetObjectVersion
작업을 허용하도록 역할을 구성해야 합니다. 자세한 내용은 Amazon Simple Storage Service 사용 설명서의 버전 관리 사용을 참조하세요.그룹 역할 요구 사항의 경우, 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.
-
Docker Compose 파일이 Amazon ECR에 저장된 Docker 이미지를 참조하는 경우, 다음을 허용하도록 Greengrass 그룹 역할이 구성됩니다.
-
Docker 이미지가 포함된 Amazon ECR 리포지토리에 대한
ecr:GetDownloadUrlForLayer
및ecr:BatchGetImage
작업입니다. -
리소스에 대한
ecr:GetAuthorizationToken
작업입니다.
리포지토리는 커넥터와 동일한 AWS 계정 및 AWS 리전에 있어야 합니다.
중요
그룹 역할의 권한은 Greengrass 그룹의 모든 Lambda 함수 및 커넥터에서 수임할 수 있습니다. 자세한 설명은 보안 참고 사항 섹션을 참조하세요.
이러한 권한은 다음 예제 정책에 나와 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:
region
:account-id
:repository/repository-name
" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }자세한 내용을 알아보려면 Amazon ECR 사용 설명서의 Amazon ECR 리포지토리 정책 예시를 참조하세요.
그룹 역할 요구 사항의 경우, 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.
-
-
Docker Compose 파일이 AWS Marketplace
에서 Docker 이미지를 참조하는 경우, 커넥터에는 다음과 같은 요구 사항이 있습니다. -
AWS Marketplace 컨테이너 제품을 구독해야 합니다. 자세한 내용은 AWS Marketplace 구독자 가이드의 컨테이너 제품 검색 및 구독을 참조하십시오.
-
AWS IoT Greengrass은(는) 비밀 요구 사항에 설명된 대로 로컬 비밀을 지원하도록 구성해야 합니다. 커넥터는 이 기능을 사용하여 AWS Secrets Manager에서 사용자의 비밀을 검색하되 저장하지는 않습니다.
-
Compose 파일에서 참조 된 Docker 이미지를 저장하는 각 AWS Marketplace 레지스트리에 대해 Secrets Manager에서 비밀을 생성해야 합니다. 자세한 설명은 프라이빗 리포지토리에서 도커 이미지에 액세스 섹션을 참조하세요.
-
-
Docker Compose 파일이 Docker Hub 같이 Amazon ECR 이외의 레지스트리의 프라이빗 레지스트리에서 Docker 이미지를 참조하는 경우, 커넥터에는 다음과 같은 요구 사항도 있습니다.
-
AWS IoT Greengrass은(는) 비밀 요구 사항에 설명된 대로 로컬 비밀을 지원하도록 구성해야 합니다. 커넥터는 이 기능을 사용하여 AWS Secrets Manager에서 사용자의 비밀을 검색하되 저장하지는 않습니다.
-
Compose 파일에서 참조된 Docker 이미지를 저장하는 각 프라이빗 리포지토리에 대해 Secrets Manager에서 비밀을 생성해야 합니다. 자세한 설명은 프라이빗 리포지토리에서 도커 이미지에 액세스 섹션을 참조하세요.
-
-
이 커넥터가 포함된 Greengrass 그룹을 배포할 때 Docker 대몬(daemon)이 실행 중이어야 합니다.
프라이빗 리포지토리에서 도커 이미지에 액세스
자격 증명을 사용하여 Docker 이미지에 액세스하는 경우, 커넥터가 여기에 액세스할 수 있도록 허용해야 합니다. 이 작업을 수행하는 방법은 Docker 이미지의 위치에 따라 다릅니다.
Amazon ECR에 저장된 Docker 이미지의 경우, Greengrass 그룹 역할에서 권한 부여 토큰을 얻을 수 있는 권한을 부여합니다. 자세한 설명은 요구 사항 섹션을 참조하세요.
다른 프라이빗 리포지토리 또는 레지스트리에 저장된 Docker 이미지의 경우, 로그인 정보를 저장하기 위해 AWS Secrets Manager에서 비밀을 생성해야 합니다. 여기에는 AWS Marketplace에서 구독한 Docker 이미지가 포함됩니다. 각 리포지토리에 대해 하나의 비밀을 생성합니다. Secrets Manager에서 비밀을 업데이트하면 다음에 그룹을 배포할 때 변경 내용이 코어에 전파됩니다.
참고
Secrets Manager는 AWS 클라우드에서 자격 증명, 키 및 기타 비밀을 안전하게 저장하고 관리하는 데 사용할 수 있는 서비스입니다. 자세한 내용은 AWS Secrets Manager 사용 설명서의(AWS Secrets Manager이)란 무엇입니까? 섹션을 참조하십시오.
각 비밀에는 다음 키가 포함되어야 합니다.
키 |
값 |
---|---|
|
리포지토리 또는 레지스트리에 액세스하는 데 사용되는 사용자 이름입니다. |
|
리포지토리 또는 레지스트리 액세스에 사용되는 암호입니다. |
|
레지스트리의 엔드포인트입니다. 이것은 Compose 파일의 해당 레지스트리 URL과 일치해야 합니다. |
참고
기본적으로 AWS IoT Greengrass이 비밀에 액세스 할 수 있게 하려면 암호의 이름이 greengrass-로 시작해야 합니다. 그렇지 않으면 Greengrass 서비스 역할이 액세스 권한을 부여해야 합니다. 자세한 설명은 AWS IoT Greengrass의 암호 값 가져오기 허용 섹션을 참조하세요.
- AWS Marketplace에서 Docker 이미지에 대한 로그인 정보를 얻으려면
-
-
aws ecr get-login-password
명령을 사용하여 AWS Marketplace에서 Docker 이미지의 암호를 가져오십시오. 자세한 내용은 AWS CLI 명령 레퍼런스의 get-login-password 섹션을 참조하십시오.aws ecr get-login-password
-
Docker 이미지의 레지스트리 URL을 검색합니다. AWS Marketplace 웹 사이트를 열고 컨테이너 제품 시작 페이지를 엽니다. 컨테이너 이미지에서 컨테이너 이미지 세부 정보 보기를 선택하여 사용자 이름과 레지스트리 URL을 찾습니다.
검색된 사용자 이름, 암호 및 레지스트리 URL을 사용하여 Compose 파일에서 참조되는 Docker 이미지를 저장하는 각 AWS Marketplace 레지스트리의 비밀을 생성합니다.
-
- 비밀을 생성하려면(콘솔)
-
AWS Secrets Manager 콘솔에서 다른 유형의 비밀을 선택합니다. Specify the key-value pairs to be stored for this secret(이 비밀에 저장할 키-값 페어 지정)에서
username
,password
및registryUrl
에 행을 추가합니다. 자세한 정보는 AWS Secrets Manager 사용 설명서의 기본 비밀 생성을 참조하세요. - 비밀을 만들려면(CLI)
-
다음의 예제를 참고하여 AWS CLI에서 Secrets Manager
create-secret
명령을 사용합니다. 자세한 내용은 AWS CLI 명령 참조의 create-secret을 참조하세요.aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
중요
Docker Compose 파일을 저장하는 DockerComposeFileDestinationPath
디렉터리와 프라이빗 리포지토리에서 Docker 이미지에 대한 자격 증명을 보호하는 것은 사용자의 책임입니다. 자세한 설명은 보안 참고 사항 섹션을 참조하세요.
파라미터
이 커넥터는 다음 파라미터를 제공합니다.
커넥터 만들기 예(AWS CLI)
다음 CLI 명령은 Greengrass Docker 애플리케이션 배포 커넥터가 포함된 초기 버전을 사용하여 ConnectorDefinition
을(를) 생성합니다.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "myS3Bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret1-hash
\",\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret2-hash
\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
참고
이 커넥터의 Lambda 함수에는 수명이 긴 수명 주기가 있습니다.
입력 데이터
이 커넥터는 입력 데이터를 요구하거나 허용하지 않습니다.
출력 데이터
이 커넥터는 docker-compose up
명령의 상태를 출력 데이터로 게시합니다.
- 구독의 주제 필터
-
dockerapplicationdeploymentconnector/message/status
- 출력 예: 성공
-
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"myS3Bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
- 출력 예: 실패
-
{ "status":"fail", "error_message":"
description of error
", "error":"InvalidParameter" }오류 유형은
InvalidParameter
또는InternalError
일 수 있습니다.
AWS IoT Greengrass 코어에서 Docker 사용자 설정
Greengrass Docker 애플리케이션 배포 커넥터는 DockerUserId
파라미터에 지정한 사용자로 실행됩니다. 값을 지정하지 않으면 커넥터가 기본 Greengrass 액세스 ID인 ggc_user
(으)로 실행됩니다.
커넥터가 Docker 대몬(daemon)과 상호 작용할 수 있게 하려면 Docker 사용자가 코어의 docker
Linux 그룹에 속해야 합니다. Docker 사용자는 DockerComposeFileDestinationPath
디렉터리에 대한 쓰기 권한이 있어야 합니다. 여기에 커넥터가 로컬 docker-compose.yml
파일 및 Docker 자격 증명을 저장합니다.
참고
-
기본값
ggc_user
을 사용하는 대신 Linux 사용자를 생성하는 것이 좋습니다. 그렇지 않으면 Greengrass 그룹의 모든 Lambda 함수가 Compose 파일 및 Docker 자격 증명에 액세스 할 수 있습니다. -
반드시 필요한 경우, 외에는 루트로 실행하는 것은 피하는 것이 좋습니다. 루트 사용자를 지정하는 경우, Lambda 함수가 AWS IoT Greengrass 코어에서 루트로 실행되도록 허용해야 합니다. 자세한 설명은 루트로서의 Lambda 함수 실행 섹션을 참조하세요.
-
사용자를 생성합니다.
useradd
명령을 실행하고 UID를 할당하는-u
옵션을 포함시킬 수 있습니다. 예:sudo useradd -u
1234
user-name
-
코어의
docker
그룹에 사용자를 추가합니다. 예:sudo usermod -aG docker
user-name
docker
그룹을 생성하는 방법을 포함하여 자세한 내용은 Docker 설명서의 Docker를 루트가 아닌 사용자로 관리를 참조하십시오. -
사용자에게
DockerComposeFileDestinationPath
파라미터에 지정된 디렉터리에 쓰기를 할 수 있는 권한을 부여합니다. 예:-
사용자를 디렉터리의 소유자로 설정합니다. 이 예제에서는 1단계의 UID를 사용합니다.
chown
1234
docker-compose-file-destination-path
-
소유자에게 읽기 및 쓰기 권한을 제공하려면
chmod 700
docker-compose-file-destination-path
자세한 내용은 Linux Foundation 설명서의 Linux에서 파일 및 폴더 권한을 관리하는 방법
을 참조하십시오. -
사용자를 생성할 때 UID를 할당하지 않았거나 기존 사용자를 사용한 경우에는
id
명령을 실행하여 UID를 조회합니다.id -u
user-name
UID를 사용하여 커넥터에 대한
DockerUserId
파라미터를 구성합니다.
-
사용 정보
Greengrass Docker 애플리케이션 배포 커넥터를 사용할 때는 다음과 같은 구현별 사용 정보를 알고 있어야 합니다.
-
프로젝트 이름의 고정 접두사. 커넥터는 시작하는 Docker 컨테이너의 이름 앞에 접두어
greengrassdockerapplicationdeployment
을 추가합니다. 커넥터는 이 접두어를 커넥터에서 실행되는docker-compose
명령에서 프로젝트 이름으로 사용합니다. -
로깅 동작. 커넥터는 상태 정보와 문제 해결 정보를 로그 파일에 기록합니다. 로그를 AWS IoT Greengrass Logs로 전송하고 로컬에 CloudWatch 로그를 기록하도록 구성할 수 있습니다. 자세한 설명은 커넥터에 대한 로깅 섹션을 참조하세요. 커넥터에 대한 로컬 로그의 경로입니다.
/
greengrass-root
/ggc/var/log/user/region
/aws/DockerApplicationDeployment.log로컬 로그에 액세스하려면 루트 권한이 있어야 합니다.
-
Docker 이미지 업데이트. Docker는 코어 디바이스에 이미지를 캐싱합니다. Docker 이미지를 업데이트하고 변경 사항을 코어 디바이스에 전파하고 싶은 경우에는 Compose 파일에서 이미지의 태그를 변경해야 합니다. 변경 사항은 Greengrass 그룹이 배포된 후에 적용됩니다.
-
정리 작업에 대한 10분의 제한 시간. 다시 시작하는 동안 Greengrass 대몬(daemon)이 중지되면
docker-compose down
명령이 시작됩니다. 모든 Docker 컨테이너는docker-compose down
가 시작된 후 정리 작업이 수행되기까지 최대 10분이 소요됩니다. 정리가 10분 안에 완료되지 않으면 나머지 컨테이너를 수동으로 정리해야 합니다. 자세한 내용은 Docker CLI 설명서의 docker rm을 참조하십시오. -
Docker 명령 실행. 문제를 해결하기 위해 코어 디바이스의 터미널 창에서 Docker 명령을 실행할 수 있습니다. 예를 들어 다음 명령을 실행하여 커넥터에서 시작된 Docker 컨테이너를 확인합니다.
docker ps --filter name="greengrassdockerapplicationdeployment"
-
예약 리소스 ID입니다. 커넥터는 Greengrass 그룹에서 생성하는 Greengrass 리소스에 대한
DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_
ID를 사용합니다. 리소스 ID는 그룹에서 고유해야 하므로 이 예약 리소스 ID와 충돌할 수 있는 리소스 ID를 할당해서는 안 됩니다.index
-
오프라인 모드.
DockerOfflineMode
구성 파라미터를True
(으)로 설정하면 Docker 커넥터가 오프라인 모드에서 작동할 수 있습니다. 이는 코어 디바이스가 오프라인 상태일 때 Greengrass 그룹 배포가 다시 시작되고 커넥터가 Docker Compose 파일을 검색하기 위해 Amazon S3 또는 Amazon ECR에 대한 연결을 설정할 수 없는 경우, 발생할 수 있습니다.오프라인 모드가 활성화되면 커넥터는 Compose 파일을 다운로드하고 정상적으로 다시 시작할 때와 마찬가지로
docker login
명령을 실행하려고 시도합니다. 이러한 시도가 실패하면 커넥터는DockerComposeFileDestinationPath
파라미터를 사용하여 지정된 폴더에서 로컬로 저장된 Compose 파일을 찾습니다. 로컬 Compose 파일이 있는 경우, 커넥터는 일반적인docker-compose
명령 시퀀스에 따라 로컬 이미지에서 가져옵니다. Compose 파일이나 로컬 이미지가 없는 경우, 커넥터에 장애가 발생합니다.ForceDeploy
및StopContainersOnNewDeployment
파라미터의 동작은 오프라인 모드에서도 동일하게 유지됩니다.
Docker 컨테이너와 통신
AWS IoT Greengrass은 다음과 같은 Greengrass 구성 요소와 Docker 컨테이너 간의 통신 채널을 지원합니다.
-
Greengrass Lambda 함수는 REST API를 사용하여 Docker 컨테이너의 프로세스와 통신 할 수 있습니다. 포트를 여는 Docker 컨테이너에서 서버를 설정할 수 있습니다. Lambda 함수는 이 포트의 컨테이너와 통신할 수 있습니다.
-
Docker 컨테이너의 프로세스는 로컬 Greengrass 메시지 브로커를 통해 MQTT 메시지를 교환할 수 있습니다. Docker 컨테이너를 Greengrass 그룹에서 클라이언트 디바이스로 설정한 다음, 컨테이너가 그룹의 Greengrass Lambda 함수, 클라이언트 디바이스 및 기타 커넥터나 AWS IoT 및 로컬 섀도우 서비스와 통신할 수 있도록 허용하는 구독을 생성할 수 있습니다. 자세한 설명은 Docker 컨테이너와의 MQTT 통신 구성 섹션을 참조하세요.
-
Greengrass Lambda 함수는 공유 파일을 업데이트하여 Docker 컨테이너에 정보를 전달할 수 있습니다. Compose 파일을 사용하여 Docker 컨테이너의 공유 파일 경로를 바인드 마운트 할 수 있습니다.
Docker 컨테이너와의 MQTT 통신 구성
Docker 컨테이너를 클라이언트 디바이스로 구성하여 Greengrass 그룹에 추가할 수 있습니다. 그런 다음 Docker 컨테이너와 Greengrass 구성 요소 또는 AWS IoT 간의 MQTT 통신을 허용하는 구독을 생성할 수 있습니다. 다음 절차에서는 Docker 컨테이너 장치가 로컬 섀도우 서비스에서 섀도우 업데이트 메시지를 수신 할 수 있도록 허용하는 구독을 생성합니다. 이 패턴을 따라 다른 구독을 생성할 수 있습니다.
참고
이 절차에서는 이미 Greengrass 그룹과 Greengrass 코어(v1.10 이상)를 생성했다고 가정합니다. Greengrass 그룹 또는 코어를 생성하는 방법에 대한 자세한 내용은 시작하기 AWS IoT Greengrass을(를) 참조하세요.
Docker 컨테이너를 클라이언트 디바이스로 구성하여 Greengrass 그룹에 추가하려면
-
코어 디바이스에 폴더를 생성하여 Greengrass 디바이스를 인증하는 데 사용되는 인증서와 키를 저장합니다.
시작하고 싶은 Docker 컨테이너에 파일 경로가 마운트 되어야 합니다. 다음 코드 조각은 Compose 파일에 파일 경로를 마운트하는 방법을 보여줍니다. 이 예제에서 는 이 단계에서 만든 폴더를
path-to-device-certs
나타냅니다.version: '3.3' services: myService: image:
user-name
/repo
:image-tag
volumes: - /path-to-device-certs
/:/path-accessible-in-container
AWS IoT 콘솔 탐색 창의 관리에서 Greengrass 디바이스를 확장한 다음 그룹(V1)을 선택합니다.
대상 그룹을 선택합니다.
-
그룹 구성 페이지에서 클라이언트 디바이스를 선택한 다음 연결을 선택합니다.
-
클라이언트 디바이스를 이 그룹에 연결 모달에서 새 AWS IoT 사물 만들기를 선택합니다.
사물 생성 페이지가 새 탭에서 열립니다.
-
사물 생성 페이지에서 단일 사물 생성을 선택한 후 다음을 선택합니다.
-
사물 속성 지정 페이지에서 디바이스 이름을 입력하고 다음을 선택합니다.
-
디바이스 인증서 구성 페이지에서 다음을 선택합니다.
-
인증서에 정책 첨부 페이지에서 다음 중 하나를 수행합니다.
-
클라이언트 디바이스에 필요한 권한을 부여하는 기존 정책을 선택한 다음 사물 생성을 선택합니다.
디바이스가 AWS 클라우드 및 코어에 연결하는 데 사용하는 인증서 및 키를 다운로드할 수 있는 모달이 열립니다.
-
클라이언트 디바이스 권한을 부여하는 새 정책을 만들어 첨부하십시오. 다음을 따릅니다.
-
정책 생성을 선택합니다.
정책 생성 페이지가 새 탭에서 열립니다.
-
[Create policy(정책 생성)] 페이지에서 다음을 수행합니다.
-
정책 이름에는
GreengrassV1ClientDevicePolicy
와(과) 같이 정책을 설명하는 이름을 입력합니다. -
정책 설명 탭의 정책 문서에서 JSON을 선택합니다.
-
다음 정책 문서를 입력합니다. 이 정책을 통해 클라이언트 디바이스는 Greengrass 코어를 검색하고 모든 MQTT 주제에 대해 통신할 수 있습니다. 이 정책의 액세스를 제한하는 방법에 대한 자세한 내용은 AWS IoT Greengrass에 대한 디바이스 인증 및 권한 부여을(를) 참조하세요.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
-
생성(Create)을 선택하여 정책을 생성합니다.
-
-
인증서에 정책 첨부 페이지가 열려 있는 브라우저 탭으로 돌아가십시오. 다음을 따릅니다.
-
정책 목록에서 GreengrassV1ClientDevicePolicy과 같이 만든 정책을 선택합니다.
새 정책이 나타나지 않으면 새로고침 아이콘을 선택합니다.
-
사물 생성(Create thing)을 선택합니다.
디바이스가 AWS 클라우드 및 코어에 연결하는 데 사용하는 인증서 및 키를 다운로드할 수 있는 모달이 열립니다.
-
-
-
-
인증서 및 키 다운로드 모달에서 디바이스의 인증서를 다운로드합니다.
중요
완료를 선택하기 전에 보안 리소스를 다운로드합니다.
다음을 따릅니다.
-
디바이스 인증서의 경우, 다운로드를 선택하여 디바이스 인증서를 다운로드합니다.
-
공개 키 파일의 경우, 다운로드를 선택하여 인증서의 공개 키를 다운로드합니다.
-
개인 키 파일의 경우, 다운로드를 선택하여 인증서의 개인 키 파일을 다운로드합니다.
-
AWS IoT 개발자 안내서의 서버 인증을 검토하고 적절한 루트 CA 인증서를 선택합니다. Amazon Trust Services(ATS) 엔드포인트와 ATS 루트 CA 인증서를 사용하는 것이 좋습니다. 루트 CA 인증서에서 루트 CA 인증서용 다운로드를 선택합니다.
-
완료를 선택합니다.
디바이스 인증서 및 키의 파일 이름에 공통적으로 나타나는 인증서 ID를 기록해 둡니다. 나중에 필요합니다.
-
-
1단계에서 생성한 폴더에 인증서와 키를 복사합니다.
그런 다음 그룹에 구독을 생성합니다. 이 예제에서는 Docker 컨테이너 디바이스가 로컬 섀도우 서비스에서 MQTT 메시지를 수신할 수 있도록 해주는 구독을 생성합니다.
참고
섀도우 문서의 최대 크기는 8KB입니다. 자세한 내용은 AWS IoT 개발자 안내서에서 AWS IoT 할당량을 참조하세요.
Docker 컨테이너 디바이스가 로컬 섀도우 서비스에서 MQTT 메시지를 수신 할 수 있게 해주는 구독을 생성하려면
-
[Select your source and target] 페이지에서 다음과 같이 원본과 대상을 구성합니다.
-
소스 선택에서 서비스를 선택한 다음 Local Shadow Service(로컬 섀도우 서비스)를 선택합니다.
-
대상 선택에서 디바이스를 선택한 다음 해당 디바이스를 선택합니다.
-
다음을 선택합니다.
-
데이터를 주제에 대해 필터링 페이지의 주제 필터에서
$aws/things/
을(를) 선택한 다음 다음을 선택합니다. 이전에 만든 디바이스의MyDockerDevice
/shadow/update/acceptedMyDockerDevice
이름으로 바꾸십시오. -
마침을 클릭합니다.
-
Compose 파일에서 참조하는 Docker 이미지에 다음과 같은 코드 조각을 포함시킵니다. 이것은 Greengrass 디바이스 코드입니다. 또한 컨테이너 내부에서 Greengrass 디바이스를 시작하는 코드를 Docker 컨테이너에 추가합니다. 이미지 또는 별도의 스레드에서 별도의 프로세스로 실행할 수 있습니다.
import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)
보안 참고 사항
Greengrass Docker 애플리케이션 배포 커넥터를 사용할 때는 다음과 같은 보안 고려 사항에 유의하십시오.
-
Docker Compose 파일의 로컬 저장소
커넥터는 Compose 파일의 복사본을
DockerComposeFileDestinationPath
파라미터에 지정된 디렉터리에 저장합니다.이 디렉터리의 보안을 유지하는 것은 사용자의 책임입니다. 파일 시스템 권한을 사용하여 디렉터리에 대한 액세스를 제한해야 합니다.
-
Docker 자격 증명의 로컬 스토리지
Docker 이미지가 프라이빗 리포지토리에 저장되어 있는 경우, 커넥터는
DockerComposeFileDestinationPath
파라미터에 지정된 디렉터리에 Docker 자격 증명을 저장합니다.이러한 자격 증명을 보호하는 것은 사용자의 책임입니다. 예를 들어 Docker Engine을 설치할 때 코어 디바이스에서 credential-helper
를 사용해야 합니다. -
신뢰할 수 있는 소스에서 Docker Engine 설치
신뢰할 수 있는 소스에서 Docker Engine을 설치하는 것은 사용자의 책임입니다. 이 커넥터는 코어 디바이스에서 Docker 대몬(daemon)을 사용하여 Docker 자산에 액세스하고 Docker 컨테이너를 관리합니다.
-
Greengrass 그룹 역할 권한의 범위
Greengrass 그룹 역할에 추가하는 권한은 Greengrass 그룹의 모든 Lambda 함수 및 커넥터에서 수임할 수 있습니다. 이 커넥터는 S3 버킷에 저장된 Docker Compose 파일에 액세스해야 합니다. 또한 Docker 이미지가 Amazon ECR의 프라이빗 리포지토리에 저장되어있는 경우, Amazon ECR 인증 토큰에 액세스해야 합니다 .
라이선스
Greengrass Docker 애플리케이션 배포 커넥터에는 다음 타사 소프트웨어/라이선스가 포함되어 있습니다.
-
AWS SDK for Python (Boto3)
/Apache 라이선스 2.0 -
botocore
/Apache 라이선스 2.0 -
dateutil
/PSF 라이선스 -
docutils
/BSD 라이선스, GNU 일반 공개 라이선스(GPL), Python Software Foundation 라이선스, 퍼블릭 도메인 -
jmespath
/MIT 라이선스 -
s3transfer
/Apache 라이선스 2.0 -
urllib3
/MIT 라이선스
이 커넥터는 Greengrass 코어 소프트웨어 라이선스 계약
Changelog
다음 표에서는 의 각 릴리스에서 변경된 중요 사항에 대해 설명합니다.
버전 |
변경 |
---|---|
7 |
오프라인으로 AWS IoT Greengrass을(를) 시작할 때 기존 Docker Compose 파일을 사용하도록 |
6 |
새로 배포하거나 GGC가 중지될 때 컨테이너 정리를 재정의하도록 |
5 |
|
4 |
Docker 이미지를 업데이트하는 pull-before-up 동작이 추가되었습니다. |
3 |
환경 변수를 찾는 문제가 해결되었습니다. |
2 |
|
1 |
최초 릴리스. |
Greengrass 그룹은 한 번에 하나의 커넥터 버전만 포함할 수 있습니다. 커넥터 버전 업그레이드에 대한 자세한 내용은 커넥터 버전 업그레이드을 참조하십시오.