LambdaからEC2への疎通確認

EC2の生存監視や、経路監視をしたい時にLambdaを監視元とできないか?と考えてみました。
監視元の可用性を考えてLambdaありかなって思ったんです。

結論:TCPのコネクションで確認はできるが、Ping監視はできない。
・Pingが打てない理由は、簡単に言うと実行環境(amazonlinux2)でLambdaの権限はrootでなく、OSで必要な権限が不足しているためOS側でPermissonErrorとなる。
こちらのようにICMPパケットを作成する場合も同様で、RAWソケットの作成にはroot権限が必要です。

Lambda関数サンプル

ポイント

こちらこちらを参考に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")