AWS cloudwatchlogsのサブスクリプションフィルターのlambdaテスト
AWSのcloudwatchlogsのサブスクリプションフィルターから呼び出されるlambdaをテストするときにやりにくかったのでメモ。
- 本家マニュアルのお言葉
サブスクリプションフィルタを介して宛先サービスに送信されるログは、Base64 でエンコードされ、gzip 形式で圧縮されます。
- lambdaでテストするときに出てくるcloudwatchlogsの形式
{ "awslogs": { "data": "BASE64ENCODED_GZIP_COMPRESSED_DATA" } }
gzipした後にbase64でエンコーディングする。messageの箇所にエラーメッセージを入れる。
require 'base64' require 'zlib' str = <<JSON {"messageType":"DATA_MESSAGE","owner":"123456789123","logGroup":"testLogGroup","logStream":"testLogStream","subscriptionFilters":["testFilter"],"logEvents":[{"id":"eventId1","timestamp":1440442987000,"message":"hogehogeエラーメッセージ"}]} JSON # gzip作成 Zlib::GzipWriter.open('./gzip/gzip.gz') {|gz| gz.write str } # base64でエンコード cloudwatchlogs_params = Base64.encode64(File.read('./gzip/gzip.gz')) p cloudwatchlogs_params
- dataに標準出力された値を入力してテストデータを作成
{ "awslogs": { "data": "H4sIAJTHuWAAA0VPOwrCQBDtPcbUKRJdjdoFjCJoFTsRiTrEhSQbdldFgk32\nJHZ6A0FvsxdxEhWLgffjzUwJGSoVJ7g4FwhDGAWLYD0PoyiYhOCAOOUoSfba\nHdbt+f0BAZJTkUykOBTkaFR69qONE2mJcfa3vtwBddioreSF5iIf81SjVDBc\nNrEPhVVTEB4x17VVAt9RD9Z8uvOoQnM6V8cZbfYYcxlrD/q+67rO7w2K70WC\n9djqZs3dmpc1V2uMrZ41rh5wWV1ab4fCX2T4AAAA\n" } }