notebook

都内でWEB系エンジニアやってます。

rundeck EC2 plugin

rundeckのEC2プラグイン

rundeck ec2 plugin

EC2上のノードを自動的に探してrundeckのノートして扱う事が出来るプラグイン

いちいちリソースファイルを更新しなくていいっていうとても便利そうです、早速使ってみます

install

最新版を取得し$RUNDECK_BASE ディレクトリに配置

wget https://github.com/rundeck-plugins/rundeck-ec2-nodes-plugin/releases/download/v1.5.1/rundeck-ec2-nodes-plugin-1.5.1.jar /var/lib/rundeck/libext/

設定

新たにプロジェクト作成時の設定でリソースを選べるようになります

「Resource Model Source」の欄、+Add Resourceをクリックすると下記のようにリソースモデルを選択できます

f:id:swfz:20151209031347p:plain

EC2-Pluginをチェックして必要設定項目を入力します

Access Key

  • アクセスキー

Secret Key

  • シークレットキー

Endpoint

  • endpointの入力は下記から対象リージョンのエンドポイントを入力します

Regions and Endpoints

Mapping

そもそも自動でEC2探してノードして扱えるのでいちいちサーバの管理をしなくていいのはとてもメリットなのですがいくつか設定が必要です

リソースモデルの定義についてはプラグイン側で必要な値をEC2のデータ取得時のデータとマッピングして設定してくれています

その設定を環境に合わせて設定し直したい時に使うのがこのマッピング機能です

githubをちゃんと読めば分かるのですが理解するまでちょっと時間が掛かりました

実際の設定値と、EC2の設定を見ていきます

  • 役割ごとのタグ設定

EC2のタグに設定したものも扱えるようなのでEC2作成時に役割によってタグをつければ実行対象の絞込みが簡単に行えそうです

tags.selector\=tags/Role|tags/Service|tags/Stage

今回は複数タグを扱いたい場合なのでそれぞれのタグを「|」で区切っています

一つのタグだけでいい場合は「tags/タグ名」という指定方法で大丈夫です

これでEC2のtagsのkey「Role」「Stage」「Service」に設定してある値をタグにしてくれます

RundeckのGUIから絞り込む場合は「tags: backend+production+app」のような形で複数タグを指定することでANDでの絞込みが出来ます

f:id:swfz:20151209031250p:plain

今まで知らなかったのですが、EC2の一覧で見れる「Name」の値は今までサーバ作ってから設定してましたが、この値はTagsのNameにあたるものだったようです

さらにTagsに設定した値はEC2の一覧画面のカラムとしても表示可能でした

タグの横にある「Show Column」をクリックする事で表示することが出来ます

リソース管理をしやすくするための機能のようですね、もっと早く知っていれば。。。

f:id:swfz:20151209031310p:plain

最終的にはこのようにRoleに設定した値をタグとして扱う事が出来るようになります

f:id:swfz:20151209031300p:plain

  • sshの実行先
hostname.selector\=privateIpAddress

rundeckは各サーバに対してsshするときにリソースで定義したhostnameを使うようです

で、プラグインのデフォルトマッピングはEC2では「publicDnsName」

今回の環境では設定がされてなかったため上記設定を入れないとssh対象が判断できずにlocalhostに対してコマンドを実行するという事態に。。

結果全てのノードに対して実行しているようでノード数分ローカルでコマンドを実行しているだけという状態になってしまっていました

なので上記設定のようにprivateIpAddressをマッピングさせる事で解決

実行して確認しなくても下記画面の右端でsshするユーザ名とホスト名で確認する事が出来ます

f:id:swfz:20151209031321p:plain

username.default\=appuser
ssh-keypath.default\=/var/lib/rundeck/.ssh/appuser_id_rsa

デプロイユーザーでsshするために上記設定する必要がありました、デフォルトは(ec2-user)

  • Mapping Params

もろもろ踏まえて今回は下記設定を記述(project.properties)

気をつけることとしては、各設定は「;」で区切る(,ではない)、「=」はエスケープする

username.default=appuser;ssh-keypath.default=/var/lib/rundeck/.ssh/appuser_id_rsa;hostname.selector=privateIpAddress;tags.selector=tags/Role|tags/Service|tags/Stage;

それぞれの設定と実際に確認できるところを色で分けてみました

f:id:swfz:20151209031330p:plain

  • Mapping File

マッピングをファイルに保存して使用する場合にはこちらを選択する必要がある模様

  • 編集時の設定

プロジェクトの編集で設定を追加するにはプロジェクトの設定ファイルを直接いじるしかないみたい。。

/var/rundeck/projects/{project_name}/etc/project.properties

設定完了

EC2の一覧が出てきます

設定周りの話は自分が実際に導入する際にはまったところを主に残しているのでどこかで役に立てばうれしいです

ここまで自動化できればオートスケーリング時などにも漏れなくjobを実行できますね