APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

[StackStorm] mysql Pack 使ってみた

この記事は、エーピーコミュニケーションズ Advent Calendar 2018 の最終日のエントリです。 

目次

はじめに

APCの佐々木です。
約半年ぶりの投稿になりますが、手元で評価したPackの情報をアップします。
Packについては前の投稿を参照してください。

techblog.ap-com.co.jp

今回は「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"

以下のように値が返されることがわかります。

f:id:its-tec-stackstorm:20181221064720j:plain

所感

metaファイルを見るとわかる通り、必須項目は”query”のみです。
しかしconnectionsが複数ある場合(?)は指定してあげないと、どのconnectionを使っていいのかわからずエラーになってしまいますので
必ず指定してください。

ちなみにこんな感じ
st2 run mysql.select connection="community" query="select * from personal"

ちょっとした情報をDBから持ってきたいなどの用途には良いかも。

導入:★☆☆/便利度:★★☆/完成度:★★☆

おためしあれ。

(文責:APCチームST2 kao(@step_note_dream))