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 のイメージを使う

docs.aws.amazon.com

公式に従って導入する。

認証情報の設定等はこの記事では省略。

下記のような感じでコマンドが叩ければ 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 CLIiam 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 にしている

参考