#概要(追記)
AWSのCloudWatch Logsにエラーが出力された際、通知がされるようしたいと考えております。
通知の際に出力された文字が解読出来ず困っています。
#実際のコード
処理コード
TypeScript
1import {CloudWatchLogsEvent} from 'aws-lambda'; 2import zlib from 'zlib' 3 4export const handler=async(event:CloudWatchLogsEvent, context:any)=>{ 5 const payload = Buffer.from(event.awslogs.data, 'base64') 6 zlib.gunzip(payload, function(e, result) { 7 if (e) { 8 context.fail(e); 9 throw new Error(e.message) 10 } else { 11 const parsed = result.toString('ascii') 12 const obj = JSON.parse(parsed) // 失敗します。 13 const message = obj.logEvents.map(({extractedFields}:any) => extractedFields.event).join('\n') 14 console.log(`メッセージ:${message}`) 15 // await postSlack(message) 16 context.succeed(); 17 } 18 }); 19}
インプット
JSON
1{ 2 "awslogs": { 3 "data": "H4sIAAAAAAAAADVQy0rEMBT9l+DS2tzkJk1mN2BHxCe0qOgMkrYZLUzbIY2KiuC4dS0u/Qpx588Mgp9hfG0ul3O459xzbklj+96c2fx6bsmArA/z4elOmmXDjZSsku6qtS7AwLVkIJgGjgGedWcbrruYByY2V308M01Rmbg3TTTqXOpc5w6NL8+j/Zv66OYgPc+20q3fu8w7a5pwyCiDmIo4zJOV7WGeZvmkRF4UzHCcUos4ZTqxVVExVIUx3NoqSPQXRV+6eu7rrh3VM29dTwYnpG6nHZn8OKSXtvXf4C2pq2DEJYTfNWVUJoKBlCiVRi651omgQiRMACIKShVIZMAgCTxCMPN1aMebJgT91hBSydAATVb/W/vLEVERMcgpHyAOBKxxKo/HPjhxgQoiZqiKUIdN4bSMEqUg0QKxBBj7zd3R3th/vr59PD4tF8/LxfvPfFneP4xbcje5+wJbHB2fowEAAA==" 4 } 5}
出力結果
"{\"messageType\":\"DATA_MESSAGE\",\"owner\":\"139621529134\",\"logGroup\":\"/aws/lambda/sam-ForErrorWatch-PziXzVEhSKEK\",\"logStream\":\"2021/05/21/[$LATEST]c43bb2a34f0e44f297edbd248baa3eed\",\"subscriptionFilters\":[\"info\"],\"logEvents\":[{\"id\":\"36162190206752166468943639975055725144450081642121789441\",\"timestamp\":1621568691307,\"message\":\"2021-05-21T03:44:51.306Z\t66435481-2a08-4981-84fc-788179544c11\tINFO\th57e\u000b\u0015c\u0001\u0017c\u0001>c\u0001\u0017c\u0001\u001fc\u0000\u0002\n\"}]}"
上記のmessageの部分を整形して解読したいのですが出来ません。
またこの出力結果はJSON.parseで失敗します、
#備考
この処理コードはAWS公式に載っているコードコピーしてきました。
下記は実際に載っているコードです。
var zlib = require('zlib'); exports.handler = function(input, context) { var payload = Buffer.from(input.awslogs.data, 'base64'); zlib.gunzip(payload, function(e, result) { if (e) { context.fail(e); } else { result = JSON.parse(result.toString('ascii')); console.log("Event Data:", JSON.stringify(result, null, 2)); context.succeed(); } }); };
#質問
元となるLambda関数で日本語でログが出力されようにしています。
console.log('起動しました')
今回はテストなので、このコードが出力されると検知し、通知されるようにしているのですが、日本語でログを出すのが駄目なんでしょうか?
回答1件
あなたの回答
tips
プレビュー