「環境変数になんらかの値を入れたいがどこで保持するんだ、インスタンス直接書いてると冪等性が確保できないだろ」
みたいな話に対して、 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 で一気に取得しろ」という回答があった。
書き込みを見る限りでは単体で取得しようと、まとめて取得しようと代わりはないので、あとはスクリプトを bashrc の先頭などで読み込ませて展開しろ、という風情でいいんじゃないかなと思いちょっとやっている。
ここまで書いて思い出したけど、なんかこれ前にも書いた気がするな?
Paramter Store と Secret Manager の違い
暗号化がデフォルトなのか田舎、みたいなんだと思っていたけど、そういえば SecureString 指定したら Paramter Store も暗号化使えるじゃん……? となり最近なにもわからなくなっていた。
クラスメソッドくんいつもながら助かる〜! という感じで、 Standard ラインが無料かつ値のローテートをできないのが Paramter Store、お金はかかるけど値のローテートができるのが Secret Manager と見ておけば良さそう。
結論に書いてあるとおり、基本 Paramter Store でよさそうですね。 というか AWS くんが悪いよこれ、値のローテート設定したら金取ればいいだけで Paramter Store に統合できるじゃん…… (キレの気持ち) 。