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

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


## 前提

- AWSアカウントがある
- AWS CLIが利用できる
- 実行可能なLambda関数がある


## コマンド

```console
> 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` オプションを指定しないとログ情報は返ってきません。

```console
# オプションなし
> 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` だけを取得できます。

```console
> aws lambda invoke \
  --function-name [関数名] \
  --log-type Tail \
  outputfile.txt \
  --query 'LogResult'

"U1RBUlQgUmVxdWVzdElkOiA1ZDA1MjIzZi1mZGRjLTQwZmEtYjYzMC02YmM3ZWRkY2JiNTMgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiA1ZDA1MjIzZi1mZGRjLTQwZmEtYjYzMC02YmM3ZWRkY2JiNTMKUkVQT1JUIFJlcXVlc3RJZDogNWQwNTIyM2YtZmRkYy00MGZhLWI2MzAtNmJjN2VkZGNiYjUzCUR1cmF0aW9uOiA3NS4yNyBtcwlCaWxsZWQgRHVyYXRpb246IDEwMCBtcyAJTWVtb3J5IFNpemU6IDEyOCBNQglNYXggTWVtb3J5IFVzZWQ6IDI2IE1CCQo="
```


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

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

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

U1RBUlQgUmVxdWVzdElkOiA2MzcxYjhjYy1lZWU1LTRiMmMtYjliOC0wZjliN2Y1NDZlOTAgVmVyc2lvbjogJExBVEVTVApFTkQgUmVxdWVzdElkOiA2MzcxYjhjYy1lZWU1LTRiMmMtYjliOC0wZjliN2Y1NDZlOTAKUkVQT1JUIFJlcXVlc3RJZDogNjM3MWI4Y2MtZWVlNS00YjJjLWI5YjgtMGY5YjdmNTQ2ZTkwCUR1cmF0aW9uOiAyMi4yNiBtcwlCaWxsZWQgRHVyYXRpb246IDEwMCBtcyAJTWVtb3J5IFNpemU6IDEyOCBNQglNYXggTWVtb3J5IFVzZWQ6IDI2IE1CCQo=
```


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

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

```console
> 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