EC2の生存監視や、経路監視をしたい時にLambdaを監視元とできないか?と考えてみました。
監視元の可用性を考えてLambdaありかなって思ったんです。
結論:TCPのコネクションで確認はできるが、Ping監視はできない。
・Pingが打てない理由は、簡単に言うと実行環境(amazonlinux2)でLambdaの権限はrootでなく、OSで必要な権限が不足しているためOS側でPermissonErrorとなる。
・こちらのようにICMPパケットを作成する場合も同様で、RAWソケットの作成にはroot権限が必要です。
import socket host = "10.0.0.10" port = 22 def lambda_handler(event, context): socket.setdefaulttimeout(0.1) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex((host,port)) sock.close() if result == 0: print("Port", port, "is open") else: print("Port", port, "is not open") if __name__ == '__main__': lambda_handler("event", "context")