디바이스 섀도우(device shadow)
AWS 왈 'AWS IoT Core에서는 언제든 확인하거나 설정할 수 있도록 연결된 디바이스의 최신 상태를 저장하므로, 애플리케이션에는 디바이스가 언제나 온라인인 것처럼 표시된다. 즉, 디바이스가 연결되어 있지 않아도 애플리케이션에서 디바이스의 상태를 확인할 수 있고, 사용자가 상태를 설정하여 디바이스가 다시 연결될 때 설정한 상태가 구현되도록 할 수있다.'
- AWS IoT에 디바이스 레지스트리와 디바이스 섀도우가 포함되어 있으므로, 클라우드에 표현하고자 하는 임의의 사물을 이름, 일부 속성 및 영구 가상 '섀도우'를 사용하여 등록할 수 있다.
- 현재 상태 정보를 저장하고 검색하는 데 사용되는 JSON 문서
- 사물이나 장치가 인터넷에 연결되어 있는지 여부에 관계없이 해당 상태를 가져오고 설정할 수 있도록 각 사물 또는 장치에 대해 shadow를 만들고 유지할 수 있다
- SDK를 사용하면 하나의 MQTT 연결에서 단일 또는 여러 개의 shadow 인스턴스의 shadow 문서에 대한 작업을 수행할 수 있다.
- 또한, SDK를 사용하면 shadow 작업과 shadow가 아닌 단순 MQTT 작업에 대해 동일한 연결을 사용할 수 있다
1. 전등이 꺼짐
2. 제어장치에서 게시한 명령을 디바이스 섀도우에 전달
3. 전등이 다시 켜질 때, 섀도우와 동기화
AWS greengrass 개발자 가이드1
https://docs.aws.amazon.com/greengrass/v1/developerguide/configs-core.html
Deploy cloud configurations to a Greengrass core device - AWS IoT Greengrass
The deployment status is also displayed below the group's name on the page header.
docs.aws.amazon.com
그저 람다함수를 생성하고 AWS Greengrass Group에 올리는 과정인데
또 안된다..,, 살려줘요 진짜 이러면 람다함수가 어떻게 움직이는지 내가 ㅂ모르잖아...,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
AWS Lambda
람다 함수가 S3, DynamoDB, AWS IoT, Greengrass와 같은 AWS 서비스를 직접 호출할 수 있도록 한다. 그린그래스 람다 함수는 코어가 오프라인일 때 클라우드 서비스와 통신할 수 없다.
람다 함수는 MQTT 메시지를 사용해 구독(subcription)으로 제어되는 publish-subcription 패턴을 사용하여 MQTT 메시지를 주고 받을 수 있다.
- 그룹 내의 디바이스
- 그룹 내의 커넥터(로컬 인프라, 디바이스 프로토콜, AWS 및 기타 클라우드 서비스와 상호작용 할 수 있도록 하는 사전 구축 된 모듈)
- 그룹 내의 다른 람다 함수
- AWS IoT
- 로컬 shadow 디바이스
자습서에 나온 예제
#
# Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# greengrassHelloWorld.py
# Demonstrates a simple publish to a topic using Greengrass core sdk
# This lambda function will retrieve underlying platform information and send
# a hello world message along with the platform information to the topic
# 'hello/world'. The function will sleep for five seconds, then repeat.
# Since the function is long-lived it will run forever when deployed to a
# Greengrass core. The handler will NOT be invoked in our example since
# the we are executing an infinite loop.
# 그린그라스 코어 sdk를 사용해 topic에 간단한 publish를 보여준다
# 이 람다 함수는 기본 플랫폼 정보를 검색하고 hello world 메시지와 함께 topic에 대한 플랫폼 정보를 전송한다
# 이 함수는 5초 동안 슬립하고 반복한다
# 이 함수는 long-lived(긴 수명) 함수여서 그린그래스 코어에 배포될 때 영원히 실행된다.
# 핸들러는 이 예제에서 호출되지 않고 무한루프를 실행하고 있다.
import logging #현재 우리의 프로그램이 어떤 상태를 가지고 있는지 외부출력을 하게 만들어서 눈으로 확인하게 함
import platform #현재 사용하는 시스템 환경에 대한 부분 확인
import sys #파이썬 인터프리터 제어
from threading import Timer
import greengrasssdk #AWS IoT Greengrass Core SDK를 사용하기 위해 가져옴
# Setup logging to stdout 로깅 설정
logger = logging.getLogger(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
# Creating a greengrass core sdk client 그린그라스 코어 SDK 클라이언트 생성
client = greengrasssdk.client("iot-data")
# Retrieving platform information to send from Greengrass Core 그린그라스 코어에서 전송할 플랫폼 정보 검색
my_platform = platform.platform()
# When deployed to a Greengrass core, this code will be executed immediately
# as a long-lived lambda function. The code will enter the infinite while
# loop below.
# If you execute a 'test' on the Lambda Console, this test will fail by
# hitting the execution timeout of three seconds. This is expected as
# this function never returns a result.
# 그린그라스 코어에 배포되면 이 코드가 수명이 긴 람다함수로 즉시 실행될 것
# 이 코드는 아래의 루포 동안 무한대로 들어갈 것
# 람다 콘솔에서 'test'를 실행하면 이 테스트는 3초의 실행 제한 시간에 도달함으로써 실패할 것이다
# 이 함수는 결과를 반환하지 않음이 예상된다
def greengrass_hello_world_run():
try:
if not my_platform: #my_platform이 아닌경우
client.publish(
topic="hello/world", queueFullPolicy="AllOrException", payload="Hello world! Sent from Greengrass Core."
)
#queueFullPolicy : 그린그라스의 대기열이 가득 찼을 때 취할 정책 옵션
# -AllorException : GGC는 등록된 모든 대상에 메시지를 전달하거나 아무에게도 전달하지 않고 예외를 반환
else:
client.publish(
topic="hello/world",
queueFullPolicy="AllOrException",
payload="Hello world! Sent from " "Greengrass Core running on platform: {}".format(my_platform),
)
except Exception as e:
logger.error("Failed to publish message: " + repr(e))
# Asynchronously schedule this function to be run again in 5 seconds 함수가 5초 후에 다시 실행되도록 비동기식으로 예약한다
Timer(5, greengrass_hello_world_run).start()
# Start executing the function above 위의 함수 실행 시작
greengrass_hello_world_run()
# This is a dummy handler and will not be invoked 이것은 더미 핸들러이며 호출되지 않는다
# Instead the code above will be executed in an infinite loop for our example 대신 위의 코드가 이 예제에서 무한루프로 실행된다
def function_handler(event, context):
return
https://base-on.tistory.com/73
(AWS) Lambda, RDS 연결
AWS-Lambda-함수생성 새로 작성-이름 변경 ,룰선택-함수생성 RDS-데이터베이스 생성 MySQL-다음 단계 구성 설정 RDB 정보 입력 확인(메모장에 적어 놓아도 좋다) window-CMD(관리자 권한)- pip install pymy..
base-on.tistory.com
위 블로그에 나온 RDS 연결하는 람다함수 예시
import sys
import logging
import pymysql
def lambda_handler(event, context): #함수 핸들러
#RDS에 연결하는 과정
conn = pymysql.connect(host="[RDS 엔드포인트]", user="dbuser", password="qwer1234", db="web")
#커서 객체 생성
curs = conn.cursor()
#name이 jhc인 곳에 test로부터 모든 칼럼의 데이터를 출력
sql = "select * from test where name='jhc'"
#sql 실행문
curs.execute(sql)
#fetchall() : 레코드를 배열 형식으로 저장해줌
rows = curs.fetchall()
result = 0
#for문으로 데이터들을 하나씩 출력
for row in rows:
result = row[1]
#연결종료
conn.close()
return result
이런 식으로 하면 될듯...?
'AWS' 카테고리의 다른 글
[SageMaker] 모델 배포 (1) | 2022.06.28 |
---|---|
[SageMaker] 모델 훈련 (1) | 2022.06.28 |
[SageMaker] 데이터 세트 다운로드하기 (0) | 2022.06.28 |
[SageMaker] 세이지메이커 시작하기 (0) | 2022.06.28 |
[Greengrass] 엣지 컴퓨팅 (0) | 2022.04.12 |