AWS Management Console을 사용하여 로컬 리소스 액세스를 구성하는 방법 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.

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

AWS Management Console을 사용하여 로컬 리소스 액세스를 구성하는 방법

이 기능은 에서 사용할 수 있습니다.AWS IoT Greengrass코어 v1.3 및 이후 버전입니다.

호스트 Greengrass 코어 디바이스에서 로컬 리소스에 안전하게 액세스하도록 Lambda 함수를 구성할 수 있습니다. 로컬 리소스란 물리적으로 호스트에 있는 버스와 주변 정치 또는 호스트 OS의 파일 시스템 볼륨을 가리킵니다. 요구 사항과 제한 조건을 비롯한 자세한 내용은 Lambda 함수와 커넥터를 사용하여 로컬 리소스에 액세스 단원을 참조하십시오.

이 자습서에서는AWS Management Console에 존재하는 로컬 리소스에 대한 액세스를 구성하는AWS IoT Greengrass코어 디바이스로 이동합니다. 자습서에는 다음과 같은 상위 수준 단계가 포함됩니다.

AWS Command Line Interface을(를) 사용하는 자습서는 을 사용하여 로컬 리소스 액세스를 구성하는 방법AWS명령줄 인터페이스 단원을 참조하십시오.

Prerequisites

이 자습서를 완료하려면 다음이 필요합니다.

  • Greengrass 그룹 및 Greengrass 코어 (v1.3 이상). Greengrass 그룹 또는 코어를 생성하는 방법에 대해 알아보려면 AWS IoT Greengrass 시작하기 단원을 참조하십시오.

  • Greengrass 코어 디바이스의 다음 디렉터리:

    • /src/LRAtest

    • /dest/LRAtest

    이러한 디렉터리의 소유자 그룹은 디렉터리에 대한 읽기 및 쓰기 권한을 보유해야 합니다. 다음 명령을 사용하여 액세스를 부여할 수 있습니다.

    sudo chmod 0775 /src/LRAtest

1단계: Lambda 함수 배포 패키지를 생성합니다.

이 단계에서는 함수의 코드와 종속성이 포함된 ZIP 파일인 Lambda 함수 배포 패키지를 생성합니다. 또한 종속성으로 패키지에 포함할 AWS IoT Greengrass 코어 SDK도 다운로드합니다.

  1. 컴퓨터에서 다음 Python 스크립트를 lraTest.py라는 로컬 파일에 복사합니다. 이것이 Lambda 함수에 대한 앱 로직입니다.

    # Demonstrates a simple use case of local resource access. # This Lambda function writes a file test to a volume mounted inside # the Lambda environment under destLRAtest. Then it reads the file and # publishes the content to the AWS IoT LRAtest topic. import sys import greengrasssdk import platform import os import logging # Setup logging to stdout logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) # Create a Greengrass Core SDK client. client = greengrasssdk.client('iot-data') volumePath = '/dest/LRAtest' def function_handler(event, context): try: client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.') volumeInfo = os.stat(volumePath) client.publish(topic='LRA/test', payload=str(volumeInfo)) with open(volumePath + '/test', 'a') as output: output.write('Successfully write to a file.') with open(volumePath + '/test', 'r') as myfile: data = myfile.read() client.publish(topic='LRA/test', payload=data) except Exception as e: logger.error('Failed to publish message: ' + repr(e)) return
  2. 에서AWS IoT Greengrass코어 SDK다운로드 페이지에서AWS IoT Greengrass컴퓨터에 파이썬을위한 핵심 SDK.

  3. 다운로드한 패키지의 압축을 풀어 SDK를 가져옵니다. SDK는 greengrasssdk 폴더입니다.

  4. 다음 항목을 lraTestLambda.zip라는 파일로 압축합니다.

    • lraTest.py. 앱 로직.

    • greengrasssdk. 모든 Python Lambda 함수에 필요한 라이브러리입니다.

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

2단계: Lambda 함수 생성 및 게시

이 단계에서는 사용 하 여AWS Lambda콘솔을 사용하여 Lambda 함수를 만들고 이를 구성하여 배포 패키지를 사용합니다. 그런 다음 함수 버전을 게시하고 별칭을 생성합니다.

