Kinesis Firehoseで書込データをバッファリングしてS3にログファイルを出力する
サーバーに物理ログファイルを書くようなイメージでS3にログを出力したいとき、S3はAppend(追記)ができませんが、Kinesis Firehoseを使うことで複数クライアントからの書込データをバッファリングしてS3にファイル出力することができます。
デリバリーストリームを作成
直接データを入れるのでSourceは「Direct Put」、今回は結果をすぐ見たいのでBuffer conditionsは最小にします。
作ったら、テストにマネジメントコンソールからデータを送り込むことができます。
設定が正しければ、しばらくするとS3にファイルが出力されます。
PythonスクリプトからKinesis Firehoseに書き込む
boto3で書き込んでみます。
import boto3
from boto3.session import Session
from datetime import datetime
import json
session = Session(aws_access_key_id='********************',
aws_secret_access_key='****************************************',
region_name='ap-northeast-1')
client = session.client('firehose')
delivery_stream_name = 's3_logging_stream'
def put_record(data):
dt_now = datetime.now()
data['datetime'] = dt_now.strftime('%Y/%m/%d %H:%M:%S')
response = client.put_record(
DeliveryStreamName=delivery_stream_name,
Record={
'Data': (json.dumps(data) + "\n").encode()
}
)
print('RecordId:' + response['RecordId'])
data_list = [
{
'id': 1,
'name': 'hoge',
},
{
'id': 2,
'name': 'fuga',
},
{
'id': 3,
'name': 'piyo',
},
]
for data in data_list:
put_record(data)
こんな感じでログがでました。
{"id": 1, "name": "hoge", "datetime": "2020/07/07 00:19:29"}
{"id": 2, "name": "fuga", "datetime": "2020/07/07 00:19:29"}
{"id": 3, "name": "piyo", "datetime": "2020/07/07 00:19:29"}
ディスカッション
コメント一覧
まだ、コメントがありません