ハンズオン(簡易版): Lambda基礎 Boto3 (Python SDK)

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

手順の目的 [why]

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

設定値の指定

設定値の指定

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

0. リージョンの指定

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

環境変数の設定:

export AWS_DEFAULT_REGION='ap-northeast-1'

1. CloudWatch Logsロググループ名

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

変数の設定:

LOGS_GROUP_NAME='/aws/lambda/handson-cli-lambda-boto3-ec2-authorize-function'

2. ログイベント数

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

変数の設定:

LOGS_EVENT_MAX_ITEMS='10'

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

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

変数の設定:

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

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

変数の設定:

FILE_LOGS_EVENT_UNIXTIME_START="${DIR_LOGS_EVENT_UNIXTIME}/handson-cli-lambda-boto3-ec2-authorize-function.txt" \
  && echo ${FILE_LOGS_EVENT_UNIXTIME_START}

結果(例):

${HOME}/environment/tmp-handson-cli-lambda/handson-cli-lambda-boto3-ec2-authorize-function.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-boto3-ec2-authorize-function"
       LOGS_GROUP_NAME="${LOGS_GROUP_NAME}"
  # 2. LOGS_EVENT_MAX_ITEMS:"10"
       LOGS_EVENT_MAX_ITEMS="${LOGS_EVENT_MAX_ITEMS}"
  # 3. FILE_LOGS_EVENT_UNIXTIME_START:"${HOME}/environment/tmp-handson-cli-lambda/handson-cli-lambda-boto3-ec2-authorize-function.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-boto3-ec2-authorize-function"
    LOGS_GROUP_NAME="${LOGS_GROUP_NAME}"
  # LOGS_EVENT_MAX_ITEMS:"10"
    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'

結果(例):

[
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "START RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Version: $LATEST\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "## Payload\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "to_port: 80\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "cidr_ip: 192.168.0.8/32\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "ip_protocol: tcp\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "## Create Rule\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "#remaining time\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "1338\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ingestionTime": 16xxxxxxxxxxx,
      "timestamp": 16xxxxxxxxxxx,
      "message": "REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\tDuration: 1668.70 ms\tBilled Duration: 1669 ms\tMemory Size: 128 MB\tMax Memory Used: 83 MB\tInit Duration: 237.08 ms\t\n",
      "eventId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "logStreamName": "2021/03/18/[$LATEST]xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  }
]

完了確認

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

注釈

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

手順の完了