【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 | /> ls AppServer/ prd.db_host prd.db_password stg.db_host stg.db_password |
階層のパスを指定することでその下の階層に対してリストできます。
1 2 | /> ls /AppServer/User userid |
exit
psshのシェルを終了します。
1 2 3 4 5 6 7 8 9 | $ pssh /> ls AppServer/ prd.db_host prd.db_password stg.db_host stg.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_password Decrypt 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 | />put Input 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 | />put Input 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の方がより効率的にパラメータストアを操作できる様に感じました。
必要に応じて使い分けて頂ければと思います。
以上です。