~~NOCACHE~~ ## LambdaからEC2への疎通確認 EC2の生存監視や、経路監視をしたい時にLambdaを監視元とできないか?と考えてみました。 監視元の可用性を考えてLambdaありかなって思ったんです。 結論:TCPのコネクションで確認はできるが、Ping監視はできない。 ・Pingが打てない理由は、簡単に言うと実行環境(amazonlinux2)でLambdaの権限はrootでなく、OSで必要な権限が不足しているためOS側でPermissonErrorとなる。 ・[[http://www.kitagami.org/v2017/_build/html/v2016/Technology/Ping.html|こちら]]のようにICMPパケットを作成する場合も同様で、RAWソケットの作成にはroot権限が必要です。 ### Lambda関数サンプル #### ポイント ・[[Aws:Lambda:LambdaIPCreatedInVPC|こちら]]や[[Aws:Lambda:PublicAccessFromLambda|こちら]]を参考にLambdaはVPC内に配置してください。 ・socket.setdefaulttimeout:Connectionタイムアウトを指定しています。(秒) #### コード 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") {{tag>AWS Lambda Python}}