ハンズオン(簡易版): Lambda基礎 関数(Python)

2.2. CloudWatch Logsログイベントの取得 (ログフィルター: /aws/lambda/handson-cli-lambda-function_basic-function)

手順の目的 [why]

CloudWatch Logsロググループ"/aws/lambda/handson-cli-lambda-function_basic-function"からログフィルターを利用してログイベントを取得します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

0. リージョンの指定

リージョンを指定します。

環境変数の設定

export AWS_DEFAULT_REGION='ap-northeast-1'

1. CloudWatch Logsロググループ名

CloudWatch Logsロググループ名を指定します。

変数の設定:

LOGS_GROUP_NAME='/aws/lambda/handson-cli-lambda-function_basic-function'

2. ログイベント数

取得するログイベント数を指定します。

変数の設定:

LOGS_EVENT_MAX_ITEMS='14'

3. タイムスタンプ保存ファイル名

タイムスタンプ保存用ディレクトリ名を指定します。

変数の設定:

DIR_LOGS_EVENT_UNIXTIME="${HOME}/environment/tmp-handson-cli-lambda"

タイムスタンプ保存ファイル名を指定します。

変数の設定:

FILE_LOGS_EVENT_UNIXTIME_START="${DIR_LOGS_EVENT_UNIXTIME}/handson-cli-lambda-function_basic-function-1.txt" \
  && echo ${FILE_LOGS_EVENT_UNIXTIME_START}

結果(例):

${HOME}/environment/tmp-handson-cli-lambda/handson-cli-lambda-function_basic-function-1.txt

設定値の確認

各変数に正しい設定値が格納されていることを確認しながら保存します。

変数の確認:

cat << END

  # 0. AWS_DEFAULT_REGION:"ap-northeast-1"
       AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 1. LOGS_GROUP_NAME:"/aws/lambda/handson-cli-lambda-function_basic-function"
       LOGS_GROUP_NAME="${LOGS_GROUP_NAME}"
  # 2. LOGS_EVENT_MAX_ITEMS:"14"
       LOGS_EVENT_MAX_ITEMS="${LOGS_EVENT_MAX_ITEMS}"
  # 3. FILE_LOGS_EVENT_UNIXTIME_START:"${HOME}/environment/tmp-handson-cli-lambda/handson-cli-lambda-function_basic-function-1.txt"
       FILE_LOGS_EVENT_UNIXTIME_START="${FILE_LOGS_EVENT_UNIXTIME_START}"

END

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

イベント開始時刻のタイムスタンプを取得します。

変数の設定:

LOGS_EVENT_TIME_START=$( \
  cat ${FILE_LOGS_EVENT_UNIXTIME_START} \
) \
  && echo ${LOGS_EVENT_TIME_START}

結果(例):

16xxxxxxxx

ログフィルターを利用してCloudWatch Logsログイベントを取得します。

変数の確認:

cat << END

  # LOGS_GROUP_NAME:"/aws/lambda/handson-cli-lambda-function_basic-function"
    LOGS_GROUP_NAME="${LOGS_GROUP_NAME}"
  # LOGS_EVENT_MAX_ITEMS:"14"
    LOGS_EVENT_MAX_ITEMS="${LOGS_EVENT_MAX_ITEMS}"
  # LOGS_EVENT_TIME_START:"16xxxxxxxx"
    LOGS_EVENT_TIME_START="${LOGS_EVENT_TIME_START}"

END

コマンド:

aws logs filter-log-events \
  --log-group-name ${LOGS_GROUP_NAME} \
  --max-items ${LOGS_EVENT_MAX_ITEMS} \
  --start-time ${LOGS_EVENT_TIME_START}000 \
  --query 'events'

結果(例):

[
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "START RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Version: $LATEST\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t## ENVIRONMENT VARIABLES\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\tenviron({'AWS_LAMBDA_FUNCTION_VERSION': '$LATEST', 'AWS_SESSION_TOKEN': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=', 'LD_LIBRARY_PATH': '/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib', 'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/handson-cli-lambda-function_basic-function', 'LAMBDA_TASK_ROOT': '/var/task', 'AWS_LAMBDA_RUNTIME_API': '127.0.0.1:9001', 'AWS_LAMBDA_LOG_STREAM_NAME': '2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'AWS_EXECUTION_ENV': 'AWS_Lambda_python3.8', 'AWS_XRAY_DAEMON_ADDRESS': '169.254.79.2:2000', 'AWS_LAMBDA_FUNCTION_NAME': 'handson-cli-lambda-function_basic-function', 'PATH': '/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin', 'AWS_DEFAULT_REGION': 'ap-northeast-1', 'PWD': '/var/task', 'AWS_SECRET_ACCESS_KEY': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'LANG': 'en_US.UTF-8', 'LAMBDA_RUNTIME_DIR': '/var/runtime', 'AWS_LAMBDA_INITIALIZATION_TYPE': 'on-demand', 'AWS_REGION': 'ap-northeast-1', 'TZ': ':UTC', 'AWS_ACCESS_KEY_ID': 'ASIAXXXXXXXXXXXXXXXX', 'SHLVL': '0', '_AWS_XRAY_DAEMON_ADDRESS': '169.254.79.2', '_AWS_XRAY_DAEMON_PORT': '2000', 'AWS_XRAY_CONTEXT_MISSING': 'LOG_ERROR', '_HANDLER': 'handson-cli-lambda-function_basic-function.lambda_handler', 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE': '128', 'PYTHONPATH': '/var/runtime', '_X_AMZN_TRACE_ID': 'Root=1-xxxxxxxx-xxxxxxxxxxxxxx;Parent=xxxxxxxxxxxxxxxx;Sampled=0'})\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t## EVENT\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t{}\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t## CONTEXT\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t{'aws_request_id': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'log_group_name': '/aws/lambda/handson-cli-lambda-function_basic-function', 'log_stream_name': '2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'function_name': 'handson-cli-lambda-function_basic-function', 'memory_limit_in_mb': '128', 'function_version': '$LATEST', 'invoked_function_arn': 'arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:handson-cli-lambda-function_basic-function', 'client_context': None, 'identity': <__main__.CognitoIdentity object at 0xXXXXXXXXXXXX>, '_epoch_deadline_time_in_ms': xxxxxxxxxxxxx}\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t## ENV\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\tdevelop environment\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t## REMAINING TIME (ms)\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\t2021-01-15T01:23:45.678Z\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\t2999\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\tDuration: 20.21 ms\tBilled Duration: 21 ms\tMemory Size: 128 MB\tMax Memory Used: 52 MB\tInit Duration: 142.19 ms\t\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

完了確認

「CloudWatch Logsロググループ"/aws/lambda/handson-cli-lambda-function_basic-function"にログイベントが存在する。」ことを確認します。

注釈

主処理で取得できていればOKです。

手順の完了