公開日:2020.01.28

AWS CLI等でEC2に紐づいているパブリックIPアドレスがEIPか否かを見分ける

テクログaws

??????! ?? ????(????) ????

ナマステー!

こんにちは。インフラ担当のまつやです。

前日までに新たに起動したEC2があり、それが監視が必要なものであるならば自動でZabbixに登録する

スクリプトを毎日動かしています。

aws cli等でインスタンスの情報を取得して以下の情報を抜き出します。

Reservations[].Instances[].NetworkInterfaces[].Association[].PublicIp

これでパブリックIPの付与されたインスタンスをピックアップし、別条件でZabbixのホストに登録するか否かを

判定し、Zabbixに登録がなければ登録しています。

しかし最近、自動でZabbixにホスト登録されたはずのEC2が見つからないという事象が発生しました。

上記で抜き出したパブリックIPが見つからない・・・どのEC2にも紐づいていないし、EIPを検索しても見つかりません。

色々調べた結果、どうやらAuto ScalingグループのEC2インスタンスがスケールアウトしてローンチする際、

予約しておいたEIPに紐づけされる前に、動的に割り当てられるパブリックIPアドレスを検知してZabbixのホストとし

て登録してしまっていることが分かりました。その後予約してあったEIPが紐づけられたために、一時的に割り当てら

れていたパブリックIPは解放されたのでどこを探しても見つからないわけです。

ということは、動的に割り当てられるパブリックIPと、EIPを区別することができればZabbixに登録するか否かを判定

することができそうです。

aws ec2 describe-instancesでインスタンスリストを取得して探していると、それらしいものがありました。

Reservations[].Instances[].NetworkInterfaces[].Association[].IpOwnerId

{
  "Reservations": [
    {
      "Groups": [],
      "Instances": [
        {
   中略
             "NetworkInterfaces": [
             {
               "Association": {
                 "IpOwnerId": "XXXXXXXXXXXX",
                 "PublicDnsName": "ec2-XXX-XXX-XX-XXXX.ap-northeast-1.compute.amazonaws.com",
                 "PublicIp": "XXX.XXX.XXX.XXX"
               },

IPの所有者のIDですね。

この値がAWSアカウントのIDになっていればEIP,amazonになっていれば動的に割り当てられるパブリックIPということに

なります。

これによって、IpOwnerIdがamazonである場合はZabbixホストに登録しないという処理をスクリプトに入れることができ

ました。

それではまた!??? ???????!

この記事を書いた人

まつや

入社年2019年

出身地宮城県

業務内容インフラ

特技または趣味インフラ

まつやの記事一覧へ

テクログに関する記事一覧