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

元記事はこちら

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