

지원 종료 공지: 2026년 10월 7일에는에 대한 지원을 중단할 AWS 예정입니다 AWS IoT Greengrass Version 1. 2026년 10월 7일 이후에는 더 이상 AWS IoT Greengrass V1 리소스에 액세스할 수 없습니다. 자세한 내용은 [에서 마이그레이션 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)을 참조하세요.

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

# 모듈 3(1부):의 Lambda 함수 AWS IoT Greengrass
<a name="module3-I"></a>

이 모듈에서는 AWS IoT Greengrass 코어 디바이스에서 MQTT 메시지를 전송하는 Lambda 함수를 생성하고 배포하는 방법을 보여줍니다. 이 모듈에서는 Lambda 함수 구성, MQTT 메시징을 허용하는 데 사용되는 구독 및 코어 장치에 대한 배포를 설명합니다.

[모듈 3(2부)](module3-II.md)에서는 AWS IoT Greengrass 코어에서 실행되는 온디맨드 Lambda 함수와 수명이 긴 Lambda 함수의 차이점을 다룹니다.

시작하기 전에 [모듈 1](module1.md)과 [모듈 2](module2.md)를 완료하고 AWS IoT Greengrass 코어 디바이스가 실행 중인지 확인합니다.

**작은 정보**  
또는 코어 장치를 자동으로 설정하는 스크립트를 사용하려면 [빠른 시작: Greengrass 장치 설정](quick-start.md) 단원을 참조하십시오. 스크립트는 이 모듈에 사용되는 Lambda 함수를 만들고 배포할 수도 있습니다.

이 모듈을 완료하는 데 약 30분 정도 걸립니다.

**Topics**
+ [Lambda 함수 생성 및 패키징](create-lambda.md)
+ [에 대한 Lambda 함수 구성 AWS IoT Greengrass](config-lambda.md)
+ [Greengrass 코어 장치에 클라우드 구성 배포](configs-core.md)
+ [Lambda 함수가 코어 장치에서 실행 중인지 확인](lambda-check.md)

# Lambda 함수 생성 및 패키징
<a name="create-lambda"></a>

