こんにちは。インフラ開発部の福本です。
Webサービスの提供を長く続けていると、どうしても継ぎ接ぎで改修が行われていくことも多く、それにあわせてスケジュール登録されるCronやTaskなども煩雑になってきますよね。
開発メンバーが異動でいなくなってしまうと、そもそもどこで何の処理が動いているのか探すだけで1時間、みたいなこともよくあります。
そういったことが続くと、やはりジョブ管理ソフトが欲しくなってくるものです。
ということで、今回はRundeck&Windowsについて検証してみたので、共有してみたいと思います。
Rundeckとは?
ひとことで言うと、オープンソースのジョブスケジューラです。 http://rundeck.org/
マネージャのインストール先はLinuxになりますが、エージェントはLinux・Windowsどちらも対応しているようです。
検証ざっくり構成
Rundeckマネージャ:CentOS 7 Rundeckエージェント:WindowsServer2008R2
ということで、今回はマネージャをインストールし、エージェントとしてWindowsを指定した構成で検証してみました。 (マネージャ・エージェントともにLinuxの構成はよく見かけますし・・・)
Rundeckインストール
最新のユーザーガイドがありましたので、そちらを参考に進めます。(記事執筆時点では、2.6.2が最新でした) http://rundeck.org/docs/
簡単ガイドでは指定の jar ファイルを起動すればいいとのことですが、さすがにそれでは記事にはならないので。。
ということで、まずはJavaのインストールです。
[code language="shell"] yum install java-1.7.0 [/code]
次に、利用ポートの確認です。
そのままプロンプトが返ってくれば(値が表示されなければ)大丈夫です。
[code language="shell"] netstat -an | egrep '4440|4443' [/code]
では、Rundeckのインストールです。RPMで入れました。
[code language="shell"] rpm -Uvh http://repo.rundeck.org/latest.rpm yum install rundeck [/code]
Rundeckセットアップ
インストールが完了したら、まずは起動してみます。
[code language="shell"] chkconfig rundeckd on service rundeckd start [/code]
お約束ですが、URLがlocalhostに設定されており、アクセスするとlocalhostにリダイレクトされてしまうのでこちらの変更を行います。検証なのでIP指定しました。
/etc/rundeck/rundeck-config.properties
[code]
grails.serverURL=http://localhost:4440
grails.serverURL=http://(RundeckのサーバIP):4440 [/code]
早速ブラウザでアクセス・・・と思いきや、CentOS7のFirewalldで若干つまずき。。。
気を取り直してアクセス!初期アカウントのadminでログインしてみます。 無事に表示できました。
では、プロジェクトおよびジョブを作成して、ローカルホストでのジョブ実行を行ってみます。 (プロジェクトの作成は割愛します。)
ジョブ作成ではワークフローに従って実行内容を記述するようですが、いろいろなオプションが取れるようですね。今回はコマンドを選んでいます。
ローカルホストでの実行なので、"Execute locally" を指定しておきます。
では、ジョブを作成したので、実行してみます。 実行結果が表示されますね。各タブで詳細をすぐ確認できるのは便利です。
ジョブエラー時のコマンドを定義することもできます。 すでに上述の画面でDefinitionタブ内でエラー処理が書いてあります。
そこで、ありもしない"dates"コマンドを実行させて、メインの処理はエラーとさせておき、エラー処理として定義されたコマンドを続けて実行させてみます。
その結果、ちゃんとエラー処理できてファイルも作成されていました。
[code language="shell"] ls -la /tmp/test -rw-rw-r--. 1 rundeck rundeck 7 2月 8 18:38 /tmp/test [/code]
WindowsへのSSHインストール・セットアップ
さて、次はWindowsエージェントのセットアップです。 Cygwinが推奨されていますが、せっかくなのでプレリリースされたOpenSSHで検証してみたいと思います。
というわけで、インストールです。
https://github.com/PowerShell/Win32-OpenSSH/releases
ここのZIPファイルをダウンロードして展開するだけで大丈夫なようです。 今回は最新版(2016/2/2版)をCドライブ直下に、OpenSSH-Win64フォルダを作成しました。
セットアップは以下の通り。まずは鍵を作成。
[code language="shell"] cd c:\OpenSSH-Win64 ssh-keygen.exe -t rsa -f ssh_host_rsa_key ssh-keygen.exe -t dsa -f ssh_host_dsa_key ssh-keygen.exe -t ecdsa -f ssh_host_ecdsa_key ssh-keygen.exe -t ed25519 -f ssh_host_ed25519_key [/code]
公開鍵認証を有効にするため、OpenSSHフォルダにある下記コマンドを実行して、OS再起動。
[code language="shell"] setup-ssh-lsa.cmd [/code]
OS再起動完了後、SSHDをサービス登録しました。
OpenSSHフォルダにある下記コマンドを実行してインストールし、必要に応じてスタートアップの種類変更を行います。
[code language="shell"] sshd.exe install [/code]
サービス起動ができるのは便利ですね。 SFTPの設定もできるようですが、今回は割愛します。
エージェント側Rundeck設定
続いて、Rundeckの設定です。 Rundeckを実行するユーザーをWindows上で作成し、.sshフォルダを作成します。
手抜きですが、今回は実行ユーザーとしてRundeckユーザーを作成しました。 で、コマンドプロンプトで、以下のように実行し、.sshフォルダを作成。(GUI上からは作成できませんでした・・・)
[code language="shell"] cd C:\Users\rundeck mkdir .ssh [/code]
ここに、Rundeckマネージャ内の、Rundeckユーザーの鍵を配置します。 ※もちろん、実行ユーザーに応じて変更することになりますが、今回は検証なので。。
/var/lib/rundeck/.ssh/id_rsa.pub → C:\Users\rundeck.ssh\authorized_keys
念のため、SSHでログインできることを確認しておきます。
[code language="shell"] ssh -i /var/lib/rundeck/.ssh/id_rsa rundeck@(クライアントIP) [/code]
WindowsにSSHができるのはちょっと面白いですね。
次にエージェントとなるノードをRundeckマネージャ側に追加します。 プロジェクト単位でノードを構成するようです。 下記XMLの修正が必要で、GUIでの作成はできないようです。
[code] /var/rundeck/projects/(プロジェクト名)/etc/resources.xml [/code]
ここの、タグ内に追記していくイメージです。
[code language="xml"] <node name="(RundeckのGUIで表示させる名前)" description="(コメント) tags="" hostname="(IPもしくはホスト名)" osArch="Intel64" osFamily="Windows" osName="WindowsServer2008" osVersion="R2" username="rundeck"/> [/code]
osFamilyやosVersionなどの項目は、GUI上でノードを検索するときに使うようですが、他にもあるかもしれません。
では、ジョブ作成です。
違いは簡単、コマンド定義をWindowsに合わせること、実行先ノードを"Dispatch to Nodes"とし、検索して指定する必要があります。
Node Filterでの指定が若干慣れが必要になる部分かと思いますが。。
今回は簡単なバッチファイルをエージェント側に作成し、Remoteでジョブを実行してました。
ご覧のとおり、問題なく実行完了できました! 上述のSSH疎通確認の時点で半分以上成功のようなものですが。。。
ちなみにファイル作成者はrundeckになっていましたので、SSHで関連付けたWindowsアカウントで実行されているようです。
運用にあたっての課題
なかなかいい感じのRundeckですが、現時点で疑問・課題も見えてきました。
- 複雑なジョブフローは組めるのか? (エラー処理はできるみたいですが、JP1みたいにファイル監視で処理続行などできると嬉しい)
- Windowsドメインアカウントでリモート実行できるのか? (おそらく大丈夫だと思いますが、検証はしないと・・・)
- ノードやプロジェクトの効率的な管理方法
- Rundeckマネージャサーバの冗長構成
- GUIの日本語正式対応(オペレーション移管の観点)
などが思いつくところです。そもそも機能把握が先ですが。。。
ただ、非常に機能豊富なソフトウェアですので、引き続き検証していきたいと思います。
参考サイト
http://note.crohaco.net/2015/rundeck-basic/ http://dev.classmethod.jp/server-side/server/try-rundeck-job/ https://github.com/PowerShell/Win32-OpenSSH/wiki