~~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}}