2020.01.28
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
??????! ?? ????(????) ????
ナマステー!
こんにちは。インフラ担当のまつやです。
前日までに新たに起動した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ホストに登録しないという処理をスクリプトに入れることができ
ました。
それではまた!??? ???????!