먼저 Lambda 함수를 생성합니다.

  1. AWS Management Console에서 [Services]를 선택한 다음 AWS Lambda 콘솔을 엽니다.

  2. 선택함수 생성를 선택한 다음새로 작성을 시작합니다..

  3. 기본 정보 섹션에서 다음 값을 지정합니다.

    1. [함수 이름(Function name)]에 TestLRA을 입력합니다.

    2. 실행 시간에서 Python 3.7을 선택합니다.

    3. 권한의 경우, 기본 설정을 유지합니다. 이를 통해 기본 Lambda 권한을 부여하는 실행 역할이 생성됩니다. 이 역할은 AWS IoT Greengrass에서 사용되지 않습니다.

  4. 함수 생성을 선택합니다.

    
      함수 생성이 강조 표시된 함수 생성 페이지

     

  5. Lambda 함수 배포 패키지를 업로드하고 핸들러를 등록합니다.

    1. Code탭의소스 코드를 선택하고다음에서 업로드. 드롭다운에서.zip 파일.

      
                .zip 파일과 드롭 다운에서 업로드가 강조 표시됩니다.
    2. 선택업로드를 선택한 다음 를 선택합니다.lraTestLambda.zip배포 패키지를 생성합니다. 그런 다음 저장을 선택합니다.

    3. Code탭의런타임 설정를 선택하고Edit를 선택한 후 다음 값을 입력합니다.

      • 실행 시간에서 Python 3.7을 선택합니다.

      • 핸들러에 대해 lraTest.function_handler를 입력합니다.

    4. 저장을 선택합니다.

      참고

      테스트단추 (사용)AWS Lambda콘솔이 이 함수에서 작동하지 않습니다. 이AWS IoT Greengrass코어 SDK에는 Greengrass Lambda 함수를 독립적으로 실행하는 데 필요한 모듈이 포함되어 있지 않습니다.AWS Lambda콘솔로 이동합니다. 이러한 모듈(예: greengrass_common)은 Greengrass 코어에 배포된 후 함수에 제공됩니다.

    그런 다음 Lambda 함수의 첫 번째 버전을 게시합니다. 그런 다음 버전의 별칭을 생성합니다.

    Greengrass 그룹은 별칭 (권장) 또는 버전을 기준으로 Lambda 함수를 참조할 수 있습니다. 별칭을 사용하면 함수 코드를 업데이트할 때 구독 테이블이나 그룹 정의를 변경할 필요가 없으므로 코드 업데이트를 더 쉽게 관리할 수 있습니다. 그 대신 새 함수 버전에 대한 별칭을 가리킵니다.

  6. 작업에서 새 버전 게시를 선택합니다.

    
      작업 메뉴의 새 버전 게시 옵션
  7. 버전 설명First version을 입력한 후 게시를 선택합니다.

  8. [TestLRA: 1] 구성 페이지의 [Actions]에서 [Create alias]를 선택합니다.

    
      작업 메뉴의 별칭 생성 옵션
  9. 새 별칭 작성 페이지에서 이름test를 입력하십시오. 버전에서 1을 선택합니다.

    참고

    AWS IoT Greengrass는 Lambda 별칭을 지원하지 않습니다.$최신버전입니다.

  10. Create를 선택합니다.

    
      Create가 강조 표시된 Create a new alias 페이지

    이제 Greengrass 그룹에 Lambda 함수를 추가할 수 있습니다.

3단계: Greengrass 그룹에 Lambda 함수 추가

이 단계에서 그룹에 함수를 추가한 다음 함수의 수명 주기를 구성합니다.

먼저 Greengrass 그룹에 Lambda 함수를 추가합니다.

  1. 에서AWS IoT콘솔의 탐색 창에서Greengrass,클래식 (V1),그룹.

    
      [] 대화 상자의 왼쪽 창AWS IoT콘솔에서 그룹을 강조 표시합니다.
  2. Lambda 함수를 추가하려는 Greengrass 그룹을 선택합니다.

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

    
      Lambda 및 Add Lambda가 강조 표시된 그룹 구성 페이지
  4. [Add a Lambda to your Greengrass Group] 페이지에서 [Use existing Lambda]를 선택합니다.

    
      Use existing Lambda가 강조 표시된 Add a Lambda to your Greengrass Group 페이지
  5. 기존 Lambda 사용페이지에서TestLRA를 선택한 다음 를 선택합니다.다음.

  6. Lambda 버전 선택페이지에서별칭:테스트를 선택한 다음 를 선택합니다.Finish.

     

    그런 다음 Lambda 함수의 수명 주기를 구성합니다.

  7. Lambdas페이지에서 TestLRA Lambda 함수를 선택합니다.

    
      TestLRA Lambda 함수가 강조 표시된 Lambdas 페이지
  8. [TestLRA] 구성 페이지에서 [Edit]를 선택합니다.

  9. 그룹별 Lambda 구성 페이지의 제한 시간에서 30초를 선택합니다.

    중요

    (이 절차에서 설명된 바와 같이) 로컬 리소스를 사용하는 Lambda 함수는 Greengrass 컨테이너에서 실행해야 합니다. 그렇지 않으면 함수 배포를 시도하는 경우 배포가 실패합니다. 자세한 내용은 컨테이너화를 참조하십시오.

  10. 페이지 하단에서 [] 을 선택합니다.업데이트.

4단계: Greengrass 그룹에 로컬 리소스 추가

이 단계에서는 로컬 볼륨 리소스를 Greengrass 그룹에 추가하고, 함수에 리소스에 대한 읽기 및 쓰기 액세스를 부여합니다. 로컬 리소스의 범위는 그룹 레벨입니다. 리소스에 액세스하기 위해 그룹에서 Lambda 함수에 대한 권한을 부여할 수 있습니다.

  1. 그룹 구성 페이지에서 [Resources]를 선택합니다.

    
      리소스가 강조 표시된 그룹 확인 페이지
  2. 로컬 리소스 탭에서 로컬 리소스 추가를 선택합니다.

  3. [Create a local resource] 페이지에서 다음 값을 사용합니다.

    1. 리소스 이름testDirectory을 입력합니다.

    2. [Resource type]에서 [Volume]을 선택합니다.

    3. Source path에, /src/LRAtest를 입력합니다. 이 경로가 호스트 OS에 존재해야 합니다.

      소스 경로는 코어 디바이스의 파일 시스템에 있는 리소스의 로컬 절대 경로입니다. 이 위치는 안에서 함수가 실행되는 컨테이너의 외부입니다. 경로는 /sys로 시작할 수 없습니다.

    4. [Destination path]에 [/dest/LRAtest]을 입력합니다. 이 경로가 호스트 OS에 존재해야 합니다.

      대상 경로는 Lambda 네임스페이스에서 리소스의 절대 경로입니다. 이 위치는 안에서 함수가 실행되는 컨테이너의 내부입니다.

    5. [Group owner file access permission]에서 [Automatically add OS group permissions of the Linux group that owns the resource]를 선택합니다.

      [Group owner file access permission] 옵션을 사용하면 Lambda 프로세스에 추가 파일 액세스 권한을 부여할 수 있습니다. 자세한 내용은 그룹 소유자 파일 액세스 권한 섹션을 참조하세요.

      
        저장이 강조 표시된 로컬 리소스 생성 페이지
  4. [Lambda function affiliations]에서 [Select]를 선택합니다.

  5. [TestLRA]를 선택하고 [Read and write access]를 선택한 다음 [Done]을 선택합니다.

    
      Done이 강조 표시된 Lambda 함수 연결 속성
  6. 페이지 하단에서 저장을 선택합니다. [Resources] 페이지에 새 testDirectory 리소스가 표시됩니다.

5단계: Greengrass 그룹에 구독 추가

이 단계에서는 Greengrass 그룹에 구독을 추가합니다. 이러한 구독은 Lambda 함수와 사이의 양방향 통신을 가능하게 합니다.AWS IoT.

먼저 Lambda 함수에 대한 구독을 생성하여AWS IoT.

  1. 그룹 구성 페이지에서 [Subscriptions]를 선택한 다음 [Add Subscription]을 선택합니다.

    
      Subscriptions와 Add Subscription이 강조 표시된 그룹 페이지
  2. [Select your source and target] 페이지에서 다음과 같이 원본과 대상을 구성합니다.

    1. [Select a source]에서 [Lambda]와 [TestLRA]를 차례로 선택합니다.

    2. [Select a target]에서 [Services]와 [IoT Cloud]를 차례로 선택합니다.

    3. 다음을 선택합니다.

      
        Next가 강조 표시된 Select your source and target 페이지
  3. 데이터를 주제에 대해 필터링 페이지의 주제 필터 필드에 LRA/test을 입력한 후 다음을 선택합니다.

    
      LRA/test와 다음이 강조 표시된 데이터를 주제에 대해 필터링 페이지
  4. [마침]을 클릭합니다. [Subscriptions] 페이지에 새 구독이 표시됩니다.

     

    그런 다음 AWS IoT에서 함수를 호출하는 구독을 구성합니다.

  5. 구독페이지에서구독 추가.

  6. [Select your source and target] 페이지에서 다음과 같이 원본과 대상을 구성합니다.

    1. [Select a source]에서 [Services]와 [IoT Cloud]를 차례로 선택합니다.

    2. [Select a target]에서 [Lambda]와 [TestLRA]를 차례로 선택합니다.

    3. 다음을 선택합니다.

      
        Next가 강조 표시된 Select your source and target 페이지
  7. 데이터를 주제에 대해 필터링 페이지의 주제 필터 필드에 invoke/LRAFunction을 입력한 후 다음을 선택합니다.

    
      invoke/LRAFunction과 다음이 강조 표시된 데이터를 주제에 대해 필터링 페이지
  8. [마침]을 클릭합니다. [Subscriptions] 페이지에 2개의 구독이 모두 표시됩니다.

