IoT Greengrass는 IoT를 위한 오픈소스 edge runtime으로서, Edge 디바이스의 Component를 build하고 deploy하며, manage하는 cloud 서비스입니다. 이를 이용하여 수백만개의 디바이스를 집, 공장, 자동차와 비지니스에서 활용할 수 있습니다. IoT Greengrass Basic에서 Greengress에 대해 설명합니다.
Greengrass V2는 Java기반 Core를 사용하므로, 별도 컴파일 없이 구동 가능합니다. Greengrass는 Greengrass.jar와 components로 구성되는데, component에는 AWS가 제공하는 nucleus, streammanger 등이 있으며, 사용자가 compoenent를 recipe를 이용해 직접 정의 할 수 있습니다.
Greengrass component는 Greengrass core device를 구동하는 소프트웨어입니다. Greengrass에서는 기본 기능(basic feature)과 공통 라이브러리(common library)를 비롯한 local 개발 툴을 components로 제공하며, Greengrass CLI를 이용하여 Local에서 core device를 개발하고 시험할 수 있습니다. 또는 Component는 cloud를 이용하여 다수의 device에 배포 할 수 있습니다.
Greengrass의 Components들은 IPC 통신을 통해 Nucleus와 연결되고, Components 사이는 MQTT를 이용한 PUBSUB으로 메시지를 교환할 수 있습니다. Component들은 아래의 1,2,3과 같이 Greengrass 내부의 component들간에 local message를 교환할 수 있고, 1,2,4와 같이 IoT Core를 통해 메시지를 교환할 수 있습니다.
-
Pub/Sub IPC에서는 edge에 설치된 component들 끼리, Nucleus의 PubSub service를 이용하여 IPC로 통신하는 방법을 보여줍니다.
-
Pub/Sub IoT Core에서는 edge에 설치된 component가 Nucleus의 IoTMqttClient롤 IPC 통신을 하고, IoT Core와는 PUBSUB을 이용하여 MQTT로 통신하는 방법을 보여줍니다.
그림의 local PubSub의 IPC service identifier은 "aws.greengrass.ipc.pubsub"이고, IoTMQTTClient는 "aws.greengrass.ipc.mqttproxy" 입니다.
Greengrass 디바이스에 설치된 component들은 IPC 통신을 이용하여 PubSub service에 메시지를 보내는 방식으로 통신합니다. 이때 receipe의 ComponentConfiguration에 아래와 같이 "aws.greengrass.ipc.pubsub"을 설정합니다.
"ComponentConfiguration": {
"DefaultConfiguration": {
"accessControl": {
"aws.greengrass.ipc.pubsub": {
"com.example.publisher:pubsub:1": {
"policyDescription": "Allows access to publish to all topics.",
"operations": [
"aws.greengrass#PublishToTopic"
],
"resources": [
"*"
]
}
}
}
}
}
Component가 IPC 통신으로 iotMqttClient service로 메시지를 보내면, 이 Topic을 Subscribe하고 있는 IoT Core로 메시지를 보낼 수 있습니다. 아래와 같이 recipe의 ComponentConfiguration에 "aws.greengrass.ipc.mqttproxy"을 설정합니다.
"ComponentConfiguration": {
"DefaultConfiguration": {
"accessControl": {
"aws.greengrass.ipc.mqttproxy": {
"com.example.publisher:mqttproxy:1": {
"policyDescription": "Allows access to publish to all AWS IoT Core topics.",
"operations": [
"aws.greengrass#PublishToIoTCore"
],
"resources": [
"*"
]
}
}
}
}
}
CDK로 IPC Client V2 배포하기에서는 CDK로 Greengrass에서 IPC Client V2를 배포하는 방법에 대해 설명합니다.
-
Lambda Basic에서는 Greengrass의 Lambda 기능에 대해 설명합니다.
-
Console에서 Lambda 생성하기에서는 AWS Console에서 Greengrass Lambda를 생성하는 방법에 대해 설명합니다.
-
CDK로 Lambda component 배포하기에서는 CDK로 Lambda 및 Local Component를 생성 및 배포할 수 있습니다.
Docker 이미지를 이용하여 Component를 생성할 수 있습니다.
CDK로 Container Conmponent 배포하기는 Greengrass에 Docker 환경을 구성하고 Component를 구성하는 방법에 대해 설명합니다.
Security에서는 Nucleus와 고정 IP 사용과 같은 Greengrass의 Security 이슈에 대해 설명합니다.
상세한 차이점은 Greengrass Version을 참고 바랍니다.
- Core software
- Components
- Inter-process communication (IPC)
- Docker containers
- Nucleus and component security
- Operating system integration and interaction
Greengrass 사용시 보안을 위하여 기능이 제한된 계정을 사용하여야 합니다. 이를 위해 Greengrass를 위한 계정 등록에 따라 계정을 생성합니다.
Greengrass Preparation에 따라 greengrass 디바이스에 greengrass를 설치하고 core device로 등록합니다. Cloud9으로 개발환경을 구성시에는 Cloud9을 Greengrass 디바이스로 사용하기을 참조합니다.
유용한 Greengrass 명령어와 중요한 메모들를 정리하였습니다.
-
Workshop Greengrass을 따라서, Cloud9에 Greengrass V2를 설치하고, Local에서 배포를 수행합니다.
-
Amazon S3를 이용하여 Greengrass Component를 배포하기에 따라, Amazon S3를 통해 배포환경을 구성 합니다.
-
Greengrass device에서 ML Inference에 따라, ML source를 다운로드하여 Greengrass component로 배포할 수 있습니다.
-
ML Component를 이용한 이미지 처리에서는 AWS Greengrass public component인 "DLRImageClassification"을 이용하여 이미지를 classification 하는 방법을 보여주고 있습니다.
-
EC2에 Greengrass 설치하기에 따라서 Greengrass를 설치합니다.
-
Greengrass CLI 설치에 따라 Greengrass CLI를 설치합니다.
-
Greengreen Component을 따라서, receipe와 artifact을 생성합니다.
-
디바이스에서의 ML Inference을 이용하여 ML을 실행할 수 있습니다.
Raspberry Pi에 Greengrass를 설치합니다.
Log Manager에 대해 설명합니다.
Workshop - AWS IoT Greengrass V2
Workshop - AWS IoT Greengrass V2 for beginners
AWS re:Invent 2020: Dive deep and accelerate your implementation of AWS IoT Greengrass 2.0
Troubleshooting identity and access issues for AWS IoT Greengrass