実現すべき目標
AWS EC2として動くCentOS/RHELにてENIの追加削除を行った際に手放しで利用が出来る状態にすることが目的です。
なお、当該記載内容はAWSが公式として推奨するものではありません。
事の発端
ENIを付け替えることによるfailoverを実装しようとしていました。
Amazon Linuxであれば手放しですが、CentOSで稼働しているインスタンス群で実現する必要がありました。
先人の苦悩
すでに悩んでい(る|た)方の試行錯誤をなぞります。
汎用的に落としこむ部分がやはりみなさん悩ましかったようです。(※1)
もう一度ENIについて考えてみた(Linux編)
EC2(CentOS6)起動時に2つの別々サブネットのENIと通信できるようにしてみた
※1:案外最近の記事がないので、すでに興味の持たれない分野なのでしょうか
Amazon Linuxはどうやって実現しているか
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-eni.html
ec2-utilsというツールが実装されていて、そのスクリプト群でENIのアタッチ・デタッチを認識して処理を行っているようです。
実践
ソースコードの入手
Amazon Linuxが稼働しているインスタンスでソースコードを取得します。
get_reference_source -p ec2-utils
ec2-utils-0.4-1.22.amzn1.src.rpm
(2015年6月16日現在)をどうにかして作業環境へ移します。
ソースコードの展開
rpm -ivh ec2-utils-0.4-1.22.amzn1.src.rpm
rpmbuild/
が作成され、rpmbuild
を実施するファイル群が設置されます。
rpmbuildを実施する
rpmbuildでrpmを作成します。
CentOS6/RHEL6の場合のコマンド
rpmbuild -ba SPECS/ec2-utils.spec
CentOS7/RHEL7の場合のコマンド
CentOS7はsystemd
で稼働しますので、以下のように指示します。
rpmbuild -ba --without upstart SPECS/ec2-utils.spec
specファイルにも以下のような記述がありました(抜粋)。
%bcond_without upstart
%if %{with upstart} Requires: upstart %endif
rpmをインストールする
作成されたrpmをEC2インスタンスで動くCentOS/RHELへインストールします。
以下にCentOS6での実施例を示します。
rpm -ivh ec2-utils-0.4-1.22.el6.noarch.rpm ec2-net-utils-0.4-1.22.el6.noarch.rpm
Enjoy!