# AWS CloudWatch ログ監視で Lambda 処理
AWS Lambda(ラムダ) は、サーバーレスでイベント駆動型のコンピューティングサービスです。OS 管理が不要なため、プログラム準備するだけで実行できます。
AWS Lambda、Azure Functions、Google Cloud Functions この 3 つのサービスは同じ内容です。
Lambda サポート言語
- Node.js
- Python
- Ruby
- Go
- Java
- PowerShell
- C#
これ以外の言語を使用する場合は、カスタムランタイムという機能を使用して実装可能
# Lambda のメリット デメリット
メリット
- OS やプラットフォームの管理が不要
- セキュリティ対応のコストが少ない
- コードが実行される時間 1 ミリ秒ごとに課金
- 複数の処理を受けると自動的にインスタンス立ち上げ対応
- SQS や SNS、Cloudwath など AWS のサービスと連携できる
デメリット
- フレームワークが使えない
- Lambda のライフサイクル自体が最大で 15 分のみ
AWS Lambda のライフサイクル自体は15 分で 15 分過ぎると強制的にシャットダウンします。
Lambda は 非同期で一時的に本サーバーと別の処理 cloudwatch 定期処理、ファイル定期的に処理などのバッチ処理や webhook 系の処理に適している感じがします。
# Lambda から Cloudwatch ログ監視
CloudWatch Logs は、ログデータが含まれたイベントを使用して、関数を非同期的に呼び出します。データフィールドの値は Base64 でエンコードされた .gzip ファイルアーカイブです。
AWS Lambda 関数がイベントの処理を終了すると、Lambda は呼び出しに関するメトリクスを Amazon CloudWatch に送信します。これらのメトリクスについては料金は発生しません。
SNS 経由でやることもできますが、Lambda でトリガーを Cloudwatch を選択することができるので、ひと手間省けます。
nodejs
const https = require("https");
const querystring = require("querystring");
const zlib = require("zlib");
const host = "localhost.com";
const path = "/api/post_data";
exports.handler = function (event, context) {
console.log("Event.awslogs: ", event.awslogs);
const payload = Buffer.from(event.awslogs.data, "base64");
const parsed = JSON.parse(zlib.gunzipSync(payload).toString("utf8"));
var postMessage = JSON.stringify(parsed);
var post_data = querystring.stringify({ body: postMessage });
let options = {
host: host,
path: path,
headers: {
"Content-Type": "application/json",
},
method: "POST",
};
var post_req = https.request(options, function (res) {
res.setEncoding("utf8");
res.on("data", function (chunk) {
console.log("Response: " + chunk);
context.succeed();
});
res.on("error", function (e) {
console.log("Error: " + e.message);
context.done(null, "FAILURE");
});
});
post_req.write(post_data);
post_req.end();
};