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
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS IoT Greengrass 코어 구성
AWS IoT Greengrass 코어는 엣지 환경에서 허브 또는 게이트웨이 역할을 하는 AWS IoT 사물(디바이스)입니다. 다른 AWS IoT 디바이스와 마찬가지로 코어는 레지스트리에 존재하고, 디바이스 섀도우를 보유하며, 디바이스 인증서를 사용해 AWS IoT Core 및 AWS IoT Greengrass를 인증합니다. 코어 디바이스는 Greengrass 그룹에 대한 로컬 프로세스(예: 통신, 섀도우 동기화 및 토큰 교환)를 관리할 수 있도록 해주는 AWS IoT Greengrass 코어 소프트웨어를 실행합니다.
AWS IoT Greengrass 코어 소프트웨어는 다음과 같은 기능을 제공합니다.
-
커넥터 및 Lambda 함수의 배포 및 로컬 실행.
-
AWS 클라우드로 자동 내보내기를 사용하여 로컬에서 데이터 스트림을 처리합니다.
-
관리형 구독을 사용한 디바이스, 커넥터, Lambda 함수 간의 로컬 네트워크를 통한 MQTT 메시징.
-
관리형 구독을 사용한 AWS IoT와 디바이스, 커넥터, Lambda 함수 간의 MQTT 메시징.
-
디바이스 인증 및 권한 부여를 사용하여 디바이스와 AWS 클라우드 간에 설정되는 보안 연결.
-
디바이스의 로컬 섀도우 동기화. 섀도우는 AWS 클라우드와 동기화하도록 구성할 수 있습니다.
-
로컬 디바이스 및 볼륨 리소스에 대한 액세스 제어.
-
로컬 추론 실행을 위한 클라우드 학습 머신러닝 모델 배포.
-
디바이스에서 Greengrass 코어 디바이스를 검색할 수 있도록 지원하는 자동 IP 주소 감지.
-
새 그룹 또는 업데이트된 그룹 구성의 중앙 배포. 구성 데이터를 다운로드한 후 코어 디바이스가 자동으로 다시 시작합니다.
-
사용자 정의 Lambda 함수의 안전한 over-the-air (OTA) 소프트웨어 업데이트
-
로컬 보안 암호의 안전하고 암호화된 저장 및 커넥터 및 Lambda 함수의 액세스 제어.
AWS IoT Greengrass 코어 구성 파일
AWS IoT Greengrass 코어 소프트웨어에 대한 구성 파일은 config.json
입니다. 이 파일은 /
디렉터리에 있습니다.greengrass-root
/config
참고
greengrass-root
는 디바이스에서 AWS IoT Greengrass 코어 소프트웨어가 설치된 경로를 나타냅니다. 일반적으로 이는 /greengrass
디렉터리입니다.
AWS IoT Greengrass 콘솔에서 기본 그룹 생성 옵션을 사용하면 config.json
파일이 작동 상태로 코어 디바이스에 배포됩니다.
다음 명령을 실행하여 이 파일의 내용을 검토할 수 있습니다.
cat /
greengrass-root
/config/config.json
다음은 예 config.json
파일입니다. 이 버전은 AWS IoT Greengrass 콘솔에서 코어를 만들 때 생성됩니다.
서비스 엔드포인트는 루트 CA 인증서 유형과 일치해야 합니다
AWS IoT Core 및 AWS IoT Greengrass 엔드포인트는 디바이스에 있는 루트 CA 인증서 유형과 일치해야 합니다. 엔드포인트와 인증서 유형이 일치하지 않으면 디바이스와 AWS IoT Core 또는 AWS IoT Greengrass 간의 인증 시도가 실패합니다. 자세한 내용은 AWS IoT 개발자 안내서의 서버 인증을 참조하세요.
디바이스에서 Amazon Trust Services(ATS) 루트 CA 인증서(선호되는 방법)를 사용하는 경우, 디바이스 관리 및 검색 데이터 영역 작업에도 ATS 엔드포인트를 사용해야 합니다. AWS IoT Core 엔드포인트에 대한 다음 구문과 같이 ATS 엔드포인트에는 ats
세그먼트가 포함됩니다.
prefix
-ats.iot.region
.amazonaws.com
참고
이전 버전과의 호환성을 위해 AWS IoT Greengrass 현재 일부 AWS 리전 버전에서는 레거시 VeriSign 루트 CA 인증서 및 엔드포인트를 지원합니다. 레거시 VeriSign 루트 CA 인증서를 사용하는 경우 ATS 엔드포인트를 만들고 ATS 루트 CA 인증서를 대신 사용하는 것이 좋습니다. 그렇지 않을 경우 해당 레거시 엔드포인트를 사용하십시오. 자세한 내용은 Amazon Web Services 일반 참조의 지원되는 레거시 엔드포인트 섹션을 참조하세요.
config.json의 엔드포인트
Greengrass 코어 디바이스에서 엔드포인트는 config.json 파일의 coreThing
객체에 지정됩니다. iotHost
속성은 AWS IoT Core 엔드포인트를 나타냅니다. ggHost
속성은 AWS IoT Greengrass 엔드포인트를 나타냅니다. 다음 예제 코드 조각에서 이러한 속성은 ATS 엔드포인트를 지정합니다.
{ "coreThing" : { ... "iotHost" : "abcde1234uwxyz-ats.iot.us-west-2.amazonaws.com", "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com", ... },
- AWS IoT Core 엔드포인트
-
적절한
--endpoint-type
파라미터와 함께 aws iot describe-endpoint CLI 명령을 실행하여 AWS IoT Core 엔드포인트를 가져올 수 있습니다.-
ATS 서명 엔드포인트를 반환하려면 다음을 실행합니다.
aws iot describe-endpoint --endpoint-type iot:Data-ATS
-
VeriSign 서명된 레거시 엔드포인트를 반환하려면 다음을 실행하십시오.
aws iot describe-endpoint --endpoint-type iot:Data
-
- AWS IoT Greengrass 엔드포인트
-
AWS IoT Greengrass 엔드포인트는 호스트 접두사가 greengrass로 대체된
iotHost
엔드포인트입니다. 예를 들어, ATS 서명 엔드포인트는greengrass-ats.iot.
입니다. 이는 해당 AWS IoT Core 엔드포인트와 동일한 리전을 사용합니다.region
.amazonaws.com
포트 443에서 또는 네트워크 프록시를 통해 연결
이 기능은 AWS IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.
Greengrass 코어는 TLS 클라이언트 인증으로 MQTT 메시징 프로토콜을 사용해 AWS IoT Core와 통신합니다. 일반적으로 MQTT over TLS는 포트 8883을 사용합니다. 그러나 보안 조치로서 제한적 환경 하에서 작은 범위의 TCP 포트로의 인바운드 및 아웃바운드 트래픽이 제한될 수 있습니다. 예를 들어, 기업 방화벽은 HTTPS 트래픽용 포트 443을 열지만 MQTT 트래픽용 포트 8883과 같이 비교적 일반적이지 않은 프로토콜에 사용되는 기타 포트를 닫을 수 있습니다. 다른 제한적 환경에서는 모든 트래픽이 인터넷 연결 전에 HTTP 프록시를 경유해야 할 수 있습니다.
이와 같은 시나리오에서 통신을 활성화해야 할 경우 AWS IoT Greengrass에서는 다음 구성이 허용됩니다.
-
포트 443을 통해 TLS 클라이언트 인증을 사용하는 MQTT. 네트워크에서 포트 443에 대한 연결을 허용하는 경우 MQTT 트래픽에 기본 포트(8883) 대신 포트 443을 사용하도록 코어를 구성할 수 있습니다. 이는 포트 443으로 직접 연결되거나 네트워크 프록시 서버를 통해 연결되는 것일 수 있습니다.
AWS IoT Greengrass는 ALPN(Application Layer Protocol Network
) TLS 확장을 사용해 이러한 연결을 지원합니다. 기본 구성과 마찬가지로 포트 443에서의 MQTT over TLS는 인증서 기반 클라이언트 인증을 사용합니다. 포트 443에 대한 직접 연결을 사용하도록 구성된 경우 코어는 AWS IoT Greengrass 소프트웨어에 대한 over-the-air (OTA) 업데이트를 지원합니다. 이 지원을 위해서는 AWS IoT Greengrass 코어 v1.9.3 이상이 필요합니다.
-
포트 443을 통한 HTTPS 통신. AWS IoT Greengrass는 기본적으로 포트 8443을 통해 HTTPS 트래픽을 보내지만 포트 443을 사용하도록 구성할 수 있습니다.
-
네트워크 프록시를 통한 연결. Greengrass 코어에 연결을 위한 중간 역할을 수행하도록 네트워크 프록시 서버를 구성할 수 있습니다. 기본 인증과 HTTP 및 HTTPS 프록시만 지원됩니다.
프록시 구성은
http_proxy
,https_proxy
및no_proxy
환경 변수를 통해 사용자 정의 Lambda 함수로 전달됩니다. 프록시를 통해 연결하려면 사용자 정의 Lambda 함수가 이러한 전달된 설정을 사용해야 합니다. boto3 또는 cURL 및 pythonrequests
패키지와 같은 연결을 만드는 데 Lambda 함수가 사용하는 공통 라이브러리는 일반적으로 이러한 환경 변수를 기본값으로 사용합니다. 또한 Lambda 함수가 이러한 동일한 환경 변수를 지정하는 경우 AWS IoT Greengrass가 이를 재정의하지 않습니다.중요
네트워크 프록시를 사용하도록 구성된 Greengrass 코어는 OTA 업데이트를 지원하지 않습니다.
포트 443을 통해 MQTT를 구성하려면
이 기능을 사용하려면 AWS IoT Greengrass 코어 v1.7 이상이 필요합니다.
이 절차를 통해 Greengrass 코어는 AWS IoT Core의 MQTT 메시징에 포트 443을 사용할 수 있습니다.
-
다음 명령을 실행해 Greengrass 대몬(daemon)을 중단합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
su 사용자로서 편집을 하려면
을 엽니다.greengrass-root
/config/config.json -
다음 예제에 나와 있는 것처럼
coreThing
객체에서iotMqttPort
속성을 추가하고 그 값을443
으로 설정합니다.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
"iotMqttPort" : 443,
"ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com", "keepAlive" : 600 }, ... } -
대몬(daemon)을 시작합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
포트 443을 통해 HTTPS를 구성하려면
이 기능을 사용하려면 AWS IoT Greengrass 코어 v1.8 이상이 필요합니다.
이 절차에서는 HTTPS 통신에 포트 443을 사용하도록 코어를 구성합니다.
-
다음 명령을 실행해 Greengrass 대몬(daemon)을 중단합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
su 사용자로서 편집을 하려면
을 엽니다.greengrass-root
/config/config.json -
다음 예제에 나와 있는 것처럼
coreThing
객체에서iotHttpPort
및ggHttpPort
속성을 추가합니다.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
"iotHttpPort" : 443,
"ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com","ggHttpPort" : 443,
"keepAlive" : 600 }, ... } -
대몬(daemon)을 시작합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
네트워크 프록시를 구성하려면
이 기능을 사용하려면 AWS IoT Greengrass 코어 v1.7 이상이 필요합니다.
이 절차에서는 AWS IoT Greengrass가 HTTP 또는 HTTPS 네트워크 프록시를 통해 인터넷에 연결합니다.
-
다음 명령을 실행해 Greengrass 대몬(daemon)을 중단합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
su 사용자로서 편집을 하려면
을 엽니다.greengrass-root
/config/config.json -
다음 예제와 같이
coreThing
객체에서 networkProxy 객체를 추가합니다.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com", "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com", "keepAlive" : 600,
"networkProxy": { "noProxyAddresses" : "http://128.12.34.56,www.mywebsite.com", "proxy" : { "url" : "https://my-proxy-server:1100", "username" : "Mary_Major", "password" : "pass@word1357" } }
}, ... } -
대몬(daemon)을 시작합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
networkProxy 객체
networkProxy
객체를 사용하여 네트워크 프록시 관련 정보를 지정합니다. 이 객체에는 다음 속성이 있습니다.
필드 | 설명 |
---|---|
noProxyAddresses |
선택 사항으로, 프록시에서 제외되는 IP 주소 또는 호스트 이름을 쉼표로 구분한 목록입니다. |
proxy |
연결할 프록시입니다. 프록시에는 다음과 같은 속성이 있습니다.
|
엔드포인트 허용
Greengrass 디바이스와 AWS IoT Core 또는 AWS IoT Greengrass 간의 통신은 인증이 필요합니다. 이 인증은 등록된 X.509 디바이스 인증서와 암호화 키를 기반으로 수행됩니다. 인증된 요청이 추가로 암호화되지 않고 프록시를 통해 전달되도록 하려면 다음 엔드포인트를 허용하십시오.
엔드포인트 | 포트 | 설명 |
---|---|---|
greengrass. |
443 |
그룹 관리를 위한 제어 플레인 작업에 사용됩니다. |
또는
|
MQTT: 8883 또는 443 HTTPS: 8443 또는 443 |
섀도우 동기화와 같이 디바이스 관리를 위한 데이터 플레인 작업에 사용됩니다. 코어 및 클라이언트 디바이스가 Amazon Trust Services 루트 CA 인증서(선호됨)를 사용하는지, 레거시 루트 CA 인증서를 사용하는지 또는 둘 다를 사용하는지에 따라 엔드포인트 하나 또는 둘 다를 사용하도록 허용합니다. 자세한 설명은 서비스 엔드포인트는 루트 CA 인증서 유형과 일치해야 합니다 섹션을 참조하세요. |
또는
|
8443 또는 443 |
디바이스 검색 작업에 사용됩니다. 코어 및 클라이언트 디바이스가 Amazon Trust Services 루트 CA 인증서(선호됨)를 사용하는지, 레거시 루트 CA 인증서를 사용하는지 또는 둘 다를 사용하는지에 따라 엔드포인트 하나 또는 둘 다를 사용하도록 허용합니다. 자세한 설명은 서비스 엔드포인트는 루트 CA 인증서 유형과 일치해야 합니다 섹션을 참조하세요. 참고포트 443에서 연결하는 클라이언트는 ALPN(Application Layer Protocol Negotiation) |
*.s3.amazonaws.com |
443 |
배포 작업 및 over-the-air 업데이트에 사용됩니다. 엔드포인트는 내부적으로 제어되고 언제든 변경될 수 있으므로 이 형식에는 |
logs. |
443 |
CloudWatch에 로그를 쓰도록 Greengrass 그룹을 구성한 경우 필요합니다. |
AWS IoT Greengrass를 위한 쓰기 디렉터리 구성
이 기능은 AWS IoT Greengrass 코어 v1.6 이상에 사용할 수 있습니다.
기본적으로 AWS IoT Greengrass 코어 소프트웨어는 AWS IoT Greengrass이(가) 모든 읽기 및 쓰기 작업을 수행하는 단일 루트 디렉터리 아래에 배포됩니다. 하지만 디렉터리 및 파일 생성을 비롯한 모든 쓰기 작업에 대해 별도의 디렉터리를 사용하도록 AWS IoT Greengrass를 구성할 수도 있습니다. 이 경우 AWS IoT Greengrass는 2개의 최상위 디렉터리를 사용합니다.
-
하나는 읽기-쓰기로 남겨두거나 선택에 따라 읽기 전용으로 설정할 수 있는
greengrass-root
디렉터리입니다. 여기에는 AWS IoT Greengrass 코어 소프트웨어와 런타임 동안 변경이 불가능한 상태로 유지되어야 하는 기타 중요한 구성 요소(예: 인증서 및config.json
)가 포함되어 있습니다. -
또 하나는 지정된 쓰기 디렉터리입니다. 여기에는 쓰기 가능한 내용(예: 로그, 상태 정보 및 배포된 사용자 정의 Lambda 함수)이 포함되어 있습니다.
이 구성은 다음과 같은 디렉터리 구조의 결과입니다.
- Greengrass 루트 디렉터리
-
greengrass-root
/ |-- certs/ | |-- root.ca.pem | |--hash
.cert.pem | |--hash
.private.key | |--hash
.public.key |-- config/ | |-- config.json |-- ggc/ | |-- packages/ | |--package-version
/ | |-- bin/ | |-- daemon | |-- greengrassd | |-- lambda/ | |-- LICENSE/ | |-- release_notes_package-version
.html | |-- runtime/ | |-- java8
/ | |-- nodejs8.10
/ | |-- python3.8
/ | |-- core/ - 쓰기 디렉터리
-
write-directory
/ |-- packages/ | |--package-version
/ | |-- ggc_root/ | |-- rootfs_nosys/ | |-- rootfs_sys/ | |-- var/ |-- deployment/ | |-- group/ | |-- group.json | |-- lambda/ | |-- mlmodel/ |-- var/ | |-- log/ | |-- state/
쓰기 디렉터리를 구성하려면
-
다음 명령을 실행해 AWS IoT Greengrass 대몬(daemon)을 중단합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
su 사용자로서 편집을 하려면
을 엽니다.greengrass-root
/config/config.json -
아래 예제에서와 같이 파라미터로
writeDirectory
를 추가하고 대상 디렉터리에 대한 경로를 지정합니다.{ "coreThing": { "caPath": "root-CA.pem", "certPath": "hash.pem.crt", ... }, ... "writeDirectory" : "/
write-directory
" }참고
원하는 만큼 자주
writeDirectory
설정을 업데이트할 수 있습니다. 설정이 업데이트되고 나면 AWS IoT Greengrass은(는) 다음에 시작할 때 새로 지정된 쓰기 디렉터리를 사용하지만, 이전의 쓰기 디렉터리에서 내용을 마이그레이션하지는 않습니다. -
쓰기 디렉터리가 구성되면 이제 선택에 따라
greengrass-root
디렉터리를 읽기 전용으로 설정할 수 있습니다. 자세한 지침은 Greengrass 루트 디렉터리를 읽기 전용으로 설정하는 방법을 참조하십시오.그렇지 않으면 AWS IoT Greengrass 대몬(daemon)을 시작합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
Greengrass 루트 디렉터리를 읽기 전용으로 설정하려면
Greengrass 루트 디렉터리를 읽기 전용으로 설정하고 싶은 경우에만 이 단계를 수행합니다. 시작하기 전에 쓰기 디렉터리를 구성해야 합니다.
-
필요한 디렉터리에 대한 액세스 권한을 부여하십시오:
-
config.json
소유자에게 읽기 및 쓰기 권한을 제공합니다.sudo chmod 0600 /
greengrass-root
/config/config.json -
ggc_user를 인증서 및 시스템 Lambda 디렉터리의 소유자로 설정합니다.
sudo chown -R ggc_user:ggc_group /
greengrass-root
/certs/ sudo chown -R ggc_user:ggc_group /greengrass-root
/ggc/packages/1.11.6/lambda/참고
ggc_user 및 ggc_group 계정은 시스템 Lambda 함수를 실행하는 데 기본적으로 사용됩니다. 다른 계정을 사용하도록 그룹 레벨 기본 액세스 자격 증명을 구성한 경우 그 대신 해당 사용자(UID) 및 그룹(GID)에게 권한을 부여해야 합니다.
-
-
원하는 메커니즘을 사용하여
greengrass-root
디렉터리를 읽기 전용으로 설정합니다.참고
greengrass-root
디렉터리를 읽기 전용으로 설정하는 한 가지 방법은 디렉터리를 읽기 전용으로 마운트하는 것입니다. 하지만 마운트된 디렉터리의 AWS IoT Greengrass Core 소프트웨어에 over-the-air (OTA) 업데이트를 적용하려면 먼저 디렉터리를 마운트 해제한 다음 업데이트 후 다시 마운트해야 합니다. 이러한umount
및mount
작업들을ota_pre_update
및ota_post_update
스크립트에 추가할 수 있습니다. OTA 업데이트에 대한 자세한 내용은 Greengrass OTA 업데이트 에이전트 및 OTA 업데이트가 지원되는 관리형 Respawn 섹션을 참조하십시오. -
대몬(daemon)을 시작합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start1단계에서의 권한이 올바르게 설정되지 않으면 대몬(daemon)이 시작되지 않습니다.
MQTT 설정 구성
AWS IoT Greengrass 환경에서 로컬 디바이스, Lambda 함수, 커넥터 및 시스템 구성 요소는 서로 통신하고 AWS IoT Core와 통신할 수 있습니다. 모든 통신은 엔터티 간의 MQTT 통신을 인증하는 구독을 관리하는 코어를 거칩니다.
AWS IoT Greengrass에서 구성할 수 있는 MQTT 설정에 대한 자세한 내용은 다음 섹션을 참조하십시오.
참고
OPC-UA는 산업 통신을 위한 정보 교환 표준입니다. Greengrass 코어에서 OPC-UA에 대한 지원을 구현하려면 IoT 커넥터를 사용할 수 있습니다. SiteWise 이 커넥터는 OPC-UA 서버의 산업용 디바이스 데이터를 AWS IoT SiteWise의 자산 속성으로 보냅니다.
서비스 품질 메시지
AWS IoT Greengrass은 구성과 통신 대상 및 방향에 따라 QoS(서비스 품질) 수준 0 또는 1을 지원합니다. Greengrass 코어는 클라이언트(AWS IoT Core와의 통신용)와 메시지 브로커(로컬 네트워크상의 통신용) 역할을 모두 수행합니다.
MQTT 및 QoS에 대한 자세한 내용은 MQTT 웹 사이트에서 시작하기
- AWS 클라우드와의 통신
-
-
아웃바운드 메시지는 QoS 1을 사용
코어는 QoS 1을 사용하여 AWS 클라우드 대상으로 보내는 메시지를 전송합니다. AWS IoT Greengrass에서는 MQTT 메시지 대기열을 사용하여 이러한 메시지를 처리합니다. AWS IoT에서 메시지 전송이 확인되지 않으면 메시지가 나중에 재시도되도록 스풀링됩니다. 대기열이 가득 찼을 때는 메시지를 재시도할 수 없습니다. 메시지 전송 확인은 간헐적인 연결로 인한 데이터 손실을 최소화하는 데 도움이 될 수 있습니다.
AWS IoT로 아웃바운드 메시지는 QoS 1을 사용하므로, Greengrass 코어가 메시지를 보낼 수 있는 최대 속도는 코어와 AWS IoT 사이의 지연 시간에 따라 달라집니다. 코어는 메시지를 보낼 때마다 AWS IoT가 메시지를 승인할 때까지 기다렸다가 다음 메시지를 전송합니다. 예를 들어 코어와 AWS 리전 사이의 왕복 시간이 50밀리초인 경우 코어는 초당 최대 20개의 메시지를 보낼 수 있습니다. 코어가 연결되는 AWS 리전을 선택할 때는 이 동작을 고려하세요. AWS 클라우드에 대용량 IoT 데이터를 수집하려면 스트림 관리자를 사용할 수 있습니다.
AWS 클라우드 대상으로 보내는 메시지를 유지할 수 있도록 로컬 스토리지 캐시를 구성하는 방법을 비롯한 MQTT 메시지 대기열에 대한 자세한 내용은 클라우드 대상을 위한 MQTT 메시지 대기열 섹션을 참조하세요.
-
인바운드 메시지는 QoS 0(기본값) 또는 QoS 1을 사용
기본적으로 코어는 QoS 0로 AWS 클라우드 소스의 메시지를 구독합니다. 영구 세션을 활성화하면 코어가 QoS 1로 구독합니다. 이렇게 하면 간헐적인 연결로 인한 데이터 손실을 최소화할 수 있습니다. 이러한 구독에 대한 QoS를 관리하려면 로컬 스풀러 시스템 구성 요소에 대한 지속성 설정을 구성합니다.
코어가 AWS 클라우드 대상에서 영구 세션을 설정하도록 활성화하는 방법을 포함한 자세한 내용은 AWS IoT Core를 사용하는 MQTT 영구 세션 섹션을 참조하세요.
-
- 로컬 대상과의 통신
-
모든 로컬 통신은 QoS 0을 사용합니다. 코어는 Greengrass Lambda 함수, 커넥터 또는 클라이언트 디바이스 같은 로컬 대상에 메시지를 보내려고 시도합니다. 코어는 메시지를 저장하거나 전송 여부를 확인하지 않습니다. 메시지는 구성 요소 간 임의의 위치에서 끊길 수 있습니다.
참고
Lambda 함수 간의 직접 통신은 MQTT 메시징을 사용하지 않지만, 동작은 동일합니다.
클라우드 대상을 위한 MQTT 메시지 대기열
AWS 클라우드 대상을 목표로 하는 MQTT 메시지는 처리를 기다리기 위해 대기 상태가 됩니다. 대기 상태인 메시지는 FIFO(선입선출)에 따라 처리됩니다. 메시지가 처리되어 AWS IoT Core에 게시되면 해당 메시지가 대기열에서 제거됩니다.
기본적으로 Greengrass 코어는 AWS 클라우드 대상으로 보내는 처리되지 않은 메시지를 메모리에 저장합니다. 대신에 로컬 스토리지 캐시에 미처리 메시지를 저장하도록 코어를 구성할 수 있습니다. 인 메모리 스토리지와 달리, 로컬 스토리지 캐시는 코어 재시작(예: 그룹 배포 또는 디바이스 재부팅 이후)에도 유지될 수 있어 AWS IoT Greengrass이(가) 가 계속해서 메시지를 처리할 수 있습니다. 또한 스토리지 크기를 구성할 수 있습니다.
주의
Greengrass 코어는 MQTT 클라이언트가 오프라인 상태임을 감지하기 전에 게시 작업을 재시도하기 때문에, 연결이 끊어지면 중복된 MQTT 메시지를 대기열에 넣을 수 있습니다. 클라우드 대상에 대한 MQTT 메시지 중복을 방지하려면 코어의 keepAlive
값을 mqttOperationTimeout
값의 절반 미만으로 구성하십시오. 자세한 설명은 AWS IoT Greengrass 코어 구성 파일 섹션을 참조하세요.
AWS IoT Greengrass는 스풀러 시스템 구성 요소(GGCloudSpooler
Lambda 함수)를 사용하여 메시지 대기열을 관리합니다. 다음 GGCloudSpooler
환경 변수를 사용하여 스토리지 설정을 구성할 수 있습니다.
-
GG_CONFIG_STORAGE_TYPE. 메시지 대기열의 위치입니다. 유효한 값은 다음과 같습니다.
-
FileSystem
. 미처리 메시지를 물리적 코어 디바이스의 디스크에 있는 로컬 스토리지 캐시에 저장합니다. 코어가 재시작될 때 대기 상태인 메시지가 처리를 위해 보관됩니다. 처리가 끝난 메시지는 삭제됩니다. -
Memory
(default). 처리되지 않은 메시지를 메모리에 저장합니다. 코어가 재시작될 때 대기 상태인 메시지가 사라집니다.이 옵션은 하드웨어 기능이 제한된 디바이스에 최적화되어 있습니다. 이 구성을 사용하는 경우에는 서비스 중단이 최소화될 때 그룹을 배포하거나 디바이스를 재시작하는 것이 좋습니다.
-
-
GG_CONFIG_MAX_SIZE_BYTES. 스토리지 크기(바이트)입니다. 이 값은 262144 이상(256KB)인 음수가 아닌 정수면 어떤 것이든 가능하며, 크기가 더 작으면 AWS IoT Greengrass 코어 소프트웨어가 시작되지 않습니다. 기본 크기는 2.5MB입니다. 크기가 한도에 도달하면 대기열에서 가장 오래된 메시지가 새로운 메시지로 대체됩니다.
참고
이 기능은 AWS IoT Greengrass 코어 v1.6 이상에 사용할 수 있습니다. 이전 버전들은 대기열 크기가 2.5MB인 인 메모리 스토리지를 사용합니다. 이전 버전에서는 스토리지 설정을 구성할 수 없습니다.
로컬 스토리지의 캐시에 메시지를 저장하는 방법
파일 시스템에 메시지를 캐싱하여 코어 재시작에도 유지가 되도록 AWS IoT Greengrass을 구성할 수 있습니다. 이렇게 하려면 GGCloudSpooler
함수가 스토리지 유형을 FileSystem
으로 설정하는 함수 정의 버전을 배포합니다. AWS IoT Greengrass API를 사용하여 로컬 스토리지 캐시를 구성해야 합니다. 콘솔에서는 이 작업을 수행할 수 없습니다.
다음 절차는 create-function-definition-version
CLI 명령을 사용하여 파일 시스템에 대기 상태인 메시지를 저장하도록 스풀러를 구성합니다. 또한 2.6MB 대기열 크기를 구성합니다.
-
대상 Greengrass 그룹 및 그룹 버전의 ID를 확인합니다. 이 절차에서는 이것이 최신 그룹 및 그룹 버전이라고 가정합니다. 다음 쿼리는 가장 최근에 생성된 그룹을 반환합니다.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
또는 이름으로 쿼리할 수도 있습니다. 그룹 이름은 고유한 이름이 아니어도 되므로 여러 그룹을 반환할 수도 있습니다.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"참고
AWS IoT 콘솔에서도 이러한 값을 찾을 수 있습니다. 그룹 ID는 그룹의 설정 페이지에 표시됩니다. 그룹 버전 ID는 그룹의 배포 탭에 표시됩니다.
-
출력에서 대상 그룹의
Id
및LatestVersion
값을 복사합니다. -
최신 그룹 버전을 확인합니다.
-
group-id
를 복사한Id
로 바꿉니다. -
latest-group-version-id
를 복사한LatestVersion
로 바꿉니다.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idlatest-group-version-id
-
-
출력의
Definition
객체에서CoreDefinitionVersionArn
과 다른 모든 그룹 구성 요소의 ARN을 복사합니다(FunctionDefinitionVersionArn
제외). 새 그룹 버전을 만들 때 이러한 값들이 사용됩니다. -
출력의
FunctionDefinitionVersionArn
에서 함수 정의의 ID를 복사합니다. 다음 예제에서와 같이, ARN에서functions
세그먼트 다음에 나오는 GUID가 ID가 됩니다.arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
참고
또는
create-function-definition
명령을 실행하여 함수 정의를 생성하고, 출력에서 ID를 복사할 수 있습니다. -
함수 정의에 함수 정의 버전을 추가합니다.
-
함수 정의를 위해 복사한
Id
것으로function-definition-id
바꾸십시오. -
함수 이름 (예:)
arbitrary-function-id
으로spooler-function
바꾸십시오. -
이 버전에 포함시키고 싶은 Lambda 함수를
functions
배열에 추가합니다.get-function-definition-version
명령을 사용해 기존 함수 정의 버전에서 Greengrass Lambda 함수를 가져올 수 있습니다.
주의
262144보다 크거나 같은
GG_CONFIG_MAX_SIZE_BYTES
에 대해 값을 지정해야 합니다. 크기가 더 작으면 AWS IoT Greengrass 코어 소프트웨어가 시작되지 않습니다.aws greengrass create-function-definition-version \ --function-definition-id
function-definition-id
\ --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_MAX_SIZE_BYTES":"2621440","GG_CONFIG_STORAGE_TYPE":"FileSystem"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id
"}]'참고
이전에
GG_CONFIG_SUBSCRIPTION_QUALITY
환경 변수를 AWS IoT Core로 영구 세션을 지원하도록 설정한 경우 이 함수 인스턴스에 포함하십시오. -
-
출력에서 함수 정의 버전의
Arn
를 복사합니다. -
시스템 Lambda 함수를 포함하는 그룹 버전을 만듭니다.
-
group-id
를 그룹의Id
로 바꿉니다. -
최신 그룹 버전에서 복사한 것으로
core-definition-version-arn
바꾸십시오.CoreDefinitionVersionArn
-
새 함수 정의 버전용으로 복사한 것으로
function-definition-version-arn
바꾸십시오.Arn
-
최신 그룹 버전에서 복사한 다른 그룹 구성 요소의 ARN(예:
SubscriptionDefinitionVersionArn
또는DeviceDefinitionVersionArn
)을 바꿉니다. -
사용되지 않은 파라미터를 모두 제거합니다. 예를 들어 그룹 버전에 리소스가 포함되어 있지 않으면
--resource-definition-version-arn
을 제거합니다.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --device-definition-version-arndevice-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
\ --resource-definition-version-arnresource-definition-version-arn
\ --subscription-definition-version-arnsubscription-definition-version-arn
-
-
출력에서
Version
을 복사합니다. 새 그룹 버전의 ID가 이 값이 됩니다. -
새로운 그룹 버전을 사용하여 그룹을 배포합니다.
-
group-id
를 해당 그룹에서 복사한Id
로 바꿉니다. -
새 그룹 버전용으로 복사한 것으로
group-version-id
바꾸십시오.Version
aws greengrass create-deployment \ --group-id
group-id
\ --group-version-idgroup-version-id
\ --deployment-type NewDeployment -
스토리지 설정을 업데이트하려면 AWS IoT Greengrass API를 사용해 구성이 업데이트된 GGCloudSpooler
함수를 포함하는 새로운 함수 정의 버전을 생성합니다. 그런 다음, 새 그룹 버전에 함수 정의 버전을 추가하고(다른 그룹 구성 요소와 함께) 그룹 버전을 배포합니다. 기본 구성을 복원하고 싶은 경우에는 GGCloudSpooler
함수가 포함되지 않은 함수 정의 버전을 배포할 수 있습니다.
이 시스템 Lambda 함수는 콘솔에 표시되지 않습니다. 하지만 함수가 최신 그룹 버전에 추가되고 난 후에는 콘솔에서 만든 배포에 포함이 됩니다(API를 사용해 이를 교체 또는 제거하지 않는 한).
AWS IoT Core를 사용하는 MQTT 영구 세션
이 기능은 AWS IoT Greengrass 코어 v1.10 이상에 사용할 수 있습니다.
Greengrass 코어는 AWS IoT 메시지 브로커를 사용해 영구 세션을 설정할 수 있습니다. 영구 세션은 코어가 오프라인 상태에서도 전송된 메시지를 수신할 수 있도록 해주는 지속적인 연결입니다. 코어는 연결 중인 클라이언트입니다.
영구 세션에서 AWS IoT 메시지 브로커는 연결 중에 코어에서 생성된 모든 구독을 저장합니다. 코어의 연결이 끊어지면 AWS IoT 메시지 브로커는 QoS 1로 게시되고 Lambda 함수 및 클라이언트 디바이스와 같은 로컬 대상으로 보내는 승인되지 않은 새 메시지를 저장합니다. 코어가 다시 연결되면 영구 세션이 재개되고 AWS IoT가 초당 최대 10개의 메시지 속도로 저장된 메시지를 코어로 보냅니다. 영구 세션의 기본 만료 기간은 1시간입니다. 이 기간은 메시지 브로커가 코어의 연결이 끊어졌음을 감지할 때 시작됩니다. 자세한 내용은 AWS IoT 개발자 안내서의 MQTT 영구 세션을 참조하세요.
AWS IoT Greengrass는 스풀러 시스템 구성 요소(GGCloudSpooler
Lambda 함수)를 사용하여 소스로 AWS IoT가 있는 구독을 생성합니다. 다음 GGCloudSpooler
환경 변수를 사용하여 영구 세션을 구성할 수 있습니다.
-
GG_CONFIG_SUBSCRIPTION_QUALITY. 소스로 AWS IoT를 가지고 있는 구독의 품질입니다. 유효한 값은 다음과 같습니다.
-
AtMostOnce
(default). 영구 세션을 비활성화합니다. 구독은 QoS 0을 사용합니다. -
AtLeastOncePersistent
. 영구 세션을 활성화합니다.CONNECT
메시지에서cleanSession
플래그를0
으로 설정하고 QoS 1로 구독합니다.코어가 수신하는 QoS 1로 게시된 메시지는 Greengrass 대몬(daemon)의 인 메모리 작업 대기열에 도달하도록 보장됩니다. 코어는 대기열에 추가된 이후에 메시지를 확인합니다. 대기열에서 로컬 대상(예: Greengrass Lambda 함수, 커넥터 또는 디바이스)과의 후속 통신은 QoS 0으로 전송됩니다. AWS IoT Greengrass는 로컬 대상에 대한 전달을 보장하지 않습니다.
참고
maxWorkItemCount 구성 속성을 사용하여 작업 항목 대기열의 크기를 제어할 수 있습니다. 예를 들어 워크로드에 사용률이 높은 MQTT 트래픽이 필요한 경우 대기열 크기를 늘릴 수 있습니다.
영구 세션이 활성화되면 코어는 MQTT 메시지를 AWS IoT와 교환하기 위해 적어도 하나의 추가 연결을 엽니다. 자세한 설명은 AWS IoT를 통한 MQTT 연결용 클라이언트 ID 섹션을 참조하세요.
-
MQTT 영구 세션을 구성하려면
AWS IoT Core에서 영구 세션을 사용하도록 AWS IoT Greengrass를 구성할 수 있습니다. 이렇게 하려면 GGCloudSpooler
함수가 구독 품질을 AtLeastOncePersistent
로 설정하는 함수 정의 버전을 배포합니다. 이 설정은 소스로 AWS IoT Core(cloud
)를 보유한 모든 구독에 적용됩니다. 영구 세션을 구성하려면 AWS IoT Greengrass API를 사용해야 합니다. 콘솔에서는 이 작업을 수행할 수 없습니다.
다음 절차에서는 create-function-definition-version
CLI 명령을 통해 영구 세션을 사용하도록 스풀러를 구성합니다. 이 절차에서는 기존 그룹의 최신 그룹 버전에 대한 구성을 업데이트한다고 가정합니다.
-
대상 Greengrass 그룹 및 그룹 버전의 ID를 확인합니다. 이 절차에서는 이것이 최신 그룹 및 그룹 버전이라고 가정합니다. 다음 쿼리는 가장 최근에 생성된 그룹을 반환합니다.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
또는 이름으로 쿼리할 수도 있습니다. 그룹 이름은 고유한 이름이 아니어도 되므로 여러 그룹을 반환할 수도 있습니다.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"참고
AWS IoT 콘솔에서도 이러한 값을 찾을 수 있습니다. 그룹 ID는 그룹의 설정 페이지에 표시됩니다. 그룹 버전 ID는 그룹의 배포 탭에 표시됩니다.
-
출력에서 대상 그룹의
Id
및LatestVersion
값을 복사합니다. -
최신 그룹 버전을 확인합니다.
-
group-id
를 복사한Id
로 바꿉니다. -
latest-group-version-id
를 복사한LatestVersion
로 바꿉니다.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idlatest-group-version-id
-
-
출력의
Definition
객체에서CoreDefinitionVersionArn
과 다른 모든 그룹 구성 요소의 ARN을 복사합니다(FunctionDefinitionVersionArn
제외). 새 그룹 버전을 만들 때 이러한 값들이 사용됩니다. -
출력의
FunctionDefinitionVersionArn
에서 함수 정의의 ID를 복사합니다. 다음 예제에서와 같이, ARN에서functions
세그먼트 다음에 나오는 GUID가 ID가 됩니다.arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
참고
또는
create-function-definition
명령을 실행하여 함수 정의를 생성하고, 출력에서 ID를 복사할 수 있습니다. -
함수 정의에 함수 정의 버전을 추가합니다.
-
함수 정의를 위해 복사한 것으로
function-definition-id
바꾸십시오.Id
-
함수 이름 (예:)
arbitrary-function-id
으로spooler-function
바꾸십시오. -
이 버전에 포함시키고 싶은 Lambda 함수를
functions
배열에 추가합니다.get-function-definition-version
명령을 사용해 기존 함수 정의 버전에서 Greengrass Lambda 함수를 가져올 수 있습니다.
aws greengrass create-function-definition-version \ --function-definition-id
function-definition-id
\ --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_SUBSCRIPTION_QUALITY":"AtLeastOncePersistent"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id
"}]'참고
이전에
GG_CONFIG_STORAGE_TYPE
또는GG_CONFIG_MAX_SIZE_BYTES
환경 변수를 설정하여 스토리지 설정을 정의한 경우 이 함수 인스턴스에 포함하십시오. -
-
출력에서 함수 정의 버전의
Arn
를 복사합니다. -
시스템 Lambda 함수를 포함하는 그룹 버전을 만듭니다.
-
group-id
를 그룹의Id
로 바꿉니다. -
최신 그룹 버전에서 복사한 것으로
core-definition-version-arn
바꾸십시오.CoreDefinitionVersionArn
-
새 함수 정의 버전용으로 복사한 것으로
function-definition-version-arn
바꾸십시오.Arn
-
최신 그룹 버전에서 복사한 다른 그룹 구성 요소의 ARN(예:
SubscriptionDefinitionVersionArn
또는DeviceDefinitionVersionArn
)을 바꿉니다. -
사용되지 않은 파라미터를 모두 제거합니다. 예를 들어 그룹 버전에 리소스가 포함되어 있지 않으면
--resource-definition-version-arn
을 제거합니다.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --device-definition-version-arndevice-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
\ --resource-definition-version-arnresource-definition-version-arn
\ --subscription-definition-version-arnsubscription-definition-version-arn
-
-
출력에서
Version
을 복사합니다. 새 그룹 버전의 ID가 이 값이 됩니다. -
새로운 그룹 버전을 사용하여 그룹을 배포합니다.
-
group-id
를 해당 그룹에서 복사한Id
로 바꿉니다. -
새 그룹 버전용으로 복사한 것으로
group-version-id
바꾸십시오.Version
aws greengrass create-deployment \ --group-id
group-id
\ --group-version-idgroup-version-id
\ --deployment-type NewDeployment -
-
(선택 사항) 핵심 구성 파일의 maxWorkItem개수 속성을 늘립니다. 이렇게 하면 코어가 증가한 MQTT 트래픽 및 로컬 대상과의 통신을 처리하는 데 도움이 될 수 있습니다.
이러한 구성 변경 사항을 반영해 코어를 업데이트하려면 AWS IoT Greengrass API를 사용해 구성이 업데이트된 GGCloudSpooler
함수를 포함하는 새로운 함수 정의 버전을 생성합니다. 그런 다음, 새 그룹 버전에 함수 정의 버전을 추가하고(다른 그룹 구성 요소와 함께) 그룹 버전을 배포합니다. 기본 구성을 복원하고 싶은 경우에는 GGCloudSpooler
함수가 포함되지 않은 함수 정의 버전을 생성할 수 있습니다.
이 시스템 Lambda 함수는 콘솔에 표시되지 않습니다. 하지만 함수가 최신 그룹 버전에 추가되고 난 후에는 콘솔에서 만든 배포에 포함이 됩니다(API를 사용해 이를 교체 또는 제거하지 않는 한).
AWS IoT를 통한 MQTT 연결용 클라이언트 ID
이 기능은 AWS IoT Greengrass 코어 v1.8 이상에 사용할 수 있습니다.
Greengrass 코어는 섀도우 동기화 및 인증서 관리와 같은 작업을 위해 AWS IoT Core를 통해 MQTT 연결을 엽니다. 이러한 연결의 경우 코어는 코어 사물 이름을 기반으로 예측 가능한 클라이언트 ID를 생성합니다. AWS IoT Device Defender 및 AWS IoT 수명 주기 이벤트를 포함한 모니터링, 감사 및 요금 기능에 예측 가능한 클라이언트 ID를 사용할 수 있습니다. 또한 예상 가능한 클라이언트 ID를 중심으로 논리를 생성할 수 있습니다(예: 인증서 속성을 기반으로 한 구독 정책 템플릿).
참고
중복 ID를 동시 연결에 사용하면 무한 연결-연결 해제 루프가 발생할 수 있습니다. 이는 다른 디바이스가 연결에서 코어 디바이스 이름을 클라이언트 ID로 사용하도록 하드코딩되는 경우 발생할 수 있습니다. 자세한 내용은 이 문제 해결 단계를 참조하십시오.
또한 Greengrass 디바이스는 AWS IoT Device Management의 플릿 인덱싱 서비스와 완전 통합됩니다. 따라서 클라우드에서 디바이스 속성, 섀도우 상태, 연결 상태를 기반으로 디바이스를 인덱싱하고 검색할 수 있습니다. 예를 들어, 디바이스 연결 인덱싱을 사용하여 AWS IoT Core에 현재 연결되거나 연결 해제된 Greengrass 디바이스를 검색할 수 있도록 Greengrass 디바이스는 사물 이름을 클라이언트 ID로 사용하는 연결을 하나 이상 설정합니다. 자세한 내용은 AWS IoT 개발자 안내서의 플릿 인덱싱을 참조하세요.
로컬 메시징을 위한 MQTT 포트 구성
이 기능을 사용하려면 AWS IoT Greengrass 코어 v1.10 이상이 필요합니다.
Greengrass 코어는 로컬 Lambda 함수, 커넥터 및 클라이언트 디바이스 간의 MQTT 메시징을 위한 로컬 메시지 브로커 역할을 수행합니다. 기본적으로 코어는 로컬 네트워크의 MQTT 트래픽에 포트 8883을 사용합니다. 포트 8883에서 실행되는 다른 소프트웨어와의 충돌을 피하기 위해 포트를 변경할 수 있습니다.
코어가 로컬 MQTT 트래픽에 사용하는 포트 번호를 구성하려면
-
다음 명령을 실행해 Greengrass 대몬(daemon)을 중단합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
su 사용자로서 편집을 하려면
을 엽니다.greengrass-root
/config/config.json -
coreThing
객체에서ggMqttPort
속성을 추가하고 사용할 포트 번호로 값을 설정합니다. 유효한 값은 1024 ~ 65535입니다. 다음 예제에서는 포트 번호를9000
으로 설정합니다.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com", "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
"ggMqttPort" : 9000,
"keepAlive" : 600 }, ... } -
대몬(daemon)을 시작합니다.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start -
코어에 대해 자동 IP 감지가 활성화된 경우에는 구성이 완료된 것입니다.
자동 IP 감지가 활성화되지 않은 경우 코어의 연결 정보를 업데이트해야 합니다. 이렇게 하면 클라이언트 디바이스가 검색 작업 중에 올바른 포트 번호를 수신하여 코어 연결 정보를 얻을 수 있습니다. AWS IoT 콘솔 또는 AWS IoT Greengrass API를 사용하여 코어 연결 정보를 업데이트할 수 있습니다. 이 절차에서는 포트 번호만 업데이트합니다. 코어의 로컬 IP 주소는 동일하게 유지됩니다.
- 코어에 대한 연결 정보를 업데이트하려면(콘솔)
-
-
그룹 구성 페이지에서 Greengrass 코어를 선택합니다.
-
코어 세부 정보 페이지에서 MQTT 브로커 엔드포인트 탭을 선택합니다.
-
엔드포인트 관리를 선택한 다음 엔드포인트 추가를 선택합니다.
-
현재 로컬 IP 주소와 새 포트 번호를 입력합니다. 다음 예제에서는 IP 주소
192.168.1.8
의 포트 번호9000
를 설정합니다. -
사용되지 않는 엔드포인트를 제거한 다음 업데이트를 선택합니다.
-
- 코어에 대한 연결 정보를 업데이트하려면(API)
-
-
UpdateConnectivityInfo 작업을 사용합니다. 다음 예제에서는 AWS CLI에서
update-connectivity-info
를 사용하여 IP 주소192.168.1.8
의 포트 번호9000
를 설정합니다.aws greengrass update-connectivity-info \ --thing-name "MyGroup_Core" \ --connectivity-info "[{\"Metadata\":\"\",\"PortNumber\":9000,\"HostAddress\":\"192.168.1.8\",\"Id\":\"localIP_192.168.1.8\"},{\"Metadata\":\"\",\"PortNumber\":8883,\"HostAddress\":\"127.0.0.1\",\"Id\":\"localhost_127.0.0.1_0\"}]"
-
참고
AWS IoT Core를 사용하여 코어가 MQTT 메시징에 사용하는 포트를 구성할 수도 있습니다. 자세한 설명은 포트 443에서 또는 네트워크 프록시를 통해 연결 섹션을 참조하세요.
AWS 클라우드를 통해 MQTT 연결 시 게시, 구독, 구독 취소 작업에 대한 제한 시간
이 기능은 AWS IoT Greengrass v1.10.2 이상에서 사용할 수 있습니다.
Greengrass 코어는 AWS IoT Core에 MQTT 연결 시 게시, 구독 또는 구독 취소 작업을 완료할 수 있는 시간(초)을 구성할 수 있습니다. 대역폭 제약 또는 긴 지연 시간으로 인해 작업 시간이 초과되는 경우 이 설정을 조정할 수 있습니다. config.json 파일에서 이 설정을 구성하려면 coreThing
객체의 mqttOperationTimeout
속성을 추가하거나 변경합니다. 예:
{ "coreThing": { "mqttOperationTimeout": 10, "caPath": "root-ca.pem", "certPath": "
hash
.cert.pem", "keyPath": "hash
.private.key", ... }, ... }
기본 제한 시간은 5초입니다. 최소 제한 시간은 5초입니다.
자동 IP 감지 활성화
Greengrass 그룹의 클라이언트 장치가 Greengrass 코어를 자동으로 검색하도록 AWS IoT Greengrass를 구성할 수 있습니다. 활성화되면 코어는 IP 주소 변경을 감시합니다. 주소가 변경되면 코어는 업데이트된 주소 목록을 게시합니다. 이러한 주소는 코어와 동일한 Greengrass 그룹에 속한 클라이언트 디바이스에서 사용할 수 있습니다.
참고
클라이언트 디바이스에 대한 AWS IoT 정책은 디바이스가 코어에 대한 연결 정보를 검색할 수 있도록 허용하는 greengrass:Discover
권한을 부여해야 합니다. 이 정책 설명에 대한 자세한 내용은 검색 권한 섹션을 참조하십시오.
AWS IoT Greengrass 콘솔에서 이 기능을 활성화하려면 Greengrass 그룹을 처음 배포할 때 자동 감지를 선택합니다. Lambda 함수 탭을 선택하고 IP 감지기를 선택하여 그룹 구성 페이지에서 이 기능을 활성화하거나 비활성화할 수도 있습니다. MQTT 브로커 엔드포인트 자동 감지 및 재정의가 선택된 경우 자동 IP 감지가 활성화됩니다.
AWS IoT Greengrass API로 자동 검색을 관리하려면 IPDetector
시스템 Lambda 함수를 구성해야 합니다. 다음 절차는 create-function-definition-versionCLI 명령을 사용하여 Greengrass 코어의 자동 검색을 구성하는 방법을 보여줍니다.
-
대상 Greengrass 그룹 및 그룹 버전의 ID를 확인합니다. 이 절차에서는 이것이 최신 그룹 및 그룹 버전이라고 가정합니다. 다음 쿼리는 가장 최근에 생성된 그룹을 반환합니다.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
또는 이름으로 쿼리할 수도 있습니다. 그룹 이름은 고유한 이름이 아니어도 되므로 여러 그룹을 반환할 수도 있습니다.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"참고
AWS IoT 콘솔에서도 이러한 값을 찾을 수 있습니다. 그룹 ID는 그룹의 설정 페이지에 표시됩니다. 그룹 버전 ID는 그룹의 배포 탭에 표시됩니다.
-
출력에서 대상 그룹의
Id
및LatestVersion
값을 복사합니다. -
최신 그룹 버전을 확인합니다.
-
group-id
를 복사한Id
로 바꿉니다. -
latest-group-version-id
를 복사한LatestVersion
로 바꿉니다.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idlatest-group-version-id
-
-
출력의
Definition
객체에서CoreDefinitionVersionArn
과 다른 모든 그룹 구성 요소의 ARN을 복사합니다(FunctionDefinitionVersionArn
제외). 새 그룹 버전을 만들 때 이러한 값들이 사용됩니다. -
출력의
FunctionDefinitionVersionArn
에서 함수 정의의 ID와 함수 정의 버전을 복사합니다.arn:aws:greengrass:
region
:account-id
:/greengrass/groups/function-definition-id
/versions/function-definition-version-id
참고
선택에 따라
create-function-definition
명령을 실행하여 함수 정의를 만들고, 출력에서 ID를 복사할 수 있습니다. -
get-function-definition-version
명령을 사용하여 현재 정의 상태를 가져옵니다. 복사한function-definition-id
내용을 함수 정의에 사용하십시오. 예를 들면 다음과 같습니다4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3
.aws greengrass get-function-definition-version --function-definition-id
function-definition-id
--function-definition-version-idfunction-definition-version-id
나열된 함수 구성을 적어 두십시오. 현재 정의 설정의 손실을 방지하기 위해 새 함수 정의 버전을 생성할 때 이 함수 구성을 포함시켜야 합니다.
-
함수 정의에 함수 정의 버전을 추가합니다.
-
함수 정의를 위해 복사한
Id
것으로function-definition-id
바꾸십시오. 예를 들면 다음과 같습니다4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3
. -
함수 이름 (예:)
arbitrary-function-id
으로auto-detection-function
바꾸십시오. -
이 버전에 포함시키고 싶은 모든 Lambda 함수(예: 이전 단계에서 나열된 함수)를
functions
배열에 추가합니다.
aws greengrass create-function-definition-version \ --function-definition-id
function-definition-id
\ --functions '[{"FunctionArn":"arn:aws:lambda:::function:GGIPDetector:1","Id":"arbitrary-function-id
","FunctionConfiguration":{"Pinned":true,"MemorySize":32768,"Timeout":3}}]'\ --region us-west-2 -
-
출력에서 함수 정의 버전의
Arn
를 복사합니다. -
시스템 Lambda 함수를 포함하는 그룹 버전을 만듭니다.
-
group-id
를 그룹의Id
로 바꿉니다. -
최신 그룹 버전에서 복사한 것으로
core-definition-version-arn
바꾸십시오.CoreDefinitionVersionArn
-
새 함수 정의 버전용으로 복사한 것으로
function-definition-version-arn
바꾸십시오.Arn
-
최신 그룹 버전에서 복사한 다른 그룹 구성 요소의 ARN(예:
SubscriptionDefinitionVersionArn
또는DeviceDefinitionVersionArn
)을 바꿉니다. -
사용되지 않은 파라미터를 모두 제거합니다. 예를 들어 그룹 버전에 리소스가 포함되어 있지 않으면
--resource-definition-version-arn
을 제거합니다.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --device-definition-version-arndevice-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
\ --resource-definition-version-arnresource-definition-version-arn
\ --subscription-definition-version-arnsubscription-definition-version-arn
-
-
출력에서
Version
을 복사합니다. 새 그룹 버전의 ID가 이 값이 됩니다. -
새로운 그룹 버전을 사용하여 그룹을 배포합니다.
-
group-id
를 해당 그룹에서 복사한Id
로 바꿉니다. -
새 그룹 버전용으로 복사한 것으로
group-version-id
바꾸십시오.Version
aws greengrass create-deployment \ --group-id
group-id
\ --group-version-idgroup-version-id
\ --deployment-type NewDeployment -
Greengrass 코어의 IP 주소를 수동으로 입력하려면 IPDetector
함수가 포함되지 않은 다른 함수 정의로 이 튜토리얼을 완료할 수 있습니다. 다음과 같이 하면 감지 함수가 Greengrass 코어 IP 주소를 찾아서 자동으로 입력할 수 없습니다.
이 시스템 Lambda 함수는 Lambda 콘솔에 표시되지 않습니다. 함수가 최신 그룹 버전에 추가된 후에는 API를 사용하여 이를 교체하거나 제거하지 않는 한 콘솔에서 만든 배치에 포함됩니다.
Greengrass 대몬(daemon)을 시작하도록 init 시스템 구성
특히 대규모 디바이스 집합을 관리할 때는 부팅 동안 Greengrass 대몬(daemon)을 시작하도록 init 시스템을 설정하는 것이 좋습니다.
참고
apt
를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 설치한 경우 systemd 스크립트를 사용하여 부팅 시 시작을 활성화할 수 있습니다. 자세한 설명은 systemd 스크립트를 사용하여 Greengrass 대몬(daemon) 수명 주기 관리 섹션을 참조하세요.
initd, systemd 및 SystemV 같이 다양한 유형의 init 시스템이 있으며, 이들은 비슷한 구성 파라미터를 사용합니다. 다음은 systemd를 위한 서비스 파일의 예입니다. greengrassd(Greengrass를 시작하는 데 사용)는 Greengrass 대몬(daemon) 프로세스를 분기시키기 때문에 Type
파라미터가 forking
로 설정되었고, Greengrass가 실패 상태가 되면 systemd에 Greengrass 재시작을 지시하도록Restart
파라미터가 on-failure
로 설정되었습니다.
참고
디바이스가 systemd를 사용하는지 알아보려면 모듈 1에서 check_ggc_dependencies
스크립트를 실행합니다. 그런 다음 systemd를 사용하려면 config.json에서 useSystemd
파라미터가 yes
로 설정되어 있어야 합니다.
[Unit] Description=Greengrass Daemon [Service] Type=forking PIDFile=/var/run/greengrassd.pid Restart=on-failure ExecStart=/greengrass/ggc/core/greengrassd start ExecReload=/greengrass/ggc/core/greengrassd restart ExecStop=/greengrass/ggc/core/greengrassd stop [Install] WantedBy=multi-user.target