BPMS + Ansible (Business Process Management System + Automation)

# BPMS + Ansible (Business Process Management System + Automation)

## 前置き

- これは [Ansible Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ansible) 12/20 の記事です。
    - 私個人としては 2年目 2回目 の参加になります。
- 当初は昨年同様 vSphere 関連モジュールで書こうと思ってたのですが…急遽(~~とある実情を垣間見て~~)気が変わりました。
- 思いつきだったので技術面薄めです。(すみません)
- 文字と絵が多いです。
- Ansible 要素は薄いですが CLI で自動化処理を実行できるという点で今回の要件にマッチしています。

## 目的

> みなさんのお仕事の環境においてもそろそろ何かしらの自動化(製品)が運用フローに組込まれ日々の業務が回っていることと思います。例えば、

- ユーザーアカウントの新規作成・変更
- パスワードリセット
- バックアップ & リストア
- アプリケーションのインストール
- などなど

> これまでマニュアルをもとに手作業で行っていた頃から比べると業務の

- Template (テンプレート化)
- Standardize (標準化)
- Isolation (分離・隔離)
- などなど

> が進み、'いつ' 'だれが' 実行してもほぼ同様の品質と時間(リードタイム、コスト)を想定することが可能になります。

> 「だがしかし」

## 課題

> 以下のような状況がまだ残ってはいないでしょうか?

- エクセル方眼紙等による手入力の申請書 -> 承認プロセス
    - アカウント登録申請書 -> 承認プロセス
    - パスワードリセット申請書 -> 承認プロセス
    - アプリケーションインストール申請書 -> 承認プロセス
    - などなど
  
> そう。ビジネスプロセスがアナログのまま。ビジネスプロセスと自動化が分断化していませんか?

※ そもそもこの承認プロセスごと変えてしまえるのなら Ticket システム等へ大胆な置き換えも可能だと思いますが、なかなか変えられない部分ではないかと。

## 提案

> ビジネス・プロセス・マネージメント・システム(BPMS) + 自動化(Ansible)

**自動化に至る前段もきちんとシステム化しませんか?**

例えば以下のような感じで

![Screenshot 2018-12-20 23.41.54.png](https://qiita-image-store.s3.amazonaws.com/0/67892/cbd307b1-8693-203e-1ac2-ff899f125994.png)

## システム

### BPMS

- 要件
    - スクリプトを実行可能な BPMS
    - 標準に準拠が望ましい
        - BPMN https://en.wikipedia.org/wiki/Business_Process_Model_and_Notation
    - ドキュメントが充実している
    - 構築が容易である
    - 無料、もしくはトライアルライセンスがある
    
等々の観点から

- Camunda (https://docs.camunda.org/manual/7.10/) を利用してみます。

- Camunda そのものの利用については公式ドキュメント、または以下の日本語サイトの情報が詳しいです。
    - http://itohiro73.hatenablog.com/entry/2018/01/15/082158

### 自動化

- 要件
    - CLIでキックできるもの

> **はい、Ansible ですね**

## Camunda 導入と Ansible とのインテグレーション

- 公式の Docker コンテナを利用できます。

    - https://docs.camunda.org/manual/7.10/installation/docker/

- Community Edition の場合

```
   docker pull camunda/camunda-bpm-platform:latest
   docker run -d --name camunda -p 8080:8080 camunda/camunda-bpm-platform:latest
```

- EnterPrise Edition の場合 (30日間利用可能)
    - 事前にユーザー登録が必要です https://camunda.com/download/enterprise/
    - 登録したメールアドレスに
        - ユーザー名 (registry.camunda.cloud へのログインに使用)
        - パスワード (registry.camunda.cloud へのログインに使用)
        - ライセンスキー が送られてきます。

```
   docker login registry.camunda.cloud
   docker pull registry.camunda.cloud/camunda-bpm-platform-ee:7.9.0
   docker run -d --name camunda-ee -p 8080:8080 registry.camunda.cloud/camunda-bpm-platform-ee:7.9.0
```

- 引き続きは Enterprise Mode で利用しています。

- Web Browser が使える OS から http://{docker host IP address}:8080/camunda-welcome/index.html から Go to the Webapps にアクセスして demo / demo でログインします。

![Screenshot 2018-12-20 06.38.49.png](https://qiita-image-store.s3.amazonaws.com/0/67892/0cf6d504-e01c-94c6-79c2-e50c85d0edc8.png)

- ログイン後の画面

![Screenshot 2018-12-20 23.17.41.png](https://qiita-image-store.s3.amazonaws.com/0/67892/2eb31ff8-e87b-9727-d21c-0cca26536a14.png)

- Cockpit はダッシュボード

![Screenshot 2018-12-20 23.15.52.png](https://qiita-image-store.s3.amazonaws.com/0/67892/121ba6ce-d32c-bfe8-fe5e-45b9aab03729.png)

- モデル は Camunda Modeler で作成します。
- Script Task で groovy で記載するか、Service Task で Java Class を指定したりできます。

- Script Task: https://docs.camunda.org/manual/7.8/reference/bpmn20/tasks/script-task/
- Service Task: https://docs.camunda.org/manual/7.8/reference/bpmn20/tasks/service-task/

![Screenshot 2018-12-20 23.24.23.png](https://qiita-image-store.s3.amazonaws.com/0/67892/9f92a090-a0fc-a10c-8c54-b229a1bf7b70.png)

- Groovy 記述例

```groovy
<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy">
  <script>
def proc = "ansible-playbook site.yml".execute()
def b = new StringBuffer()
proc.consumeProcessErrorStream(b)

println proc.text
println b.toString()
  </script>
</scriptTask>
```

## あとがき

いかがでしたでしょうか。Camunda メインの内容になってしまいましたが、運用基盤などに対する自動化の次のステップとして **ビジネス・プロセスとの結合** を図ってみては? という思いで書いてみました。何かしらのご参考になれば幸いです。

P.S. あまり時間がなかったので、もうちょっとハックしたら追加記事上げます…