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
출처
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
# 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
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 !!!")
레시피를 쓰는 방법이 대고전. .
accessControl은
aws.greengrass.ipc.mqttproxy
,operations가
aws.greengrass#PublishToIoTCore
resources가 주제 이름입니다.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에 배포하지 않고 로컬로 배포 할 수있는"기능이 있습니다.
RaspberryPisudo /greengrass/v2/bin/greengrass-cli \
--ggcRootPath=/greengrass/v2 \
deployment create \
--recipeDir recipes \
--artifactDir artifacts \
--merge "com.example.HelloWorld=1.0.0"
축하합니다! ! !
Reference
이 문제에 관하여(AWS IoT Greengrass 2.0에서 에지에서 AWS IoT Core로 메시지를 게시해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moritalous/items/d07acc15d0875cb0576e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
sudo /greengrass/v2/bin/greengrass-cli \
--ggcRootPath=/greengrass/v2 \
deployment create \
--recipeDir recipes \
--artifactDir artifacts \
--merge "com.example.HelloWorld=1.0.0"
Reference
이 문제에 관하여(AWS IoT Greengrass 2.0에서 에지에서 AWS IoT Core로 메시지를 게시해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moritalous/items/d07acc15d0875cb0576e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)