AWS LambdaでAWS CLIからさくっとInvokeしてログを確認する方法

AWS CLIからLambda関数を実行できるのですが、ログ出力するのに若干手間だったので方法をまとめておきます。


前提


  • AWSアカウントがある

  • AWS CLIが利用できる

  • 実行可能なLambda関数がある


コマンド

> aws lambda invoke \

--function-name [関数名] \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D

START RequestId: 3c531c8f-d0f9-4e9d-96de-0d1018f0746d Version: $LATEST
END RequestId: 3c531c8f-d0f9-4e9d-96de-0d1018f0746d
REPORT RequestId: 3c531c8f-d0f9-4e9d-96de-0d1018f0746d Duration: 130.82 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 25 MB


ポイント


--log-type Tail でログ取得

--log-type Tail オプションを指定しないとログ情報は返ってきません。

# オプションなし

> aws lambda invoke \
--function-name [関数名] \
outputfile.txt

{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}

# オプションあり
> aws lambda invoke \
--function-name [関数名] \
--log-type Tail \
outputfile.txt

{
"StatusCode": 200,
"LogResult": "U1RBUlQgUmVxdWVzdElkOiA1ZDA1MjIzZi1mZGRjLTQwZmEtYjYzMC02YmM3ZWRkY2JiNTMgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiA1ZDA1MjIzZi1mZGRjLTQwZmEtYjYzMC02YmM3ZWRkY2JiNTMKUkVQT1JUIFJlcXVlc3RJZDogNWQwNTIyM2YtZmRkYy00MGZhLWI2MzAtNmJjN2VkZGNiYjUzCUR1cmF0aW9uOiA3NS4yNyBtcwlCaWxsZWQgRHVyYXRpb246IDEwMCBtcyAJTWVtb3J5IFNpemU6IDEyOCBNQglNYXggTWVtb3J5IFVzZWQ6IDI2IE1CCQo=",
"ExecutedVersion": "$LATEST"
}


--query で絞り込む

--query で戻り値のJsonのうちLogResult だけを取得できます。

> aws lambda invoke \

--function-name [関数名] \
--log-type Tail \
outputfile.txt \
--query 'LogResult'

"U1RBUlQgUmVxdWVzdElkOiA1ZDA1MjIzZi1mZGRjLTQwZmEtYjYzMC02YmM3ZWRkY2JiNTMgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiA1ZDA1MjIzZi1mZGRjLTQwZmEtYjYzMC02YmM3ZWRkY2JiNTMKUkVQT1JUIFJlcXVlc3RJZDogNWQwNTIyM2YtZmRkYy00MGZhLWI2MzAtNmJjN2VkZGNiYjUzCUR1cmF0aW9uOiA3NS4yNyBtcwlCaWxsZWQgRHVyYXRpb246IDEwMCBtcyAJTWVtb3J5IFNpemU6IDEyOCBNQglNYXggTWVtb3J5IFVzZWQ6IDI2IE1CCQo="


tr -d '"' コマンドでダブルクオーテーションを取り除く

ダブルクオーテーションが含まれているとデコードできないので、取り除きます。

aws lambda invoke \

--function-name [関数名] \
--log-type Tail \
outputfile.txt \
--query 'LogResult' \
| tr -d '"'

U1RBUlQgUmVxdWVzdElkOiA2MzcxYjhjYy1lZWU1LTRiMmMtYjliOC0wZjliN2Y1NDZlOTAgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiA2MzcxYjhjYy1lZWU1LTRiMmMtYjliOC0wZjliN2Y1NDZlOTAKUkVQT1JUIFJlcXVlc3RJZDogNjM3MWI4Y2MtZWVlNS00YjJjLWI5YjgtMGY5YjdmNTQ2ZTkwCUR1cmF0aW9uOiAyMi4yNiBtcwlCaWxsZWQgRHVyYXRpb246IDEwMCBtcyAJTWVtb3J5IFNpemU6IDEyOCBNQglNYXggTWVtb3J5IFVzZWQ6IDI2IE1CCQo=


base64 -D コマンドでデコードする

最後にbase64 -D コマンドでデコードすればログが確認できます。

> aws lambda invoke \

--function-name [関数名] \
--log-type Tail \
outputfile.txt \
--query 'LogResult' | tr -d '"' | base64 -D

START RequestId: 3c531c8f-d0f9-4e9d-96de-0d1018f0746d Version: $LATEST
END RequestId: 3c531c8f-d0f9-4e9d-96de-0d1018f0746d
REPORT RequestId: 3c531c8f-d0f9-4e9d-96de-0d1018f0746d Duration: 130.82 ms Billed Duration: 200 ms Memory Size: 128 MB Max Memory Used: 25 MB


まとめ

さくっとLamnda関数を実行して結果を確認したいときに使えそうです。


参考

AWS Command Line Interface での AWS Lambda の使用 - AWS Lambda

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-userapp.html

invoke — AWS CLI 1.16.182 Command Reference

https://docs.aws.amazon.com/cli/latest/reference/lambda/invoke.html

base64 コマンド | コマンドの使い方(Linux) | hydroculのメモ

https://hydrocul.github.io/wiki/commands/base64.html