# 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();
};
2022-08-13
  • server
  • aws

関連記事

robots.txt の書き方
5 分で VPN サーバー立てる! wg-easy の使い方
積水ハウス 個人情報流出 SQL インジェクション攻撃か
ZeroSSL で無料 SSL できるけど Let's Encrypt と比較
ジェネレーティブ AI と大規模言語モデル(LLM)を学ぶためのリソース
XZ Utils 事件対応
Ubuntu で Web サーバーを構築する手順
メールサーバー移行と POP & IMAP 設定
Docker Supervisor 使ってバッチ処理
よく使う WSL コマンド
自宅サーバー構築!  Nextcloud で NAS クラウドストレージ
no such file or directory: /usr/share/zsh/vendor-completions/_docker
oh my zsh 使うべし
AWS Lambda Nodejs で chatwork へ post 送信
AWS SES メール開封確認  DB に集計
Vim 操作とショートカット
DDNS 無料ダイナミック DNS サービス 4 つ
Nginx 基本設定
SPF メール送信なりすまし対策
Windows Mac Linux hosts ファイル場所
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
ディスク容量を確認する df コマンド
Laravel Address already in use の原因
content-security-policy 設定
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Docker の基本的な使い方
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
Shell と Bash のいろいろ
Mac ターミナル SSH 接続設定
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
crontab 設定いろいろ
AWS EC2 の amazon-linux-extras の話
デプロイツール Capistrano
解決! xserver php バージョンアップした時に ssh 環境に反映されない
youtube 見れるように vpn サーバー建ててみた
xserver に vim インストール
xserver に nodejs インストール
レンタルサーバーなら xserver おすすめ理由
Windows10 Home に Docker 入れた時のメモ
Docker command でドッカー練習する時のメモ
Centos7 Webserver 構築の時のメモ