AWS IoT Greengrass 2.0에서 에지에서 AWS IoT Core로 메시지를 게시해 보았습니다.

지난번 의 계속입니다.
Greengrass 측에서 실행되는 Python 프로그램에서 AWS IoT Core로 메시지를 게시할 수 있었습니다.

공식 문서가 아직 갖추어지지 않았기 때문에 조금 힘들었습니다.
htps : // / cs. 아 ws. 아마존. 이 m/g 레엔 g 라 s/v2/로 ゔぇぺぺr 굿으로/그래서 rp 로세 s-콧무에 카치온. html #이 pc 이오 t 이것 mq t

환경



하드: Raspberry Pi 4
OS:Raspberry Pi OS(32bit)

디렉토리 구성



RaspberryPi
$ tree 
.
├── artifacts
│   └── com.example.HelloWorld
│       └── 1.0.0
│           ├── hello_world.py
│           └── ipc_utils.py
└── recipes
    └── com.example.HelloWorld-1.0.0.yaml

출처


  • ipc_utils.py

  • 이것은 공식 문서에도 포함되어 있습니다.

    ipc_utils.py
    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    # SPDX-License-Identifier: Apache-2.0
    
    import os
    
    from awscrt.io import (
        ClientBootstrap,
        DefaultHostResolver,
        EventLoopGroup,
        SocketDomain,
        SocketOptions,
    )
    from awsiot.eventstreamrpc import Connection, LifecycleHandler, MessageAmendment
    
    TIMEOUT = 10
    
    
    class IPCUtils:
        def connect(self):
            elg = EventLoopGroup()
            resolver = DefaultHostResolver(elg)
            bootstrap = ClientBootstrap(elg, resolver)
            socket_options = SocketOptions()
            socket_options.domain = SocketDomain.Local
            amender = MessageAmendment.create_static_authtoken_amender(os.getenv("SVCUID"))
            hostname = os.getenv("AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT")
            connection = Connection(
                host_name=hostname,
                port=8033,
                bootstrap=bootstrap,
                socket_options=socket_options,
                connect_message_amender=amender,
            )
            self.lifecycle_handler = LifecycleHandler()
            connect_future = connection.connect(self.lifecycle_handler)
            connect_future.result(TIMEOUT)
            return connection
    
  • hello_world.py

  • Java의 샘플을 참고로, 노력해 보았습니다.

    hello_world.py
    import awsiot.greengrasscoreipc.client as client
    import awsiot.greengrasscoreipc.model as model
    from ipc_utils import IPCUtils
    import json
    
    print("Start Lambda !!!")
    
    ipc_utils = IPCUtils()
    connection = ipc_utils.connect()
    ipc_client = client.GreengrassCoreIPCClient(connection)
    
    message = {"hello": "world"}
    message = json.dumps(message).encode('utf-8')
    
    request = ipc_client.new_publish_to_iot_core()
    
    publishMessage = model.PublishToIoTCoreRequest(topic_name='test/topic', qos='1', payload=message)
    
    future = request.activate(publishMessage)
    result = future.result(timeout=10.0)
    
    print("Finish Lambda !!!")
    
  • com.example.HelloWorld-1.0.0.yaml

  • 레시피를 쓰는 방법이 대고전. .

    accessControl은 aws.greengrass.ipc.mqttproxy,
    operations가 aws.greengrass#PublishToIoTCoreresources가 주제 이름입니다.
    Greengrass 1.0 무렵의 구독 이미지입니다.

    com.example.HelloWorld-1.0.0.yaml
    ---
    RecipeFormatVersion: '2020-01-25'
    ComponentName: com.example.HelloWorld
    ComponentVersion: '1.0.0'
    ComponentDescription: A component that publishes messages.
    ComponentPublisher: Amazon
    ComponentConfiguration:
      DefaultConfiguration:
        accessControl:
          aws.greengrass.ipc.mqttproxy:
            "com.example.HelloWorld:pubsub:1":
              policyDescription: Allows access to publish to test/topic.
              operations:
                - "aws.greengrass#PublishToIoTCore"
              resources:
                - "test/topic"
    Manifests:
      - Lifecycle:
          Install:
            Timeout: 1000
            Script: pip3 install awsiotsdk
          Run: |
            python3 {artifacts:path}/hello_world.py
    

    배포



    Greengrass 2.0의 특징은 "Lambda에 배포하지 않고 로컬로 배포 할 수있는"기능이 있습니다.

    RaspberryPi
    sudo /greengrass/v2/bin/greengrass-cli \
        --ggcRootPath=/greengrass/v2 \
        deployment create \
        --recipeDir recipes \
        --artifactDir artifacts \
        --merge "com.example.HelloWorld=1.0.0"
    



    축하합니다! ! !

    좋은 웹페이지 즐겨찾기