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