【AWS】セッションで紹介されていたpsshを使ってみた #reinvent
まいどおおきに、大阪の市田です。
下記のセッションで紹介されていたpsshというツールを試してみたのでご紹介します。
And You Thought You Knew Amazon EC2
セッション自体の内容については下記でご紹介しています。
psshとは
これは「EC2 Parameter Store」を操作する為のシェルを提供してくれるもので、パラメータストアの利用が楽になるツールです。
kountable/pssh: A shell for the EC2 Parameter Store
インストール
Goで作成されているのでファイルをダウンロードして実行するだけです。
下記URLより環境に応じたファイルをダウンロードします。私はMacを利用しているので「pssh-darwin-amd64」をダウンロードして、psshという名前で保存しました。
ファイルはPATHが通っている適当なディレクトリに置いて下さい。私は実行権限をつけて/usr/local/binに保存しました。
後は、適切な権限のクレデンシャルをセットアップしておきましょう。詳細は下記ページにありますので個々では割愛させて頂きます。
Configuring the AWS SDK for Go - AWS SDK for Go
使い方
UNIX系OSでお馴染みのcpやmvといったいくつかのコマンドや、インラインコマンド、バッチ処理などを実行することができます。それではそれぞれについて早速みていきましょう。
ls
パラメータをリスト表示します。パラメータ階層の場合は、レベル1の階層までの表示となります。
1 2 3 4 5 6 | />lsAppServer/prd.db_hostprd.db_passwordstg.db_hoststg.db_password |
階層のパスを指定することでその下の階層に対してリストできます。
1 2 | />ls /AppServer/Useruserid |
exit
psshのシェルを終了します。
1 2 3 4 5 6 7 8 9 | $ pssh/>lsAppServer/prd.db_hostprd.db_passwordstg.db_hoststg.db_password/>/>exit |
get
パラメータの値を表示します。
1 2 3 4 5 6 7 | />get prd.db_host[{ Name: "/prd.db_host", Type: "String", Value: "prddb.example.com", Version: 2}] |
パラメータ階層の場合はPATH指定で表示できます。
1 2 3 4 5 6 7 | />get /AppServer/User/userid[{ Name: "/AppServer/User/userid", Type: "String", Value: "hoge", Version: 1}] |
暗号化されているパラメータの場合は、表示も暗号化されています。
1 2 3 4 5 6 7 | />get prd.db_password[{ Name: "/prd.db_password", Type: "SecureString", Value: "AQECAHjBi8kH (中略) WvyYAuRA==", Version: 1}] |
decrypt
暗号化されているパラメータを復号化します。
1 2 | />decrypt prd.db_passwordDecrypt is true |
これで復号化は完了です。この状態でgetコマンドを実行すると復号化されたパラメータを得る事ができます。
1 2 3 4 5 6 | [{ Name: "/prd.db_password", Type: "SecureString", Value: "prodpassword", Version: 1}] |
put
パラメータをセットします。新規に作成する場合はName,Type,Value,descriptionを指定します。最後に空行で改行して下さい。
正常にputできたら「バージョン1」として作成できたメッセージが表示されます。
1 2 3 4 5 6 7 8 | />putInput options. End with a blank line.... name=/test.db_host... value="test.example.com"... type=String... description="test database host"...Put /test.db_host version 1 |
既存のパラメータを更新する時はoverwrite=trueを指定します。下記のサンプルではstg.db_hostの値が更新前はVersion: 2となっています。
1 2 3 4 5 6 7 | />get stg.db_host[{ Name: "/stg.db_host", Type: "String", Value: "stgdb.example.net", Version: 2}] |
更新してみます。version 3として更新したメッセージが表示されます。
1 2 3 4 5 6 7 8 9 | />putInput options. End with a blank line.... name=/stg.db_host... value="stgdb02.example.com"... description="new staging database host"... type=String... overwrite=true...Put /stg.db_host version 3 |
バージョンがインクリメントされて内容も更新されていますね。
1 2 3 4 5 6 7 | />get /stg.db_host[{ Name: "/stg.db_host", Type: "String", Value: "\"stgdb02.example.com\"", Version: 3}] |
putは1行でインラインで行うこともできます。複数行で記載していた各値をスペースで区切って記載します。
1 | />put name=/test.db_host value="test.example.com" type=String description="test database host" |
暗号化したパラメータを作成する時は、Type="SecureString"を指定します。
cp
パラメータをコピーします。-Rオプションで再帰的に階層全てをコピー可能です。
1 | />cp /Server/AppServer/userid /Server/DBServer/userid |
mv
パラメータの値を違う階層に移動することができます。
1 | />mv /Server/DBServer/userid /Server/TestServer/userid |
rm
パラメータを削除します。-Rオプションで再帰的に階層全てを削除できます。
1 | rm -R /Server/TestServer |
history
パラメータの各バージョンの内容を表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | />history stg.db_host[{ LastModifiedDate: 2017-12-02 01:13:01 +0000 UTC, LastModifiedUser: "arn:aws:iam::852697527974:user/cm-ichida.yoshihisa", Name: "stg.db_host", Type: "String", Value: "stg-db", Version: 1} { Description: "staging database host", LastModifiedDate: 2017-12-02 09:10:02 +0000 UTC, LastModifiedUser: "arn:aws:iam::852697527974:user/cm-ichida.yoshihisa", Name: "stg.db_host", Type: "String", Value: "stgdb.example.net", Version: 2} { Description: "\"new staging database host\"", LastModifiedDate: 2017-12-02 21:19:25 +0000 UTC, LastModifiedUser: "arn:aws:iam::852697527974:user/ichida-iot-default", Name: "stg.db_host", Type: "String", Value: "\"stgdb02.example.com\"", Version: 3}] |
インラインコマンド
psshのシェル上で作業せずにインラインで実行することも可能です。psshコマンドに続けてpsshのシェルで実行したいコマンドを実行します。
1 2 3 4 5 6 7 | $ pssh get stg.db_host[{ Name: "/stg.db_host", Type: "String", Value: "\"stgdb02.example.com\"", Version: 3}] |
バッチ
処理内容を記載したファイルを指定することで、一連の作業をバッチ処理できます。
例えば、下記のようなcommands.txtを用意します。
1 2 | put name=/Server/AppServer/password/yamada value="p97mRgj" type=SecureString description="yamada password for App Server"rm /Server/AppServer/password/tanaka |
これを-fileオプションで指定することでcommands.txtの内容を実行できます。
1 | $ pssh -file commands.txt |
最後に
AWS CLIでもできますが、psshの方がより効率的にパラメータストアを操作できる様に感じました。
必要に応じて使い分けて頂ければと思います。
以上です。