(참고: https://catalog.us-east-1.prod.workshops.aws/workshops/5ecc2416-f956-4273-b729-d0d30556013f/en-US)
Greengrass 란?
- 디바이스 소프트웨어를 구축, 배포 및 관리하는데 도움이되는 IoT 오픈 소스 엣지 런타임 및 클라우드 서비스
- 디바이스가 생성하는 데이터에 따라 로컬로 작동, 기계 학습 모델 기반 예측 실행, 데이터 필터링 및 집계, 필요한 정보만 클라우드로 전송하도록 프로그래밍 가능
- 로컬 처리, 메시징, 데이터 관리, ML 추론을 지원하는 지능형 디바이스 소프트웨어 쉽게 구축
Components
- ML 추론, 로컬 처리, 메시징 및 데이터 관리와 같은 복잡한 워크플로를 쉽게 생성할 수 있는 빌딩 블록
- Stream Manager: 로컬 및 클라우드 대상으로의 데이터 내보내기 지원
- Greengrass Core device
- Greengrass core software를 실행하는 디바이스
- Core device는 AWS IoT 사물, 여러 Core device를 IoT 사물 그룹에 추가해 Greengrass Core device 그룹 생성
- Greengrass Component
- Greengrass Core device에 배포되고 실행되는 소프트웨어 모듈
- Recipe: component 세부 정보, 구성 및 매개 변수를 정의하여 소프트웨어 묘듈을 설명하는 JSON/YAML 파일
- Artifact: 디바이스에서 실행될 소프트웨어를 정의하는 소스 코드, 바이너리 또는 스크립트
- Dependency: 종속 구성 요소의 자동 업데이트 또는 다시 시작을 강제할 수 있는 구성 요소 간의 관계
Deployment
- 단일 Greengrass Core device 또는 Greengrass Core device group이 될 수 있는 destination target device(엣지)에 구성 요소를 보내고 원하는 component 구성을 적용하는 프로세스
- 업데이트된 모든 component를 대상에 자동으로 적용하고 종속성으로 정의 된 다른 모든 구성 요소들을 포함
- deployment의 component 또는 component 구성에 대한 모든 업데이트가 자동으로 모든 destination targets 으로 전송됨
실습의 목표는 AWS IoT Greengrass Core software V2를 실행하는 Edge Gateway 구축하기!
- AWS IoT Greengrass Core software V2 배포 및 설정
- 에지에서 IPC(프로세스 간 통신)을 위한 사용자 지정 구성 요소 만들기
- Publisher component 개발 및 배포
- Subscriber component 개발 및 배포
- Lambda를 사용해 사용자 지정 component를 생성하여 IPC에서 AWS IoT Core로 엣지 데이터 가져오기
- AWS IoT Greengrass V2에서 MQTT 브리지 설정
(리전의 경우 워크숍 기반으로 진행할 것이기 때문에 도쿄(ap-northeast-1)에서 진행한다!)
Cloud9 인스턴스 구성
: Greengrass edge runtime을 실행하기 위한 환경
임시 자격 증명을 비활성화 해준다.(cloud9 아이콘 선택 후 Preferences 클릭)
IAM user를 생성해서 해당 사용자로 AWS CLI 설정을 해준다.
나는 오류가 발생해 sudo aws configure 를 사용했다.
세부정보로 환경 변수 설정을 해주자.
# 환경 변수 설정
export AWS_DEFAULT_REGION="Region you want to use, e.g.for Ireland: eu-west-1"
export AWS_ACCESS_KEY_ID="The AccessKeyId value of the result above"
export AWS_SECRET_ACCESS_KEY="The SecretAccessKey value of the result above"
# 환경 변수 확인
echo $AWS_DEFAULT_REGION
echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY
Greengrass 설정
- AWS IoT Core의 초기 설정을 수행하고 AWS IoT Greengrass V2 설치 프로그램을 사용해 Cloud9(emulating edge gateway)에 Greengrass V2 설치
- 설치 프로그램은 사물, 정책, 디바이스 인증서를 프로비저닝
- IoT Core에서 Greengrass 코어 디바이스 설정 및 AWS IoT Core 연결을 완료
Greengrass Core device로 들어가 코어 디바이스를 1개 생성해보자.
3단계에 보이는 명령어를 cloud9에 입력해주자.
스크립트 완료 후 Greengrass CLI 명령을 실행하고 버전이 표시되면 성공한 것!
/greengrass/v2/bin/greengrass-cli -V
Greengrass의 상태 확인을 하고 싶으면 아래와 같은 명령어를 입력하자.
# 서비스 상태 확인
sudo systemctl status greengrass.service
# 부팅 시 서비스 시작
sudo systemctl enable greengrass.service
추가적인 IAM 정책 허용이 필요하다.
- Publish your custom component (using S3)
- MQTT Bridge
위에서 생성한 정책을 GreengrassV2TokenExchangeRole에 연결 한다.
첫번째 Component 만들기
- component의 단위로 모듈식 소프트웨어를 임의로 개발하고 배포할 수 있다.
- 디바이스에 샘플 애플리케이션을 만들고 이를 구성 요소로 배포할 예정~
component artifact 생성을 먼저 진행한다.
mkdir -p ~/environment/GreengrassCore/artifacts/com.example.HelloWorld/1.0.0 && touch ~/environment/GreengrassCore/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
위의 명령어를 실행하면 아티팩트 폴더와 빈 스크립트 파일이 생성될 것이다.
(아티팩트의 경로의 경우 항상 artifacts/componentName/componentVersion/. 의 형식을 따라야 한다!)
파이썬 파일에 아래의 코드를 붙여 넣는다.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0
import sys
import datetime
import time
while True:
message = f"Hello, {sys.argv[1]}! Current time: {str(datetime.datetime.now())}."
# Print the message to stdout.
print(message)
# Append the message to the log file.
with open('/tmp/Greengrass_HelloWorld.log', 'a') as f:
print(message, file=f)
time.sleep(1)
component recipe 생성을 진행한다.
mkdir -p ~/environment/GreengrassCore/recipes && touch ~/environment/GreengrassCore/recipes/com.example.HelloWorld-1.0.0.json
(레시피를 넣을 폴더와 빈파일을 생성해주는 명령어)
위 단계와 비슷하게 해당 파일에 아래의 코드를 넣고 저장하자.
{
"RecipeFormatVersion": "2020-01-25",
"ComponentName": "com.example.HelloWorld",
"ComponentVersion": "1.0.0",
"ComponentDescription": "My first AWS IoT Greengrass component.",
"ComponentPublisher": "Amazon",
"ComponentConfiguration": {
"DefaultConfiguration": {
"Message": "world"
}
},
"Manifests": [
{
"Platform": {
"os": "linux"
},
"Lifecycle": {
"Run": "python3 -u {artifacts:path}/hello_world.py '{configuration:/Message}'\n"
}
}
]
}
Component 실행 및 테스트
터미널을 새로 열어주고 아래의 로그 확인 명령어를 넣고 열린 상태로 유지하자.
sudo tail -F /greengrass/v2/logs/greengrass.log
대충 요론 느낌
Component를 Greengrass 코어 디바이스에 배포하자.
sudo /greengrass/v2/bin/greengrass-cli deployment create \
--recipeDir ~/environment/GreengrassCore/recipes \
--artifactDir ~/environment/GreengrassCore/artifacts \
--merge "com.example.HelloWorld=1.0.0"
# 배포 성공 확인 로그
tail -F /tmp/Greengrass_HelloWorld.log
여기까지는 테스트를 위해 개발하는 동안 component의 로컬 배포를 만드는 과정이었고,
이제는 component의 특정 버전에 만족하면 현장에서 디바이스에 배포할 구성 요소를 준비하는 과정에 대해 실습할 예정이다.
글이 너무 길어지니 이 내용은 다음 블로그 글에서 다룰 예정~
'Cloud > AWS' 카테고리의 다른 글
[AWS] AWS IoT SiteWise 실습 (0) | 2023.01.27 |
---|---|
[AWS] AWS IoT Greengrass V2 실습 -2 (0) | 2023.01.26 |
[AWS] Firebase를 AWS Amplify로 (0) | 2023.01.04 |
[AWS] re:Invent 2022 정리 (0) | 2022.12.19 |
[AWS] Windows Server RDP 접속 (0) | 2022.12.09 |