信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

2020

28

1月

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

テクログ

नमस्ते! आप कैसे(कैसी) हैं?

ナマステー!


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


前日までに新たに起動した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ホストに登録しないという処理をスクリプトに入れることができ

ました。



それではまた!फिर मिलेंगे!


この記事を書いた人

マスオさん

まつや

所 属:
WEBインテグレーション事業部
出身地:
宮城県
仕事内容:
インフラ