아래는 Greengrass에서 들어오는 센서 데이터를 Kinesis Firehose를 이용하여 S3에 저장하는 Python 코드입니다.
python
Copy code
import greengrasssdk
import json
import boto3
client = greengrasssdk.client('iot-data')
firehose = boto3.client('firehose')
s3 = boto3.client('s3')
delivery_stream_name = 'my-delivery-stream'
s3_bucket_name = 'my-s3-bucket'
def lambda_handler(event, context):
# 이벤트에서 센서 데이터를 가져옵니다.
sensor_data = event['sensor_data']
# 센서 데이터를 JSON 문자열로 직렬화합니다.
json_data = json.dumps(sensor_data)
try:
# Kinesis Firehose Delivery Stream으로 데이터를 전송합니다.
response = firehose.put_record(
DeliveryStreamName=delivery_stream_name,
Record={
'Data': json_data
}
)
print("Successfully sent data to Kinesis Firehose")
# S3에 데이터를 저장합니다.
response = s3.put_object(
Bucket=s3_bucket_name,
Key='sensor_data.json',
Body=json_data.encode('utf-8'),
ContentType='application/json'
)
print("Successfully saved data to S3")
except Exception as e:
print("Failed to send data to Kinesis Firehose and save to S3: {}".format(e))
return
위 코드에서는 boto3 모듈을 사용하여 Kinesis Firehose 및 S3 클라이언트를 초기화하고, put_record() 메서드를 사용하여 Kinesis Firehose Delivery Stream으로 데이터를 전송합니다. 그리고 put_object() 메서드를 사용하여 S3에 데이터를 저장합니다.
또한, 이 코드에서는 Greengrass Lambda 함수의 핸들러 함수로 lambda_handler() 함수를 사용하고, 이벤트에서 센서 데이터를 가져오고 JSON 문자열로 직렬화합니다. 이후, try/except 블록을 사용하여 Kinesis Firehose 및 S3에 데이터를 전송하고 저장합니다.
마지막으로, print() 함수를 사용하여 적절한 로그를 출력합니다. 이 코드를 Greengrass Lambda 함수에 배포하여 사용하면, 센서 데이터를 Kinesis Firehose를 이용하여 S3에 쉽게 저장할 수 있습니다.