이 모듈의 예제 Python Lambda 함수수는 Python용 [AWS IoT Greengrass 코어 SDK](lambda-functions.md#lambda-sdks-core)를 사용하여 MQTT 메시지를 게시합니다.

이 단계에서는 다음을 수행합니다.
+ Python용 AWS IoT Greengrass 코어 SDK를 컴퓨터에 다운로드합니다( AWS IoT Greengrass 코어 디바이스 아님).
+ 함수 코드와 종속성이 포함된 Lambda 함수 배포 패키지를 생성합니다.
+ Lambda 콘솔을 사용하여 Lambda 함수를 만들고 배포 패키지를 업로드합니다.
+ Lambda 함수의 버전을 게시하고 버전을 가리키는 별칭을 만듭니다.

이 모듈을 완료하려면 코어 장치에 Python 3.7을 설치해야 합니다.

 <a name="create-lambda-procedure"></a>

1. <a name="download-ggc-sdk"></a> [AWS IoT Greengrass 코어 SDK](what-is-gg.md#gg-core-sdk-download) 다운로드 페이지에서 Python용 AWS IoT Greengrass 코어 SDK를 컴퓨터에 다운로드합니다.

1. 다운로드한 패키지의 압축을 풀어 Lambda 함수 코드 및 SDK를 가져옵니다.

   이 모듈의 Lambda 함수는 다음을 사용합니다.
   + `examples\HelloWorld`의 `greengrassHelloWorld.py` 파일. 이 항목은 Lambda 함수 코드입니다. 이 함수는 5초마다 가능한 메시지 두 개 중 하나를 `hello/world` 주제에 게시합니다.
   + `greengrasssdk` 폴더입니다. 이는 SDK입니다.

1. `greengrasssdk` 폴더를 `greengrassHelloWorld.py`가 포함된 `HelloWorld` 폴더에 복사합니다.

1. Lambda 함수 배포 패키지를 생성하려면 `greengrassHelloWorld.py`와 `greengrasssdk` 폴더를 `hello_world_python_lambda.zip`이라는 압축된 `zip` 파일로 저장합니다. `py` 파일과 `greengrasssdk` 폴더는 디렉터리의 루트에 있어야 합니다.  
![\[hello_word_python_lambda.zip의 압축된 내용을 보여 주는 스크린샷.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-017.png)

   UNIX 유사 시스템(Mac 터미널 포함)의 경우 다음 명령을 사용하여 파일과 폴더를 패키징할 수 있습니다.

   ```
   zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py
   ```
**참고**  
배포에 따라 먼저 `zip`을 설치해야 할 수도 있습니다(예를 들어 `sudo apt-get install zip`을 실행하여). 설치 명령은 배포에 따라 다를 수 있습니다.

   이제 Lambda 함수를 만들고 배포 패키지를 업로드할 준비가 되었습니다.

1. Lambda 콘솔을 열고 **함수 생성**을 선택합니다.

1. **새로 작성**을 선택합니다.

1. 함수 이름을 **Greengrass\$1HelloWorld**로 지정하고 나머지 필드를 다음과 같이 설정합니다.
   + **실행 시간**에서 **Python 3.7**을 선택합니다.
   + **권한**의 경우, 기본 설정을 유지합니다. 이를 통해 기본 Lambda 권한을 부여하는 실행 역할을 생성합니다. 이 역할은에서 사용되지 않습니다 AWS IoT Greengrass.

   **함수 생성(Create function)**을 선택합니다.

1. Lambda 함수 배포 패키지를 업로드합니다.

   1. <a name="lambda-console-upload"></a>**코드** 탭의 **코드 소스**에서 **다음에서 업로드**를 선택합니다. 드롭다운에서 **.zip 파일**을 선택합니다.  
![\[.zip 파일이 강조 표시된 드롭다운의 업로드.\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. **업로드**를 선택한 다음 `hello_world_python_lambda.zip` 배포 패키지를 선택합니다. 그런 다음 **저장**을 선택합니다.

   1. <a name="lambda-console-runtime-settings-para"></a>함수의 **코드** 탭에 있는 **런타임 설정**에서 **편집**을 선택하고 다음 값을 입력합니다.
      + **실행 시간**에서 **Python 3.7**을 선택합니다.
      + **핸들러**에 **greengrassHelloWorld.function\$1handler**를 입력합니다.  
![\["런타임" 필드가 "Python 3.7"로 설정되고 "핸들러" 필드가 "greengrassHelloWorld.function_handler"로 설정된 “런타임 설정” 섹션\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-023-2.png)

   1. <a name="lambda-console-save-config"></a>**저장(Save)**을 선택합니다.
**참고**  
 AWS Lambda 콘솔의 **테스트** 버튼은이 함수에서 작동하지 않습니다. AWS IoT Greengrass Core SDK에는 AWS Lambda 콘솔에서 Greengrass Lambda 함수를 독립적으로 실행하는 데 필요한 모듈이 포함되어 있지 않습니다. 이러한 모듈(예: `greengrass_common`)은 Greengrass 코어에 배포된 후 함수에 제공됩니다.

1. <a name="publish-function-version"></a>Lambda 함수를 게시하십시오.

   1. **작업** 메뉴에서 **새 버전 게시**를 선택합니다.  
![\[새 버전 게시가 강조 표시된 작업 메뉴 스크린샷\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-026.png)

   1. **버전 설명**에 **First version**을 입력한 후 **게시**를 선택합니다.  
![\[버전 설명 필드가 First version(처음 버전)으로 설정되어 있고 게시 버튼이 강조 표시된 스크린샷\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-027.png)

1. <a name="create-version-alias"></a>Lambda 함수 [버전](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)의 [별칭](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)을 생성합니다.
**참고**  
Greengrass 그룹은 별칭(권장) 또는 버전을 기준으로 Lambda 함수를 참조할 수 있습니다. 별칭을 사용하면 함수 코드를 업데이트할 때 구독 테이블이나 그룹 정의를 변경할 필요가 없으므로 코드 업데이트를 더 쉽게 관리할 수 있습니다. 그 대신 새 함수 버전에 대한 별칭을 가리킵니다.

   1. 페이지 상단의 **작업** 메뉴에서 **별칭 생성**을 선택합니다.  
![\[작업 메뉴가 별칭 생성으로 설정된 스크린샷\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-028.png)

   1. 별칭을 **GG\$1HelloWorld**(으)로 지정하고 버전을 **1**(사용자가 방금 게시한 버전에 해당)로 설정한 다음 **저장**을 선택합니다.
**참고**  
AWS IoT Greengrass 는 **\$1LATEST** 버전에 대해 Lambda 별칭을 지원하지 않습니다.

         
![\[이름 필드가 GG_HelloWorld로, 버전 필드가 1로 설정되어 있는 새 별칭의 스크린샷 생성\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-029.png)

# 에 대한 Lambda 함수 구성 AWS IoT Greengrass
<a name="config-lambda"></a>

이제 AWS IoT Greengrass에 대해 Lambda 함수를 구성할 준비가 되었습니다.

이 단계에서는 다음을 수행합니다.
+  AWS IoT 콘솔을 사용하여 Greengrass 그룹에 Lambda 함수를 추가합니다.
+ Lambda 함수에 대한 그룹별 설정을 구성합니다.
+ Lambda 함수가 MQTT 메시지를 AWS IoT에 게시할 수 있도록 그룹에 구독을 추가합니다.
+ 그룹에 대한 로컬 로그 설정을 구성합니다.

 

1. <a name="console-gg-groups"></a> AWS IoT 콘솔 탐색 창의 **관리**에서 **Greengrass 디바이스**를 확장한 다음 **그룹(V1)을** 선택합니다.

1. **Greengrass 그룹**에서 [모듈 2](module2.md)에서 생성한 그룹을 선택합니다.

1. 그룹 구성 페이지에서 **Lambda 함수** 탭을 선택한 다음 **내 Lambda 함수** 섹션으로 스크롤하여 **Lambda 함수 추가**를 선택합니다.

1. 이전 단계에서 생성한 Lambda 함수의 이름을 선택합니다. (별칭 이름이 아닌 **Greengrass\$1HelloWorld**)

1. 버전에는 **Alias: GG\$1HelloWorld**를 선택합니다.

1. **Lambda 함수 구성** 섹션에서 다음과 같이 변경합니다.
   + **시스템 사용자 및 그룹**을 **그룹 기본값 사용**으로 설정합니다.
   + **그룹 기본값 사용**에 **Lambda 함수 컨테이너화**를 설정합니다.
   + **제한 시간**을 25초로 설정합니다. 이 Lambda 함수는 매 간접 호출 전에 20초 동안 대기 상태를 유지합니다.
   + **고정된** 경우 **True**를 선택합니다.

    
**참고**  
<a name="long-lived-lambda"></a>*수명이 긴*(또는 *고정된*) Lambda 함수는가 시작된 후 자동으로 AWS IoT Greengrass 시작되고 자체 컨테이너에서 계속 실행됩니다. 이는 간접 호출되면 시작되고 실행할 작업이 남아 있지 않으면 중지되는 *온디맨드* Lambda 함수와 상반됩니다. 자세한 내용은 [Greengrass Lambda 함수의 라이프사이클 구성](lambda-functions.md#lambda-lifecycle) 단원을 참조하십시오.

1. **Lambda 함수 추가**를 선택하여 변경 사항을 저장합니다. Lambda 함수 속성에 대한 자세한 내용은 [그룹별 구성을 사용한 Lambda 함수 실행 제어](lambda-group-config.md)을 참조하십시오.

   그런 다음 Lambda 함수가 [MQTT](http://mqtt.org/) 메시지를 AWS IoT Core로 전송하는 데 사용하는 구독을 생성합니다.

   Greengrass Lambda 함수는 MQTT 메시지를 다음과 교환할 수 있습니다.
   + Greengrass 그룹에서의 [장치](what-is-gg.md#greengrass-devices)
   + 그룹 내의 [커넥터](connectors.md).
   + 그룹의 기타 Lambda 함수입니다.
   + AWS IoT Core.
   + 로컬 섀도우 서비스 자세한 내용은 [모듈 5: 장치 섀도우와 상호 작용](module5.md) 단원을 참조하십시오.

   그룹은 구독을 사용하여 이러한 엔터티가 서로 통신하는 방법을 제어합니다. 구독은 예측 가능한 상호 작용과 보안 계층을 제공합니다.

   구독은 소스, 대상 및 주제로 구성됩니다. 소스는 메시지의 전송 위치입니다. 대상은 메시지의 목적지입니다. 해당 주제를 사용하면 소스에서 대상으로 전송되는 데이터를 필터링할 수 있습니다. 소스 또는 대상은 Greengrass 장치, Lambda 함수, 커넥터, 장치 섀도우 또는 AWS IoT Core일 수 있습니다.
**참고**  
메시지가 특정 방향으로 흐른다는 점에서 구독에는 방향(소스에서 대상으로)이 있습니다. 양방향 통신이 가능하려면 2개의 구독을 설정해야 합니다.
**참고**  
 현재 구독 주제 필터는 주제에 하나 이상의 `+` 글자를 포함할 수 없습니다. 주제 필터는 주제의 끝에 하나의 `#` 문자만 허용합니다.

   `Greengrass_HelloWorld` Lambda 함수는의 `hello/world` 주제에만 메시지를 전송 AWS IoT Core하므로 Lambda 함수에서 로 구독을 하나만 생성하면 됩니다 AWS IoT Core. 이 작업은 다음 단계에서 생성합니다.

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

    AWS CLI을(를) 사용하여 구독을 생성하는 방법을 보여주는 예제는 *AWS CLI 명령 참조*의 [create-subscription-definition](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/greengrass/create-subscription-definition.html)을 참조하십시오.

1. **소스 유형**에서 **Lambda 함수**를 선택하고, **소스**에서는 **GreenGrass\$1HelloWorld**를 선택합니다.

1. **대상 유형**으로는 **서비스**를 선택하고, **대상**에는 **IoT Cloud**를 선택합니다.

1. **주제 필터**에 **hello/world**을(를) 입력한 다음 **구독 생성**을 선택합니다.

1. 그룹의 로깅 설정을 구성합니다. 이 자습서에서는 로그를 코어 장치의 파일 시스템에 쓸 수 있도록 AWS IoT Greengrass 시스템 구성 요소와 사용자 정의 Lambda 함수를 구성합니다.

   1. 그룹 구성 페이지에서 **로그**를 선택합니다.

   1. **로컬 로그 구성** 섹션에서 **편집**을 선택합니다.

   1. **로컬 로그 구성 편집** 대화 상자에서 로그 수준 및 저장소 크기 모두에 대한 기본값을 유지한 다음 **저장**을 선택합니다.

   로그를 사용하여 이 자습서를 실행할 때 발생할 수 있는 문제를 해결할 수 있습니다. 문제를 해결할 때 일시적으로 로깅 수준을 **디버그**로 변경할 수 있습니다. 자세한 내용은 [파일 시스템 로그 액세스](greengrass-logs-overview.md#gg-logs-local) 단원을 참조하십시오.

1. <a name="disable-stream-manager-no-java"></a>Java 8 런타임이 코어 장치에 설치되지 않은 경우 Java 8 런타임을 설치하거나 스트림 관리자를 비활성화해야 합니다.
**참고**  
이 튜토리얼에서는 스트림 관리자를 사용하지 않지만 기본적으로 스트림 관리자를 활성화하는 **기본 그룹 생성** 워크플로를 사용합니다. 스트림 관리자를 활성화했지만 Java 8이 설치되지 않은 경우 그룹 배포가 실패합니다. 자세한 내용은 [스트림 관리자 요구 사항](stream-manager.md#stream-manager-requirements)을 참조하십시오.

   스트림 관리자를 비활성화하려면 다음을 수행합니다.

   1. 그룹 설정 페이지에서 **Lambda 함수** 탭을 선택합니다.

   1. **시스템 Lambda 함수** 섹션에서 **스트림 관리자**를 선택하고 **편집**을 선택합니다.

   1. **비활성화**를 선택한 다음 **저장**을 선택합니다.

# Greengrass 코어 장치에 클라우드 구성 배포
<a name="configs-core"></a>

1. Greengrass 코어 장치가 인터넷에 연결되어 있는지 확인합니다. 예를 들어, 웹 페이지를 이동해 봅니다.

1. 코어 장치에서 Greengrass 대몬(daemon)이 실행 중인지 확인합니다. 코어 장치 터미널에서 다음 명령들을 실행하여 대몬이 실행 중인지 확인하고 필요한 경우 시작하십시오.

   1. 대몬(daemon)이 실행 중인지 확인하려면:

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      출력에 `root`에 대한 `/greengrass/ggc/packages/1.11.6/bin/daemon` 입력이 포함되어 있는 경우에는 대몬(daemon)이 실행 중인 것입니다.

   1. 대몬(daemon)을 시작하려면:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

   이제 Greengrass 코어 장치에 Lambda 함수 및 구독 구성을 배포할 준비가 완료되었습니다.

1. <a name="console-gg-groups"></a> AWS IoT 콘솔 탐색 창의 **관리**에서 **Greengrass 디바이스**를 확장한 다음 **그룹(V1)을** 선택합니다.

1. **Greengrass 그룹**에서 [모듈 2](module2.md)에서 생성한 그룹을 선택합니다.

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

1. **Lambda 함수** 탭의 **시스템 Lambda 함수** 섹션에서 **IP 감지기**를 선택합니다.

1. **편집**을 선택하고 **MQTT 브로커 엔드포인트 자동 감지 및 재정의**를 선택합니다. 이렇게 하면 장치가 IP 주소, DNS, 포트 번호 등 코어의 연결 정보를 자동으로 획득할 수 있습니다. 자동 탐지가 바람직하지만 AWS IoT Greengrass 은(는) 수동으로 지정된 엔드포인트도 지원합니다. 그룹이 처음 배포될 때만 검색 방법 메시지가 표시됩니다.

최초 배포는 몇 분 정도 걸릴 수 있습니다. 배포가 완료되면 **배포** 페이지의 **상태** 열에 **성공적으로 완료됨**이 표시되어야 합니다.

**참고**  
또한 배포 상태가 페이지 헤더에서 그룹의 이름 아래에 표시됩니다.

문제 해결에 대한 도움말은 [문제 해결 AWS IoT Greengrass](gg-troubleshooting.md) 섹션을 참조하세요.

# Lambda 함수가 코어 장치에서 실행 중인지 확인
<a name="lambda-check"></a>

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)을 열고 탐색 패널에서 **테스트**를 선택하고 **MQTT 테스트 클라이언트**를 선택합니다.

1. **주제 구독** 탭을 선택합니다.

1. ****hello/world**주제 필터**에 을(를) 입력하고 **추가 구성**을 확장합니다.

1. 다음 각 필드에 나열된 정보를 입력합니다.
   + **서비스 품질**에서 **0**을 선택합니다.
   + **MQTT 페이로드 디스플레이**에서 **페이로드를 문자열로 표시**를 선택합니다.

    

1. **구독**을 선택합니다.

장치에서 Lambda 함수가 실행 중이라고 가정하고 다음과 같이 `hello/world` 주제에 메시지가 게시됩니다.

![\[hello/world 주제로 전송된 메시지의 스크린샷(메시지가 강조 표시됨)\]](http://docs.aws.amazon.com/ko_kr/greengrass/v1/developerguide/images/gg-get-started-045.png)


Lambda 함수는 `hello/world` 주제에 MQTT 메시지를 계속 전송하지만 AWS IoT Greengrass 데몬을 중지하지 마십시오. 나머지 모듈은 데몬이 실행 중이라는 가정하에 작성되었습니다.

그룹에서 함수 및 구독을 삭제할 수 있습니다.
+ 그룹 구성 페이지의 **Lambda 함수** 탭에서 제거하려는 Lambda 함수를 선택하고 **제거**를 선택합니다.
+ 그룹 구성 페이지에서 **구독** 탭을 선택한 다음 **삭제**를 선택합니다.

다음 그룹 배포 중에 코어에서 함수 및 구독이 제거됩니다.