先月 28 日から今月 1 日まで開催された Internet Week 2017 で「運用自動化ハンズオン ~StackStormで実践するインフラ運用革命~」セッションをやらせていただき、おかげさまで大変好評をいただきました。
こちらのセッションを企画してくださいましたプログラム委員の方々、登壇を引き受けてくださった講師陣の皆さん、準備段階から当日までお手伝いくださった TA の皆さん、そして当日ご来場くださいました皆様に改めて感謝申し上げます。
この記事では当日のセッションで StackStorm の Pack 開発についていただいた質問について、改めて回答させていただきます。
Q. 作成したルールや、自作のアクション、ワークフローなど、テスト環境の準備は何か工夫していますか?
A.
基本的に、自分が作成した アクション、及び センサ については機能テストを書くようにしています。
StackStorm のパッケージ管理システム StackStorm Exchange に登録されている Pack の多くでも単体機能テストが備わっています。
StackStorm はこれらの テストフレームワーク を提供していますので、開発者はアクション、及びセンサの機能テストをラクに記述できます。
Q. テストの自動化はどうしていますか?
A.
これも StackStorm が提供してくれている CI のフレームワークを利用しています。
StackStorm の自動テストの実行環境を自前で用意しようとすると、テストの実行環境を構築するための CI スクリプトでやらなければならないことが多々 (テスト実行用の StackStorm の構築、Pack の実行環境の構築、テストの実行などなど) ありとても面倒ですが、StackStorm は自動テストについても上記の面倒な作業を パッケージ化 してくれています。
ユーザはこちらの circle.yml のサンプル をリポジトリにコピー&リネームするだけで、Circle CI が StackStorm Pack の自動テストを正しく行ってくれます。
Q. 個別packはどういう単位で作成すると運用しやすい等のノウハウはありますか?
A.
StackStorm 公式マニュアル では、Pack を以下の 2 種類に分類しています。
種類 | 管理目的 |
---|---|
Integration Pack | システム毎に管理される Pack |
Automation Pack | 運用用途毎に管理される Pack |
Integration Pack
は AWS や RabbitMQ, Zabbix など、StackStorm が外部システムに対する操作・イベントハンドリングを行うための Pack で、通常システム毎に別々の Pack として管理されます。StackStorm Exchange で管理されている Pack は全てこの Integration Pack
になります。
対して Automation Pack
は、特定の運用目的 (e.g. Zabbix からのアラートに起因するサーバホスト障害の一次対応) 毎に ワークフロー や ルール などがまとめられます。Integration Pack
と違い、ワークフローやルールには複数のシステムに跨るアクション、トリガ が記述される場合もあります。
これら 2 つのどちらに分類されるかを意識して、Pack の管理単位を決められると良いと思います。また StackStorm Exchange に登録されていない IntegrationPack
を開発された場合は、ぜひ StackStorm Exchange Incubator にご報告ください (レビューをパスすれば StackStorm Exchange に登録されます)。
いかがでしたでしょうか。上記内容が少しでも開発のお役に立てたならば幸いです。
もしこの他に質問したいことや言いたいこと、ドヤりたいことなどがありましたら StackStorm 公式 Slack WorkSpace に、日本語チャンネル #community-japan が開設されましたので、ぜひご参加ください。
最後に、前日のアドベントカレンダー記事 の著者 杉本さん と私が StackStorm Community Leader として 紹介されました (・`ω・)ドヤァ