ssm put-parameterでvalueにURLを指定するとGETされる件

  • 1
    Like
  • 0
    Comment

事象

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しています。もっとエレガントな方法があるのだと思いますが、併せて機能改善も待たれるところです。