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