こんにちは。SREチーム インフラエンジニアの綿引です。
2018/4/24 に Node.js 10系がリリースされましたね。
(私の誕生日です。)
そこで今回は Node.js のアップデートを Ansible を用いて実施する
という記事を書きたいと思います。
Node.js のアップデート方法に関しては、
1. 既存の Node.js(過去に yum でインストール)をアンインストール後、
2. Ansible の shell モジュール を用い Node.js を rpm でインストールする
という形にしました。
10 系を使うものの Node.js に関しての性能や新機能などの検証は行わないので
ご容赦のほどをお願い致します。
Node.js のバージョンについて
まず Node.js のバージョンに関してですが、
今回 10系をインストールするにあたって LTS などの用語をもう一度調べ直してみました。
LTS (Long Term Support)
Node.js のメジャーバージョン(6.X 、8.X など)は大きく分けて偶数と奇数に分けられます。
偶数が LTS版 と呼ばれる、サポート(※1)が長期に受けられるもので、
奇数が最新機能版で、サポート期間も LTS版に比べると非常に短くなっております。
※1 … バグの修正やセキュリティアップデート
リリースステータス
リリースステータス ・ 各ステータスの期間などに関しては、
Github にて公開されている以下をご確認頂くのが最も早いと思うので、
リンクを載せておきます。
https://github.com/nodejs/Release
因みに私なりにまとめると、、
Node.js のリリースステータスとして、以下の3つが存在します。
・CURRENT
・ACTIVE LTS
・MAINTENANCE LTS
リリースされると、
LTS版、奇数版、どちらもステータスとしては『CURRENT』になり、その後LTS版のみ、
長期サポート期間である『ACTIVE LTS』・『MAINTENANCE LTS』ステータスに移行します。
奇数版に関しては、『CURRENT』が終了した時点でサポートが終了する仕組みのようです。
それぞれの期間に関しては、
『CURRENT』 が約6ヶ月、『Active』 が18ヶ月、『Maintenance』 が12ヶ月となっているようです。
上記を全てまとめると以下です。
リリースステータス | 内容 | 期間 |
---|---|---|
CURRENT | 現在の最新版 | 約6ヶ月 |
ACTIVE LTS | サポートが積極的に行われる | 18ヶ月 |
MAINTENANCE LTS | 最低限のサポートが行われる | 12ヶ月 |
最後に Node.js 10系 のサポート期間に関してですが、
LTS版なので以下のようになります。
Node.js 10系 の リリースステータス | 期間 |
---|---|
CURRENT | 2018/4 〜 2018/10 |
Active LTS | 2018/10 〜 2020/4 |
Maintenance LTS | 2020/4 〜 2021/4 |
こちら参考にして頂けたら幸いです。
環境
では Node.js にも詳しくなったところで、早速構築してきます。
環境に関しては サーバ 1台、クライアント 2台としており
OS は CentOS 6、7 どちらも使用する形で進めて行きたいと思います。
環境情報の詳細は以下です。
ローカル
・macOS 10.13.3
・Vagrant 2.0.3
サーバ (1台)
・ホスト名 ans
・CentOS 7.1
・Ansible 2.4.2.0
クライアント (2台)
1台目
・ホスト名 anc
・CentOS 7.1
・Node.js 6.8.1 (過去に yum で入れております)
2台目
・ホスト名 an6
・CentOS 6.5
・Node.js 6.8.1 (過去に yum で入れております)
※ ホスト名は適当につけたので気にしないでください。
図にするこのような感じです。
Ansible 設定
Ansible の設定は以下となります。
ディレクトリ構成
ディレクトリ構成は以下のようにしております。
ベストプラクティスにならって ansible-playbook を実行する際は、
トッププレイブックである node_version_up-YYYYMMDD.yml をキックし、
処理自体はその配下のディレクトリの Roles 配下で制御していきます。
/opt └ ansible/ ├ node_version_up-YYYYMMDD.yml # トッププレイブック ├ hosts # インベントリファイル └ playbook/ ├ nodejs_version_up.yml # トッププレイブックから読み込むプレイブック └ nodejs_version_up/ # Roles └ tasks └ main.yml
node_version_up-YYYYMMDD.yml(トッププレイブック)
トッププレイブックの中身としては nodejs_version_up.yml を読み込むだけになっております。
--- - include: playbook/nodejs_version_up.yml
hosts(インベントリファイル)
インベントリファイルには、クライアント2台を an_clients というグループとして設定致しました。
[an_clients] anc an6
nodejs_version_up.yml (トッププレイブックから読み込むプレイブック)
こちらは roles を用い、
nodejs_version_up ディレクトリ配下のファイルを実行する形になっています。
# /opt/ansible/playbook/nodejs_version_up.yml - hosts: an_clients remote_user: vagrant become: yes roles: - nodejs_version_up
main.yml
tasks ディレクトリ配下の実行ファイルです。
処理自体は非常に簡単でしたので、シンプルな作りとしております。
中身に関しては冒頭でも記載致しましたが、
一度、アンインストールして rpm でインストールする形をとっております。
# file: /opt/ansible/playbook/nodejs_version_up/tasks/main.yml - name: remove nodejs yum: name: nodejs state: absent - name: install nodejs 10.3.0 shell: rpm -Uvh https://rpm.nodesource.com//pub_10.x/el/6/x86_64/nodejs-10.3.0-1nodesource.x86_64.rpm
実行
では実行して行きます。
[vagrant@ans ~]$ cd /opt/ansible [vagrant@ans ansible]$ ansible-playbook -i hosts node_version_up-20180601.yml [DEPRECATION WARNING]: 'include' for playbook includes. You should use 'import_playbook' instead. This feature will be removed in version 2.8. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. PLAY [an_clients] ************************************************************************************************************************************************************************************************************ TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************* ok: [anc] ok: [an6] TASK [nodejs_version_up : remove nodejs] ************************************************************************************************************************************************************************************* ok: [anc] ok: [an6] TASK [nodejs_version_up : install nodejs 10.3.0] ***************************************************************************************************************************************************************************** [WARNING]: Consider using yum, dnf or zypper module rather than running rpm changed: [anc] changed: [an6] PLAY RECAP ******************************************************************************************************************************************************************************************************************* an6 : ok=3 changed=1 unreachable=0 failed=0 anc : ok=3 changed=1 unreachable=0 failed=0
では確認していきます。
クライアント 1台目(CentOS7)
こちらは問題なさそうです。
[vagrant@anc ~]$ node -v v10.3.0 [vagrant@anc ~]$ [vagrant@anc ~]$ npm -v 6.1.0
クライアント 2台目 (CentOS6)
こちらも大丈夫そうですね。
[vagrant@an6 ~]$ node -v v10.3.0 [vagrant@an6 ~]$ [vagrant@an6 ~]$ npm -v 6.1.0 [vagrant@an6 ~]$
まとめ
Node.js を Ansible でアップデートする情報より、Node.js の LTS の情報の方に力を入れてしまいました。
Ansible に関しては、対象機能のプレイブックを一回作ってしまえば、
あとは使い回すだけなので運用が非常に楽になりオススメです。
引き続き Ansible を活用していきたいと思いました。
この度は、ご清覧頂きありがとうございました。
Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにいらして頂ければと思います。