この記事は、エーピーコミュニケーションズ Advent Calendar 2018 の最終日のエントリです。
目次
はじめに
APCの佐々木です。
約半年ぶりの投稿になりますが、手元で評価したPackの情報をアップします。
Packについては前の投稿を参照してください。
今回は「G-suiteとかで情報を管理していますが、 クラウドで管理するのではなく自前でDB構築して管理したいというマニアックな人がいるとの噂を聞きつけました」という理由でmysqlです。
できること
st2から指定したDBを操作する
mysqlPack内のActionの概要
概ね基本的なSQL文です。
Action名 | 用途 |
---|---|
select | データを取得するAction |
insert | データを投入するAction |
update | データを更新するAction |
今回はselect
を検証します。
検証内容
st2コマンドを実行したslackchに指定したデータを返す
検証手順
環境
前回と同様、AWS上のST2(ChatOps実装済)を用います。
ChatOps実装についてはアドベントカレンダーの昨日のエントリ記事を参考にしてください。
https://st22dream.hatenablog.com/entry/stackstorm/hamubot-install
また、Packのインストール前には以下をyumでインストールしてください。
python-devel
mysql-devel
gcc
1. 下準備
事前に準備しておかなければいけない設定ファイルがあります。
/opt/stackstorm/packs/mysql/mysql.yaml.example
というファイルが用意されており、これを基に/opt/stackstorm/configs/mysql.yaml
を作成してください。(コピればOK)
中身はこんな感じ
--- connections: community: host: "localhost" user: "root" pass: "******" db: "testdb" exchange: host: "mydb.local" user: "bob" pass: "PassW0rd" db: "st2"
以下のところを修正してください。
項目名 | 内容 |
---|---|
connections | mysqlに接続する情報をDB毎に記述できる。 |
host | どのサーバ宛なのか |
user | mysqlにログインするユーザ名 |
pass | mysqlにログインするユーザのパスワード |
db | 参照するデータベース |
設定ファイルを更新したら、反映させるために以下コマンド実施を忘れずに。
st2ctl reload --register-configs
2.metaファイルの確認
/actions/select.yaml
の中身はこんな感じです。
meta: --- name: "select" runner_type: "python-script" description: "Select data from a MySQL database" enabled: true entry_point: "select.py" parameters: connection: type: "string" description: "Connection entry in configs/mysql.yaml to pull connection info from" default: null host: type: "string" description: "Database host if not specified in config" default: null user: type: "string" description: "Database user if not specified in config" default: null passwd: type: "string" description: "Database password if not specified in config" default: null db: type: "string" description: "Database name if not specified in config" default: null query: type: "string" description: "The select query to execute" required: true data: type: "array" description: "Any values to be interpolated into the query" required: false key: type: "string" description: "The name of a key in the Datastore to store the result" required: false
query:
だけはrequired: true
になっていることがわかります。
3.aliaseを書く
ChatOpsから取得するデータを指定できます。
/aliase/mysql_select.yaml
を作成します。
name: "mysql_select" action_ref: "mysql.select" description: "select database with chatops." formats: - "select {{query}} {{connection=community}}"
aliase の設定を反映させるには、以下コマンドを忘れずに。
st2ctl reload --register-all
service st2chatops restart
検証結果
slackからこのようなコマンドを打つと・・・
!select "select * from demo"
以下のように値が返されることがわかります。
所感
metaファイルを見るとわかる通り、必須項目は”query”
のみです。
しかしconnectionsが複数ある場合(?)は指定してあげないと、どのconnectionを使っていいのかわからずエラーになってしまいますので
必ず指定してください。
ちなみにこんな感じ
st2 run mysql.select connection="community" query="select * from personal"
ちょっとした情報をDBから持ってきたいなどの用途には良いかも。
導入:★☆☆/便利度:★★☆/完成度:★★☆
おためしあれ。
(文責:APCチームST2 kao(@step_note_dream))