Closed10
AWS LambdaのログをS3に出力してAthenaでクエリする方法
やりたいこと:
・Lambdaでイベントが発生→ログをFirehoseにputRecord
・Glueのクローラで定期的にETL
・Athenaでクエリ
ログの形式:
const log = {
"operated_at" : "1572539601000",
"mailAddress" : "hogehoge@gmail.com",
"tenant" : "testTenant",
"dataType" : "dataType",
"operationType" : "",
"operationDetail" : "操作の詳細がここに入ります"
}
まずはKinesisで配信ストリームを作成する。
-
ストリーム名を
dev-log-stream
と指定 -
Sourceは
Direct PUT〜
を指定。 -
Encryption typeはUse AWS-owned CMKに
-
特にデータ変換などはなし
-
katoaki-dev-log-stream-bucket
というバケットを作って宛先に指定
-
バッファサイズは最小に、GZIP圧縮、S3 encryptionはEnabled
- 確認してCreate
Createしたらエラー出た・・
何故かストリーム名が漏れていたので、設定して再作成。(dev-log-stream
)
無事ストリームが作成できた。
作成したストリームにログをはいてみる。
app.js
const AWS = require("aws-sdk");
const region = process.env.AWS_REGION || 'ap-northeast-1';
AWS.config.update({ region: region });
const DELIVERY_STREAM_NAME = "dev-log-stream";
const log = {
"operated_at" : "1572539601000",
"mailAddress" : "hkato.bel@gmail.com",
"tenant" : "testTenant",
"dataType" : "dataType",
"operationType" : "",
"operationDetail" : "操作の詳細がここに入ります"
}
// See: https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/writing-with-sdk.html
const params = {
DeliveryStreamName: DELIVERY_STREAM_NAME,
Record: {
Data: JSON.stringify(log)
}
}
const firehose = new AWS.Firehose({apiVersion: '2015-08-04'});
firehose.putRecord(params, function(err, data){
if (err) console.log(err, err.stack);
else console.log(data);
})
$ node app.js
{
RecordId: 'HgovHkx6fkug---',
Encrypted: true
}
出力されてた。
中身は多分見れない。エンコードされているので。
そのためデータの内容まではここではチェックしない。
Glueでクローラを作成する
- クローラの名前:
dev-log-stream-crawler
- Specify crawler source type
- すべてデフォルトのまま
- データストアの追加
- すべてデフォルトのまま
- データストアの追加
- インクルードパス: s3://katoaki-dev-log-stream-bucket
- 他はデフォルトのまま
- 別なデータストアの追加
- すべてデフォルトのまま
- IAM ロールの選択
- IAMロールを作成→
AWSGlueServiceRole-dev-log-stream-bucket
- IAMロールを作成→
- スケジュール
- すべてデフォルトのまま(オンデマンド)
- クローラの出力を設定する
- データベース:dev-log-stream-bucket-db(新規作成したもの)
- データベース:dev-log-stream-bucket-db(新規作成したもの)
作成したクローラを実行しておく
Athenaの設定をする
- Data sourcesを開く
- Connect data sourceを選択
- S3、Glueを選択(デフォルト)してNext
- 「AWS Glue Data Catalog in this account」「Create a crawler in AWS Glue」を選択(デフォルト)してConnect to AWS Glue
Athenaでクエリしてみる。
ログ見れた。
記事化できたのでclose!
→ログをS3に出力してAthenaでクエリする方法
このスクラップは2021/07/13にクローズされました