実現すべき目標

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!

元記事はこちら

AWS EC2で複数ENIをLinux系OSでもっと手軽に扱うための何か