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
    }

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark