2020年2月22日土曜日

SSMパラメータストアに日本語の値を登録したら can't encode エラーになった


localstackで試してますが、AWS環境でも同じ現象になります。

SSMパラメータストアに下記のように日本語の値(あいうえお)を登録しました。
$ aws ssm put-parameter --name param01 --value "あいうえお" --type String --overwrite --endpoint http://10.0.0.10:4583 --profile localstack
{
    "Version": 2
}

このパラメータをget-parameter すると下記のエラーになりました。
$ aws ssm get-parameter --name param01 --endpoint http://10.0.0.10:4583 --profile localstack
{
    "Parameter": {
        "Name": "param01",
        "LastModifiedDate": 1582345637.697,
        "Value":
'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)


これは、LANGを設定していなかったことが原因でした。
ロケールを調べて
$ echo $LANG

$ locale -a
C
C.UTF-8
POSIX
en_US.utf8


LANGに C.UTF-8 を設定すると、。
$ export LANG=C.UTF-8
下記のようにエラーが解消しました
$ aws ssm get-parameter --name param01 --endpoint http://10.0.0.10:4583 --profile localstack
{
    "Parameter": {
        "Name": "param01",
        "LastModifiedDate": 1582345637.697,
        "Value": "あいうえお",
        "Version": 2,
        "Type": "String",
        "ARN": "arn:aws:ssm:ap-northeast-1:1234567890:parameter/param01"
    }
}

CはUTF8じゃないのでNGです。
また、ja_JP.UTF-8を指定したいなら locale をインストールする必要があります。

jq も同じ現象になるので、python の仕様なのかもしれない。