2020年2月にAWS CLI v2がリリースされましたね
個人的にはこれまでAWS CLIを使う機会が少なかったこともあり、v1からアップグレードした当初は変化に気付かなかったのですが、数ヶ月使ってみてv1から挙動が変わった点や進歩を感じた点があったのでまとめました。
TL;DR
- すべてのプロファイルでページャを無効にするには環境変数
AWS_PAGER
に空文字をセットする - Lambda実行のペイロードに通常の文字列を渡してエラーになる場合は
cli_binary_format=raw-in-base64-out
を設定する - AWS CLI v2からAWS側のリソース名の入力時にタブ補完が効くようになった
すべてのプロファイルでページャを無効にする
AWS CLI v2では出力が長い場合にクライアント側で指定したページャを出力に使用できるようになったそうです。
デフォルトではOSのデフォルトのページャを使用するとのことですが、個人的にはページャよりターミナルのスクロールで見るが好きなのでページャを無効にします。
ページャを無効にするには、以下のどこかでページャに空文字列を指定すればOKです。
次の方法を優先順に使用して、出力ページャーを指定できます。
- 名前付きプロファイルで config ファイルの cli_pager 設定を使用する。
- AWS_PAGER 環境変数を使用する。
- default プロファイルで config ファイルの cli_pager 設定を使用する。
- PAGER 環境変数を使用する。
ただ、多くのAWSプロファイルを切り替えて作業することが多いと、個々の名前付きプロファイルにいちいち cli_pager=
をセットするのは面倒です。そんな場合は環境変数 AWS_PAGER
に空文字をセットすることで、すべてのプロファイルでページャを無効にできました。
最初defaultプロファイルに cli_pager=
をセットしておけば、名前付きプロファイルの方で未指定の時にいい感じにdefaultの方を見に行ってくれるだろうと思っていたのですが、名前付きプロファイルを使った時はdefaultプロファイルの設定はすべて無視される仕様のようです。
バイナリパラメータをv1と同じく文字列で渡す
AWS CLI v2で、v1の時と同じように aws lambda invoke
のペイロードにJSONの文字列を渡すとエラーが発生してしまいます。(参考. AWS CLI v2にしたらlambda invokeがコケる - Qiita)
これはドキュメントに記載されている通り、バイナリを受け取るパラメータはデフォルトですべてbase64エンコードされた文字列を受け取る仕様に変更されたことが原因です。
v1ではコマンドによって受け取る形式がまちまちだったため統一されたとのことでしたが、シェルから対話的に実行する際にbase64での入力が必要だと扱いづらいですよね。この挙動についてはプロファイルの設定で cli_binary_format=raw-in-base64-out
を追加することでv1と同様の挙動に戻すことができます。
前述のページャのように環境変数で指定することはできないので、設定を適用したいプロファイルが複数ある場合はすべてのプロファイルに同じ設定を追加する必要があります
サーバ側のリソース名に補完が効くようになった
v2リリースのブログ記事に書いてある内容そのままなのですが、AWS側のリソース名をタブで補完できるようになっています。
個人的にはs3のバケット名やディレクトリ(プレフィックス)を補完してくれるようになってものすごく捗りました