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

3.3. 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='15'

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-payload.txt" \
  && echo ${FILE_LOGS_EVENT_UNIXTIME_START}

結果(例):

${HOME}/environment/tmp-handson-cli-lambda/handson-cli-lambda-function_basic-function-payload.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:"15"
       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-payload.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:"15"
    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": 1610685817897,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t## ENVIRONMENT VARIABLES\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\tenviron({'AWS_LAMBDA_FUNCTION_VERSION': '$LATEST', 'AWS_SESSION_TOKEN': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=', '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': '\\ |AWS_DEFAULT_REGION|\\ ', 'PWD': '/var/task', 'AWS_SECRET_ACCESS_KEY': '/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'LANG': 'en_US.UTF-8', 'LAMBDA_RUNTIME_DIR': '/var/runtime', 'AWS_LAMBDA_INITIALIZATION_TYPE': 'on-demand', 'TZ': ':UTC', 'AWS_REGION': '\\ |AWS_DEFAULT_REGION|\\ ', 'AWS_ACCESS_KEY_ID': 'ASIAXXXXXXXXXXXXXXXXX', '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-xxxxxxxxxxxxxxxxxxxxxxxx;Parent=xxxxxxxxxxxxxxxx;Sampled=0'})\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t## EVENT\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t## CONTEXT\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\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:\\ |AWS_DEFAULT_REGION|\\ :\\ |AWS_ID|\\ :function:handson-cli-lambda-function_basic-function', 'client_context': None, 'identity': <__main__.CognitoIdentity object at 0x7xxxxxxxxxxxx>, '_epoch_deadline_time_in_ms': xxxxxxxxxxxxx}\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t## PAYLOAD(key1)\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\tvalue1\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t## ENV\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\tdevelop environment\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\txxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\\t## REMAINING TIME (ms)\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    },
    {
        "logStreamName": "2021/01/15/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "timestamp": xxxxxxxxxxxxx,
        "message": "[INFO]\\t\\ |today|\\ T01:23:45.792Z\\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: 1.65 ms\\tBilled Duration: 2 ms\\tMemory Size: 128 MB\\tMax Memory Used: 52 MB\\tInit Duration: 120.00 ms\\t\\n",
        "ingestionTime": xxxxxxxxxxxxx,
        "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

完了確認

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

注釈

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

手順の完了