수명이 긴 Lambda 함수 테스트 - AWS IoT Greengrass

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 것이 좋습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

수명이 긴 Lambda 함수 테스트

수명이 긴 Lambda 함수는 AWS IoT Greengrass 코어가 시작할 때 자동으로 시작됩니다(그리고 단일 컨테이너 또는 샌드박스에서 실행됩니다). 함수 핸들러 외부에서 정의된 변수 및 사전 처리 로직은 함수 핸들러를 호출할 때마다 유지됩니다. 함수 핸들러를 여러 번 호출하면 앞선 호출의 실행을 마칠 때까지 대기됩니다.

이 모듈에 사용되는 greengrassHelloWorldCounter.py 코드는 함수 핸들러 외부의 my_counter 변수를 정의합니다.

참고

AWS Lambda 콘솔이나 GitHub의 AWS IoT Greengrass Core SDK for Python에서 코드를 볼 수 있습니다.

이 단계에서는 Lambda 함수 및 AWS IoT를 사용하여 MQTT 메시지를 교환할 수 있는 구독을 생성합니다. 그런 다음 그룹을 배포하고 함수를 테스트합니다.

  1. 그룹 구성 페이지에서 구독을 선택한 다음 추가를 선택합니다.

  2. 소스 유형에서 Lambda 함수를 선택한 다음 Greengrass_HelloWorld_Counter를 선택합니다.

  3. 대상 유형에서 서비스를 선택하고 IoT Cloud를 선택합니다.

  4. 주제 필터hello/world/counter을 입력합니다.

  5. 구독 생성을 선택합니다.

    이 단일 구독은 Greengrass_HelloWorld_Counter Lambda 함수에서 AWS IoT로 한 방향으로만 진행됩니다. 클라우드에서 이 Lambda 함수를 간접 호출하거나 트리거하려면 반대 방향의 구독을 생성해야 합니다.

  6. 1 - 5단계를 수행하여 다음 값을 사용하는 다른 구독을 추가합니다. 이 구독은 Lambda 함수가 AWS IoT에서 메시지를 받을 수 있습니다. 함수를 간접 호출하는 AWS IoT 콘솔에서 메시지를 보낼 때 이 구독을 사용합니다.

    • 소스의 경우 서비스를 선택한 다음 IoT Cloud를 선택합니다.

    • 대상의 경우 Lambdas 함수를 선택한 다음 Greengrass_HelloWorld_Counter를 선택합니다.

    • 주제 필터의 경우 hello/world/counter/trigger를 입력합니다.

    이 주제 필터에서 /trigger 확장이 사용되는 것은 2개의 구독을 생성했고 이 두 구독이 서로 간섭하지 않아야 하기 때문입니다.

  7. 코어 디바이스로 클라우드 구성 배포 섹션에 설명된 대로 Greengrass 대몬(daemon)이 실행 중인지 확인합니다.

  8. 그룹 구성 페이지에서 배포를 선택합니다.

  9. 배포가 완료된 후 AWS IoT 콘솔 홈페이지로 돌아가 테스트를 선택합니다.

  10. 다음 필드를 구성합니다.

    • 구독 주제hello/world/counter를 입력합니다.

    • 서비스 품질에서 0을 선택합니다.

    • MQTT 페이로드 디스플레이에서 페이로드를 문자열로 표시를 선택합니다.

  11. 구독을 선택합니다.

    이 모듈의 1부와 달리 hello/world/counter 구독 후에는 메시지가 표시되지 않습니다. 이는 hello/world/counter 주제에 게시하는 greengrassHelloWorldCounter.py 코드가 함수 핸들러 내에 있고 함수 핸들러는 함수가 간접 호출될 때에만 실행되기 때문입니다.

    이 모듈에서는 hello/world/counter/trigger 주제에 대한 MQTT 메시지를 받을 때 간접 호출되도록 Greengrass_HelloWorld_Counter Lambda 함수를 구성했습니다.

    Greengrass_HelloWorld_Counter에서 IoT Cloud로의 구독을 통해 함수는 hello/world/counter 주제의 AWS IoT에 메시지를 전송할 수 있습니다. IoT Cloud에서 Greengrass_HelloWorld_Counter로의 구독을 통해 AWS IoT는 hello/world/counter/trigger 주제의 함수에 메시지를 전송할 수 있습니다.

  12. 긴 수명 주기를 테스트하려면 hello/world/counter/trigger 주제에 메시지를 게시하여 Lambda 함수를 간접 호출합니다. 기본 메시지를 사용할 수 있습니다.

    
                            AWS IoT 콘솔에서 hello/world/counter/trigger로 전송된 기본 Hello 메시지(주제 게시 버튼이 강조 표시되어 있음)입니다.
    참고

    Greengrass_HelloWorld_Counter 함수는 수신된 메시지의 내용을 무시합니다. 다만 function_handler에서 코드를 실행하며 코드는 hello/world/counter 주제에 메시지를 전송합니다. 이 코드는 GitHub의 AWS IoT Greengrass Core SDK for Python에서 검토할 수 있습니다.

메시지가 hello/world/counter/trigger 주제에 게시될 때마다 my_counter 변수가 증가합니다. 이 간접 호출 횟수는 Lambda 함수에서 전송된 메시지에 표시됩니다. 함수 핸들러에는 20초의 대기 주기(time.sleep(20))가 포함되어 있기 때문에 핸들러는 AWS IoT Greengrass 코어의 응답을 반복해서 대기열에 넣습니다.


                    1, 2, 3에서 증가하는 Invocation Count를 보여 주는 스크린샷