6단계: 배포AWS IoT Greengrass그룹

이 단계에서는 그룹 정의의 현재 버전을 배포합니다.

  1. 다음을 확인하십시오.AWS IoT Greengrass코어가 실행 중입니다. 필요한 경우 Raspberry Pi 터미널에서 다음 명령을 실행합니다.

    1. 데몬이 실행 중인지 확인하려면:

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

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

      참고

      경로의 버전은 코어 디바이스에 설치된 AWS IoT Greengrass 코어 소프트웨어 버전에 따라 다릅니다.

    2. 데몬을 시작하려면:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 그룹 구성 페이지에서 배포를 선택한 후 작업에서 배포를 선택합니다.

    
      배포와 배포가 강조 표시된 그룹 페이지
    참고

    컨테이너화 없이 Lambda 함수를 실행하고 연결된 로컬 리소스에 액세스하려고 하면 배포에 실패합니다.

  3. 메시지가 나타나면디바이스에서 코어를 검색하는 방법을 구성합니다.페이지에서자동 감지.

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

    
      Automatic detection이 강조 표시된 Configure how devices discover your core 페이지
    참고

    메시지가 나타나면Greengrass 서비스 역할와 연결해AWS 계정현재 에서AWS 리전. 이 역할은 다음을 허용합니다.AWS IoT Greengrass가 리소스에 액세스하도록AWS서비스.

    배포 페이지에 배포 타임스탬프, 버전 ID, 상태가 표시됩니다. 완료되면 배포 상태는 [Successfully completed]가 표시되어야 합니다.

    문제 해결에 대한 도움말은 AWS IoT Greengrass 문제 해결 단원을 참조하십시오.

로컬 리소스 액세스 테스트

이제 로컬 리소스 액세스가 올바르게 구성되었는지 확인할 수 있습니다. 테스트하려면 LRA/test 주제를 구독하고 invoke/LRAFunction 주제에 게시합니다. Lambda 함수가 예상되는 페이로드를AWS IoT.

  1. 에AWS IoT콘솔 홈 페이지의 왼쪽 창에서테스트.

    
      [] 대화 상자의 왼쪽 창AWS IoT콘솔에서 Test가 강조 표시된 Console
  2. 구독 섹션에서 구독 주제LRA/test를 선택합니다. MQTT 페이로드 디스플레이에서 페이로드를 문자열로 표시를 선택합니다.

  3. 주제 구독을 선택합니다. Lambda 함수가 LRA/test 주제에 게시합니다.

    
      주제 구독이 강조 표시된 구독 페이지
  4. 에서게시섹션에서invoke/LRAFunction를 선택한 다음 를 선택합니다.주제 게시를 사용하여 Lambda 함수를 호출할 수 있습니다. 페이지에 함수의 3개 메시지 페이로드가 표시되면 테스트가 성공한 것입니다.

    
      invoke/LRAFunction topic과 주제 게시가 강조 표시된 구독 페이지 및 메시지 데이터가 포함된 테스트 결과

Lambda 함수로 만든 테스트 파일은/src/LRAtestGreengrass 코어 디바이스에서 디렉토리를 생성합니다. Lambda 함수는/dest/LRAtest디렉터리에서 해당 파일은 Lambda 네임스페이스에서만 볼 수 있습니다. 일반적인 Linux 네임스페이스에서는 이를 볼 수 없습니다. 대상 경로의 모든 변경 사항은 파일 시스템의 소스 경로에 반영됩니다.

문제 해결에 대한 도움말은 AWS IoT Greengrass 문제 해결 단원을 참조하십시오.