AWS CLI v2 の Docker イメージで JSON が Parse Error になる #AWS #Docker
概要
AWS CLI を Docker Image 使って利用してみたのだが、出力に jq を噛ませたところ parse エラーになった。
出力に制御文字が入り込んでいるみたい?
tty オプションを外してみたら解消された。
動作環境
- Mac OS 10.15.5
- Docker for Mac
- Docker version 19.03.12, build 48a66213fe
- aws-cli/2.0.36 (Docker Image を使用)
AWS CLI のイメージを使う
公式に従って導入する。
認証情報の設定等はこの記事では省略。
下記のような感じでコマンドが叩ければ OK 。
$ docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli --version aws-cli/2.0.36 Python/3.7.3 Linux/4.19.76-linuxkit docker/x86_64.amzn.2
長いので、 alias を設定しておく
alias aws='docker run --rm -it -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'
jq を噛ませると Parse Error が発生する
AWS CLI で iam list-access-keys
を実行する。
JSON 出力した結果を jq に噛ませたら Parse Error になってしまった。
$ aws iam list-access-keys | jq . parse error: Invalid numeric literal at line 1, column 2
一度ファイルに出力して中身を見てみると、制御文字?っぽいものが紛れ込んでいた。
[?1h= {[m "AccessKeyMetadata": [[m {[m "UserName": "xxxxxx",[m "AccessKeyId": "xxxxxx",[m "Status": "Active",[m "CreateDate": "2020-08-01T08:21:24+00:00"[m }[m ][m }[m [K[?1l>
tty オプションを外してみる
色々調べてみたところ、 tty が悪さをしているようで、改行コードが CRLF になっちゃっているみたい?
tty オプションを外してみると、制御文字が入らないようになった。
alias aws='docker run --rm -i -v ~/.aws:/root/.aws -v $(pwd):/aws amazon/aws-cli'
※ -it
を -i
にしている