公式のaws-cli バージョン2 Dockerイメージを使用していた時に、出力結果のjsonをjqに渡すとParse Errorになるのを調べたメモ

エラー内容

SecretsManagerの結果をjqに渡そうとすると、Invalid numeric literal at line 1, column 2が返ってきます

1
2
$ docker run --rm -ti -v ~/.aws:/root/.aws amazon/aws-cli secretsmanager get-secret-value --secret-id my-secret-name | jq .
parse error: Invalid numeric literal at line 1, column 2

調べた

公式ドキュメントに、 docker run --rm -itとなっているのでそのまま使っていたんですが、 -tオプションを無くすとParseErrorは出なくなります

TTYについてはこちらの記事がとても詳しく参考になります

1
2
3
4
5
// 例: run時に擬似端末を割り当てているかいないかの違い
$ docker run --rm -i alpine tty
not a tty
$ docker run --rm -it alpine tty
/dev/pts/0

対処法

-tをつけずに、aws-cliを実行します

1
2
3
4
5
6
7
8
9
10
11
$ docker run --rm -i -v ~/.aws:/root/.aws amazon/aws-cli secretsmanager get-secret-value --secret-id my-secret-name | jq .
{
"ARN": "arn:aws:secretsmanager:ap-northeast-1:000000000000:secret:my-secret-name-vOPnHx",
"Name": "my-secret-name",
"VersionId": "2851019d-d1a0-41a0-b105-3c311b410da0",
"SecretString": "{\"FOO\":\"bar\"}",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": "2020-09-01T16:20:56.246000+09:00"
}