初めに
ジョブ管理ツールのRundeckをWindowsのPCにインストールし、ノードにしたいWindowsPCをつなげる設定に大変難儀したため、後のために手順メモを残します。
以下、RundeckをインストールするWindowsPCを「サーバPC」、ノードにしたいWindowsPCを「ノードPC」とします。
環境
###サーバPC
OS:Windows 10
###ノードPC
EC2インスタンス
OS:Windows Server 2019
手順
Rundeckのインストール
サーバPCにRundeckをインストールします。
RundeckのインストールにはRundeck以外に必要なものや必要な手順がそこそこあるため、簡単のためにChocolateyでインストールしちゃいます。
ページはこちら。バージョンの指定もできます。
※更新・削除には難があるそうです
choco install rundeck
ファイアウォールの設定
C:\rundeck\etc\framework.properties
を確認します。
framework.server.port
の数字がRundeck用のportになるため、受信の規則でこれを追加します。デフォルトでは「4440」です。
ブラウザでアクセス
ここまで出来たらバッチファイルC:\rundeck\start_rundeck.bat
を実行し、Rundeckの画面にChromeなどのブラウザでアクセスします。
バッチ実行から画面が立ち上がるまでやや時間がかかります。
URLは先ほどと同じC:\rundeck\etc\framework.properties
ファイルのframework.server.url
。
ユーザ名:admin
パスワード:admin
です。
SSH接続(公開鍵認証)の設定
ノードPCはOpenSSHが既に起動していることを前提とします。
手順1:サーバPCで鍵作成
まず、以下のコマンドでサーバPCで秘密鍵・公開鍵のペアを作成します。
ただのssh-keygen
だとRSAでなくOpenSSH形式の鍵が作られてしまうため、Rundeckで使用できなくなってしまいます。
ssh-keygen -t rsa -b 4096 -m pem
今回は、鍵の作成先をC:\rundeck\sshkeys\id_rsa
とします。
指定したC:\rundeck\sshkeys
フォルダに
秘密鍵:id_rsa
公開鍵:id_rsa.pub
が作成されます。
手順2:ノードPCに公開鍵配置
公開鍵をノードPCに配置します。
ノードPCにC:\Users\<username>\.ssh
というフォルダがあるはずなので、そこに作成したid_rsa.pub
をコピーし、authorized_keys
にリネームします。すでにある場合は追加します。
また、C:¥ProgramData¥ssh\sshd_config
をメモ帳などで開き、設定を変更します。
- 「#PasswordAuthentication yes」→「PasswordAuthentication no」
- 一番最後の2行(「Match Group administrators」ともう一行)の先頭に「#」を付けコメントアウト
- 「サービス」を開き、OpenSSHを再起動
手順3:サーバPCでRundeckに秘密鍵登録
サーバPCに戻り、ブラウザでRundeckの画面を開きます。
右上の歯車を押し、「Key Strage」を選択します。
Key Storageの画面になったら「Add or Upload a Key」ボタンを押し、先ほど作った秘密鍵を登録します。
入力欄 | 今回入力する内容 | 説明 |
---|---|---|
Key Type | Private Key | 接続に使うものを指定 |
ファイルをアップロード | C:\rundeck\sshkeys\id_rsa | コマンドで作った秘密鍵 |
Storage Path | (keys/)rundeck | 任意の文字列 フォルダ名 |
Name | id_rsa | 任意の文字列 ファイル名 |
Storage Path
はフォルダ名、Name
はそのフォルダの中に作られる鍵の名前になります。今回はStorage Path
をrundeck
, Name
をid_rsa
としました。
こうすると、C:\rundeck\var\storage\content\keys\<Storage Path>\<Name>
、すなわちC:\rundeck\var\storage\content\keys\rundeck\id_rsa
というパスで、参照元C:\rundeck\sshkeys\id_rsa
と同じ内容の秘密鍵が作成されます。
※meta
フォルダの方には作成された鍵の情報が入っており、content
フォルダの中に手動で鍵を置いてもmeta情報がないので秘密鍵としては認識されません。
以下の画像のように🔓マーク+Name
で指定した鍵がStorage Path
に作られていることが確認できます。
Key Storageに作成した鍵はセキュリティ設定がtoo open
であるため、セキュリティ設定を参照元の秘密鍵と同様のものに変更します。
右クリック→プロパティ→セキュリティ→詳細設定 から変更します。
ここまで出来たらRundeckに登録された鍵で通信ができるかを念のため確認します。
今回の場合は以下になります。
ssh <username>@<ノードPCのIP> -i C:\rundeck\var\storage\content\keys\rundeck\id_rsa
接続が確立されればOKです。通信できない場合はセキュリティ設定などを見直してみてください。
Rundeck上でのノード追加
まず、プロジェクトを作成します。
作成したプロジェクトの「Edit Nodes...」メニューを開き、resource.xml
を作成していきます。
「Sources」タブの「Add a new Node Source」ボタンを押し、「File」を選びます。
Format
をresourcexml
、File Path
をC:\rundeck\projects\<作成したプロジェクト名>\etc\resource.xml
として、後のチェックを全て入れます
↓
そしてSaveするとxmlファイルが作られ、「Edit」タブでrecource.xmlが編集できるようになるので、「Modify」ボタンからXMLを編集し、ノードを追加します。最初から入力されているノードはサーバPC自身です。
これで保存すればこのプロジェクトのノードとしてノードPCが表示されるようになるはず。
おまけ:複数のノードのうちランダムな一つでジョブ実行
分散処理っぽいけど分散処理じゃないジョブ実行。
ジョブの設定「Nodes」の一番下「オーケストレータ」の項目でRandom Subset
を選択し、「Count」を1
とすることで設定可能。
ただし、良い感じに分散されるわけではないので、同じノードで実行されることもある。
終わりに
Linuxの資料なら見つかるのですがWindowsだと一連の流れがなかなか見つからず、本当にやりたいことの前に上記の設定段階で詰まってしまって大変でした。
特にSSH接続の段階では色々なセキュリティが絡むので(ファイアウォール設定、セキュリティグループのインバウンド設定、鍵のセキュリティ設定)今詰まっているのがどこなのか分からず大変でした…。