エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

AWS CLIバージョン2を使いだしたらlambda invokeが出来なくなった話

f:id:tansantktk:20201120002649p:plain

何をしたかったのか

macOSから下記のようなシェルスクリプトでLambda関数を実行しようとしたのですが、 AWS CLIのバージョンを1から2にアップデートしたところ、突如としてエラーを吐くようになってしまいました。

aws lambda invoke --invocation-type Event \
          --function-name HogeFugaLambdaFunction \
          --region ap-northeast-1 \
          --payload '{ "hoge": "fuga" }' \
          --log-type Tail \
          outputfile.txt

何故動かなかったのか

AWS CLI バージョン 2 はデフォルトで base64 エンコードされた文字列としてバイナリパラメータを渡すようになりました docs.aws.amazon.com

AWS公式からしっかりアナウンスされていました。

今まではLambdaへ渡すjsonは単純に文字列指定していたのですが、base64エンコードが必要になったようです。

修正後

macOSでbase64エンコードする場合はecho '******' | base64を実行します。

aws lambda invoke --invocation-type Event \
          --function-name HogeFugaLambdaFunction \
          --region ap-northeast-1 \
          --payload $(echo '{ "hoge": "fuga" }' | base64) \
          --log-type Tail \
          outputfile.txt

他の手段

~/.aws/config ファイルに追記する

configファイルに追記することで、AWS CLIをバージョン1の挙動に戻すことが可能です。

~/.aws/config

cli_binary_format=raw-in-base64-out

コマンドに追記する

実行するコマンドに下記を付与して、AWS CLIをバージョン1の挙動に戻すこともできるようです。

--cli-binary-format raw-in-base64-out

以外にもググってすぐに答えが探し出せずに悩みました。