きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

日本語を含むCloudFormtionテンプレート

Windows上でAWS CLI V2を使って
aws cloudformation create-stackする時に
日本語を含むテンプレートが読み込めずにエラーになると相談されたので、夜中まで調べた。

相談の際に引用されたURLはこれだった。
CloudFormationに日本語コメントを含めるとエラーになる場合の解決方法 | LaptrinhX

ちなみに例外の箇所はここだ。
aws-cli/paramfile.py at 96359d999dffc0357eaba4d150f2ffe4d2a68ce7 · aws/aws-cli · GitHub

こんなメッセージがでる。
Unable to load paramfile (%s), text contents could not be decoded. If this is a binary file, please use the fileb:// prefix instead of the file:// prefix.


それでは私の結論を言おう。
AWS CLI V2の新しめのやつなら出来るよ。

AWS_CLI_FILE_ENCODING環境変数を使う。

AWS CLI を設定する環境変数 - AWS Command Line Interface

[v2] Add support for AWS_CLI_FILE_ENCODING environment variable to cloudformation and eks customizations by vz10 · Pull Request #5304 · aws/aws-cli · GitHub

確かに、PyIntallerで作ってると、sysがfrozenになる(変更できない)とかで、PYTHONUTF8などは効かなくなるようだ。素のままのgithub上のコードであれば、bin/aws.cmdを書き換えれば、-X utf8を与えられるだろうが、PyInstallerで作られたものでは、この手のスクリプト類がなくなって出来ない。PyInstallerのspecでbin/awsを指定してる箇所があるので、もしかしたらLC_CTYPEは効くかなと試したがダメだった。

AWS_CLI_FILE_ENCODING環境変数が出来たのは、2.0.13かららしいが、CloudFormationで使えるようになったのは2.0.24かららしい。(2020年6月19日リリース)
Unable to load file:// with non-English char in UTF-8 encoding on Windows · Issue #5086 · aws/aws-cli · GitHub

まあ、日本語で登録できるけど、AWSコンソールで日本語が化けるところは多い。化けないところもある。AWSコンソールがUTF-8に対応できてないってだけ。