AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Parameter Store から値を取って環境変数に入れているがまあ遅い

環境変数になんらかの値を入れたいがどこで保持するんだ、インスタンス直接書いてると冪等性が確保できないだろ」

みたいな話に対して、 AWS の Paramter Store を利用する (暗号化キーなどは Secure String にする) ことで解決を図っているんだけど、まあこれが遅い。 bashrc とかに書こうものなら ssh など使う環境ではだいぶ待たされる。

ちなみに例としては以下のようにしている。

export PROJECT_ID=$(aws ssm get-parameters --with-decryption --name 'PROJECT_ID' | jq -r '.Parameters[].Value')

案件ごとに prefix とか suffix つけたり、単一用途で契約しているアカウント ID なら上記のように生で書いたりしている。 まあこれが 20 個も 30 個も続くとバチクソに遅くて、流石に運用はじめてそろそろ 10 年近いのでみんな何も言わなくなったけど、当初は大変だったな〜、と思い返していた。

で、まあ早くできんのかこれ? と時たま調べているのだけど、以下のように 「json で一気に取得しろ」という回答があった。

stackoverflow.com

書き込みを見る限りでは単体で取得しようと、まとめて取得しようと代わりはないので、あとはスクリプトを bashrc の先頭などで読み込ませて展開しろ、という風情でいいんじゃないかなと思いちょっとやっている。

ここまで書いて思い出したけど、なんかこれ前にも書いた気がするな?

Paramter Store と Secret Manager の違い

暗号化がデフォルトなのか田舎、みたいなんだと思っていたけど、そういえば SecureString 指定したら Paramter Store も暗号化使えるじゃん……? となり最近なにもわからなくなっていた。

dev.classmethod.jp

クラスメソッドくんいつもながら助かる〜! という感じで、 Standard ラインが無料かつ値のローテートをできないのが Paramter Store、お金はかかるけど値のローテートができるのが Secret Manager と見ておけば良さそう。

結論に書いてあるとおり、基本 Paramter Store でよさそうですね。 というか AWS くんが悪いよこれ、値のローテート設定したら金取ればいいだけで Paramter Store に統合できるじゃん…… (キレの気持ち) 。