😺

Rundeckの導入

に公開

はじめに

こんにちは、Gakken LEAPインフラエンジニアの丹羽です。

現在参画しているプロジェクトでジョブ管理ツールのRundeckを導入したので、その経緯についてご紹介したいと思います。

導入の経緯

現在参画しているプロジェクトでは不定期に運用作業が発生しますが、従来はこれを各エンジニアの手動オペレーションや自前のシェルスクリプトで実施していました。

人間のやることですから、手動オペレーションには作業ミスや抜け漏れのリスクが発生します。作業手順書を作成したり、スクリプト化しておいたりすることで多少はリスクを軽減できますが、サービスの変化に応じてこれらを更新し続ける必要がありますし、その結果、属人性が高くなることも考えられます。

また、各人が自分のローカル環境で実施することで、作業の記録が残らない点も気になります。

こうした問題を解消するため、運用作業を一括管理できるツールを導入しようと思い立ちました。

ツールの選定

ツールの選定にあたっては、以下のような条件が念頭にありました。

  1. シンプルなGUIから操作できること
  2. シェルスクリプトなどの既存リソースが転用できること
  3. 作成したジョブをバージョン管理できること

1番はチームメンバーに使ってもらうことをまず第一に考え、高機能よりもとっつきやすさを重視しました。また、将来的に非エンジニアのメンバーに権限委譲する場合などに活用できそうという目論見もありました。

2番も1番と同様、現在の手動オペレーションやスクリプトをそのまま転用することで、スムーズに移行できるのではないかと考えました。

3番については、通常の開発フローと同じくプルリクエスト=>レビューのステップを挟むことで、チーム内で知見が共有され、属人化を防ぐことを意図しました。

こうした条件を満たすツールとして、今回はRundeckを採用しました。

対抗馬としてはAnsible AWXがありました。AnsibleのジョブはYAMLで記述できますし、それなりにとっつきやすいかとも考えましたが、複雑なことをやろうとするとAnsible自体の学習が必要となり、そのあたりの学習コストを加味した上でRundeckに軍配が上がりました。

Rundeckについて

Rundeckはオープンソースのジョブ管理ツールです。並行してエンタープライズ版も提供されており、2020年にRundeckがオンコールサービスのPagerDuty社に買収されたことで現在はRunbook Automationという製品になっているようです。今回はオープンソース版を利用しています。

主な機能は対象サーバにSSHで接続し、指定のコマンドやスクリプトを実行するというものです。サーバのリモート操作というシンプルな機能であるぶん自由度は高く、CLIでできることは大抵できそうです。先述の通り、既存のスクリプトを転用できる点も魅力です。

導入にあたっての諸設定

公式インストールガイドに従えば構築自体はすぐにも可能ですが、業務利用するにあたって最低限の設定を行いました。

まずセキュリティの観点から、Rundeckの前面にALBを配置してhttps化しました。この際、Rundeck側にも設定変更が必要です。

次にデータストアをデフォルトのh2からRDS MySQLに変更して、耐障害性を向上させました。

最後にジョブのバージョン管理を実現するため、Githubリポジトリとの連携を行いました。RundeckにはデフォルトでSCM連携機能があり、公式マニュアルの説明に従って設定すると、Rundeck GUIの操作だけで作成したジョブ内容をGithubへプッシュできるようになりました。

現状の課題

一方、誤算もありました。SCM機能にはエクスポートとインポートがあるため、この両者を同時に設定することでRundeckとGithubリポジトリが双方向で編集可能になると考えていました。

しかし実際に設定してみたところ、Rundeck外で編集したジョブYAMLをインポートで取り込むと、それが変更として検知されてしまうということが判明しました。これはエクスポート機能とインポート機能がローカルリポジトリを別々に作成することで発生しているようです。

試行錯誤してみましたが、そもそも公式マニュアル内でIt is not recommended to use the same repository and branch when using export and import plugins on the same project.と注意書きされていることもあり、最終的には断念しました。

そのため、RundeckとGithubの連携は一方通行の状態ですが、例えば検証Rundeckで試したジョブをGithubを経由して本番Rundeckにインポートするといった構成は可能なので、運用も含めてまた練り直していきたいと思います。

まとめ

まだまだ導入したばかりのため、まずは実際に活用してもらえるようチーム内で絶賛宣伝中です。

将来的にはRundeckのAPI機能を利用して、CI/CDパイプラインやChatOpsに組み込めればさらに利用の幅が広がりそうだと期待しています。

エンジニア募集中

Gakken LEAPは日々、教育のアップデートに取り組んでいます。
興味をお持ちいただいた方は、採用サイトをチェックしてみてください。

Gakken LEAP Developers

Discussion