事象
CLIを使ってAWSのEC2 Systems Manager Parameter StoreにURLの文字列を格納しようとした場合に以下のようなエラーとなりました。どうやらパラメータURLに対してGETした結果を格納しようとしている様子です。コンソールから手で登録できれば良いのですが、なぜかKMSにある自前のキーを使いたい場合CLI経由で登録する必要があります。
実行したコマンド
aws ssm put-parameter --name test.url --value "https://*****.co.jp" --type SecureString --key-id "****" --region ap-northeast-1
結果
An error occurred (ValidationException) when calling the PutParameter operation: 1 validation error detected: Value '
<!DOCTYPE HTML>
<html lang="ja">
以下略
</html>
' at 'value' failed to satisfy constraint: Member must have length less than or equal to 4096
原因
CLIの仕様で"file://", "fileb://", "http://" 及び "https://" のプレフィックスが付いた場合は自動的にデータをロードしてしまうためです。今回の場合はリモートファイルのURLと判断されて中身を取得しにいってしまったというわけです。
解決法
上記の仕様を使ってURLの文字列をデータとしてロードさせてやればOKです。
url.txt
にURLを書いて保存します。
url.txt
https://*****.co.jp
下記のコマンドを実行
aws ssm put-parameter --name test.url --value "file://url.txt" --type SecureString --key-id "****" --region ap-northeast-1
注意点
この方法で登録はできるのですが、パラメータを読み出した時に改行コードが末尾に付いてくるので注意しましょう。
現在私の環境ではRubyのSDKから読み出した時にいちいちchompしています。もっとエレガントな方法があるのだと思いますが、併せて機能改善も待たれるところです。