こんにちは。
インフラエンジニアをしていますknmriiです。
今回はジョブ管理ツール「Rundeck」の紹介とインストール方法、簡単な使用方法を紹介していきます。
最速でRundeckジョブのテスト実行ができるような記事構成にしていきたいと思いますのでぜひお試し下さい。
インフラエンジニアの皆様にとって、作業自動化の助けになれば幸いです。
Rundeck
Rundeckとは
OSSのジョブ管理ツールです。
以下のような特徴があります。
- コミュニティ版を無料で利用可能
- ssh経由でJOBを実行できるツール
- エージェントレス
- コマンドやスクリプトの実行が可能
- JOBデータのgit管理可能
- 管理対象のサーバを登録可能 タグ管理可能
- 定期実行可能(cron表記もOK)
公式サイトはこちら
システム要件を確認
Rundeckサーバのシステム要件が以下になります。
OS
- Java 8 もしくは 11
CPU
- 2 CPUs
- 2 CPUs per instance
RAM
- 4 GB RAM
- 4GB for the JVM instance
Storage
- 20 GB hard disk
Database
Log store
- File system
- S3 compatible object store
Amazon EC2の場合
- m3.medium以上
- ただし接続対象が100ホストを超える場合はm3.xlarge 以上のインスタンスサイズが必要
Webアクセス用ブラウザ
- Mozilla Firefox or Google Chrome
- その他の HTML5 準拠の Web ブラウザも動作する可能性がありますが、完全にはテストまたはサポートされていません。
必要なリソースはそこまで大きくないことが分かりますね。
どの環境でも立てることができるスペックかなと思います。
Rundeckをサーバにインストールしてみる
早速Rundeckサーバを構築して行きます。
公式ドキュメントはこちらです。
記事の情報が古くなって機能しなくなった場合も、上記公式ドキュメントを参照してください。
なお、今回はRedHat系OSにCommunity版をインストールしていきます。
事前にJavaをインストール
Javaのインストール方法はいろいろとありますので割愛します。
今回はJava8をインストールしました。
# java -version openjdk version "1.8.0_xxx"
Rundeckインストール
まずは、リポジトリファイルを追加します。
以下のようなリポジトリファイルを格納する、ディレクトリにファイルを作成します
/etc/yum.repos.d/rundeck.repo
[rundeck] name=rundeck baseurl=https://packages.rundeck.com/pagerduty/rundeck/rpm_any/rpm_any/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packages.rundeck.com/pagerduty/rundeck/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300
念のため読込可能か確認してみましょう
# yum clean all # yum repolist 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile リポジトリー ID リポジトリー名 状態 rundeck/x86_64 rundeck 331 repolist: 331
このような表記になればOKです。
そして、yum
コマンドを使ってinstallしていきます。
# yum install rundeck 読み込んだプラグイン:fastestmirror, langpacks Loading mirror speeds from cached hostfile 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ rundeck.noarch 0:4.6.1.20220914-1 を インストール --> 依存性解決を終了しました。 依存性を解決しました ============================================================================================================================================================================================================================================= Package アーキテクチャー バージョン リポジトリー 容量 ============================================================================================================================================================================================================================================= インストール中: rundeck noarch 4.6.1.20220914-1 rundeck 253 M トランザクションの要約 ============================================================================================================================================================================================================================================= インストール 1 パッケージ 総ダウンロード容量: 253 M インストール容量: 272 M Is this ok [y/d/N]: y Downloading packages: rundeck-4.6.1.20220914-1.noarch.rpm | 253 MB 00:00:09 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : rundeck-4.6.1.20220914-1.noarch 1/1 検証中 : rundeck-4.6.1.20220914-1.noarch 1/1 インストール: rundeck.noarch 0:4.6.1.20220914-1 完了しました!
以上でインストール作業自体は完了です。
Rundeckサーバの起動
それでは、インストールが完了したRundeckを起動してみましょう。
以下のようなコマンドで起動可能です。
# systemctl start rundeckd # service rundeckd start
起動したら状態を確認してみましょう。
activeになっていたらおそらく起動が完了しています。
RundeckサーバーにJavaのインストールを忘れていて起動しなかった話は、内緒です。
# systemctl status rundeckd ● rundeckd.service - SYSV: rundeckd, providing rundeckd Loaded: loaded (/etc/rc.d/init.d/rundeckd; bad; vendor preset: disabled) Active: active (running) since 金 2022-09-30 14:46:42 JST; 5s ago Docs: man:systemd-sysv-generator(8) Process: 9288 ExecStart=/etc/rc.d/init.d/rundeckd start (code=exited, status=0/SUCCESS) Main PID: 9296 (runuser) CGroup: /system.slice/rundeckd.service ‣ 9296 runuser -s /bin/bash -l rundeck -c java -Drundeck.jaaslogin=true -Djava.security.auth.login.config=/etc/rundeck/jaas-loginmodule.conf -Dloginmodule.name=RDpropertyfilelogin -Drdeck.co...
Rundeckサーバのlogを確認し、以下のような文字が出ていたらアクセス可能になっているはずです。
# tail /var/log/rundeck/service.log Grails application running at http://localhost:4440 in environment: production
ログインしてみる
初回起動時は、以下のようなURLでwebアクセス可能になっています。
◆ローカルにインストールした場合
http://localhost:4400/
ただし、アクセス用端末とRundeckサーバが別の場合は、上記ではアクセス出来ないので注意が必要です。
このように、設定ファイルを書き換えてサービスを再起動する必要があります。
# vim /etc/rundeck/rundeck-config.properties grails.serverURL=http://localhost:4440 ↓ grails.serverURL=http://{RundeckサーバのIPアドレスもしくはFQDN}:4440 # systemctl restart rundeckd
再起動が完了したら以下のようなURLを作成してアクセスします。
http://{RundeckサーバのIPアドレスもしくはFQDN}:4400/
プロジェクトを作成する
Create New Project
をクリックして、Project名や説明を入力します。
こちらの設定は後から細かく設定できますので、今回は全てRundeck_testPj
としておきます。
設定後、作成
をクリックしてProjectの作成は完了です。
まずは、RundeckサーバのローカルでJOBを実行してみる
ジョブ
のタブ内に新しいジョブを作成
というボタンがあるのでそこをクリックします。
今回のJOBはテスト用JOBなのでtestJob
としておきます。
ジョブ編集画面に入るので、今回はOptions
とワークフロー
を触ってみます。
OptionsではJobに渡したい変数を作成することができます。
今回のテスト用JOBではtest_valueを作成してみました。
Optionsでは、リストから任意の値を選択させる設定や入力を強制する設定を入れることが可能です。
次に、実行する処理を作成します。
ワークフロー
→ スクリプト
を選択するとスクリプト入力欄ができますのでこちらに処理を書いていきます。
#!/bin/bash echo "コマンドの標準出力がログに残る" echo $(uname -n) echo "Optionsで設定した内容もスクリプト内で呼び出し可能です" echo "@option.test_value@"
JOBの編集が完了したら、保存
をクリックしましょう。
いよいよ実行可能なJOBが作成できました。
試しに実行してみます!
処理がうまくいけば以下のような画面になり、ログが出力されます。
コマンドの標準出力がログに残る rundeck Optionsで設定した内容もスクリプト内で呼び出し可能 TEST_VALUE!!!
Rundeckサーバのローカルで何か処理を動かしたい場合は、この方法でJOBを作成することで実行可能になります。
Rundeckサーバから別サーバにSSH経由でJOBを実行してみる
Rundeckサーバから別サーバへのJOB実行をするには、まずは接続先のノードの情報を登録する必要があります。
手段は複数ありますが、今回は一番簡単な読み込みファイルを作成して情報を書き込んでいく方法を紹介します。
PROJECT SETTING
→ EDIT NODE
→ Add a new Node Source
と進みます。
ファイルの設定画面になるので
Format:resourceyaml File Path:/var/lib/rundeck/projects/Rundeck_testPJ/resource.yaml (rundeckが読み込める適当なディレクトリを指定します)
を入力します。
また、Generateにチェックを入れると自動でファイルが作成されるので手間が減ります。
設定が完了したら保存
をクリックし、Edit
を開くと先ほど作成したファイルが表示されるのでそのファイルのModify
をクリックします。
ファイルが編集できるようになっていますので、以下を追記します。
<remotenode>: nodename: remotenode hostname: remotenode osVersion: 3.10.0-1160.el7.x86_64 osFamily: unix osArch: amd64 description: remort server osName: Linux username: root tags: ''
追記をしたら保存
します。
パスワードをRundeckに読み込ませてSSH接続させることも可能ですが、今回はより作業を簡易化するためRundeckサーバ → リモートノードにSSH鍵認証の設定をしておきました。
JOBの作成方法はローカルとほぼ同じです。
先ほど作成したRundeckサーバ上でローカル実行したJOBの実行対象を変更し、リモートノードで実行してみます。
JOB編集画面のNodes
タブを開き、Dispatch to Nodes
を選択します。
その後、ノードフィルターに先ほど追加したリモートノード名を入力し、マッチしたノード
に登録したリモートノードが出現したことを確認して保存します。
これで設定は完了ですので、実行してみます。
コマンドの標準出力がログに残る remotenode Optionsで設定した内容もスクリプト内で呼び出し可能 TEST_VALUE!!!
ログが出力されました!
最後に
今回は、RundeckをインストールしてJOBのテスト実行をすることろまでを解説しました。
まだまだ紹介できていない機能が豊富にありますので、今後機会がありましたら第二弾の解説を作成したいと思います!
公式のドキュメントも丁寧にかかれていますので気になる方はそちらをご確認ください。
それではまたの機会に...
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/
カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.com
ラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/
イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com