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

  • 0
    いいね
  • 0
    コメント

    事象

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