CloudWatch LogsのLogStream URLをAWS Lambdaで取得する
Lambdaのエラーレポートなどで、CloudWatch LogsのLogStream URLをSlackに流したいということがあります。 そんなとき、Lambdaの引数contextを使うと便利です。 コード 注意点 […]
広告ここから
広告ここまで
目次
Lambdaのエラーレポートなどで、CloudWatch LogsのLogStream URLをSlackに流したいということがあります。
そんなとき、Lambdaの引数context
を使うと便利です。
コード
import { Handler } from 'aws-lambda'
export const handler: Handler = async (event, _context) => {
const logStreamURL = [
"https://console.aws.amazon.com/cloudwatch/home?region=",
process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION,
"#logsV2:log-groups/log-group/",
encodeURIComponent(_context.logGroupName),
'/log-events/',
encodeURIComponent(_context.logStreamName)
].join('')
return logStreamURL
}
注意点
AWS_REGION
またはAWS_DEFAULT_REGION
の環境変数(Lambdaで実行時にはもとからセットされている)を利用する処理です。そのため、CIやローカルで動かすときにはURLが正しく生成されないことに注意してください。
もっとも、Lambdaで動かしていないならCloudWatch Logsにログが記録されることもありませんので、以下のようにnullを返してしまえばいいともいえます。
import { Context } from 'aws-lambda'
const getLogStreamURL = (context?: Context): string | null => {
const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION
if (!region || !context) return null
const logStreamURL = [
"https://console.aws.amazon.com/cloudwatch/home?region=",
region,
"#logsV2:log-groups/log-group/",
encodeURIComponent(_context.logGroupName),
'/log-events/',
encodeURIComponent(_context.logStreamName)
].join('')
return logStreamURL
}