この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
サーモン大好き、横山です。
今回AWS CLIでAWS Lambdaのログを見ようとした時に注意したいことを紹介します。
動作環境
awscliのバージョン
$ aws --version
aws-cli/1.10.13 Python/2.7.10 Darwin/15.3.0 botocore/1.4.4
AWS Lambdaのロググループ名
$ aws logs describe-log-groups --log-group-name-prefix "/aws/lambda/demo_func"
{
"logGroups": [
{
"logGroupName": "/aws/lambda/demo_func",
"creationTime": 1458178522834,
"metricFilterCount": 0,
"arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/demo_func:*",
"storedBytes": 0
}
]
}
ログストリーム名
$ aws logs describe-log-streams --log-group-name "/aws/lambda/demo_func"
{
"logStreams": [
{
"logStreamName": "2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8",
"creationTime": 1458178522897,
"firstEventTimestamp": 1458178523415,
"lastEventTimestamp": 1458178523416,
"lastIngestionTime": 1458178538472,
"uploadSequenceToken": "49559729142106341411281184713470750416950415093793817186",
"arn": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/demo_func:log-stream:2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8",
"storedBytes": 0
}
]
}
嵌った事象
aws logs get-log-events
にて、上記で確認した --log-stream-name
を指定しているのに A client error (ResourceNotFoundException) occurred when calling the GetLogEvents operation: The specified log stream does not exist.
と言われて取得出来ません。
$ aws logs get-log-events --log-group-name "/aws/lambda/demo_func" --log-stream-name "2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8"
A client error (ResourceNotFoundException) occurred when calling the GetLogEvents operation: The specified log stream does not exist.
解決方法
--log-stream-name
の引数を ' (シングルクォート)
で囲みます。
$ aws logs get-log-events --log-group-name "/aws/lambda/demo_func" --log-stream-name '2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8'
{
"events": [
{
"timestamp": 1458178523415,
"message": "Loading function\n",
"ingestionTime": 1458178538472
},
{
"timestamp": 1458178523416,
"message": "START RequestId: 83c27942-xxxx-xxxx-xxxx-dbdce3a50da1 Version: $LATEST\n",
"ingestionTime": 1458178538472
},
{
"timestamp": 1458178523416,
"message": "value1 = value1\n",
"ingestionTime": 1458178538472
},
{
"timestamp": 1458178523416,
"message": "value2 = value2\n",
"ingestionTime": 1458178538472
},
{
"timestamp": 1458178523416,
"message": "value3 = value3\n",
"ingestionTime": 1458178538472
},
{
"timestamp": 1458178523416,
"message": "END RequestId: 83c27942-xxxx-xxxx-xxxx-dbdce3a50da1\n",
"ingestionTime": 1458178538472
},
{
"timestamp": 1458178523416,
"message": "REPORT RequestId: 83c27942-xxxx-xxxx-xxxx-dbdce3a50da1\tDuration: 0.29 ms\tBilled Duration: 100 ms \tMemory Size: 128 MB\tMax Memory Used: 24 MB\t\n",
"ingestionTime": 1458178538472
}
],
"nextForwardToken": "f/32518467704669835827145742534200547013545637961089351686",
"nextBackwardToken": "b/32518467704647535081947211911059011295272989599583371264"
}
理由としては $LATEST
がshellの変数として展開してしまい最終的に、 2016/03/17/[]bab17ccf7d53463c83ff9490ab86bca8
として --log-stream-name
の引数として渡していたものと考えられます。
$ echo "2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8"
2016/03/17/[]bab17ccf7d53463c83ff9490ab86bca8
$ echo '2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8'
2016/03/17/[$LATEST]bab17ccf7d53463c83ff9490ab86bca8
まとめ
AWS CLIを使ってAWS Lambdaのログを取得するときの参考になれば幸いです。