
何をしたかったのか
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
以外にもググってすぐに答えが探し出せずに悩みました。