AWS Lambda PythonでLambda関数実行サーバのネットワーク速度テストをspeedtest-cliを用いて行う
AWS Lambdaを使用する上でLambda関数を実行するサーバがどの程度の性能を持っているかは気になるところです。
CPUやメモリについては「cat /proc/cpuinfo」や「cat /proc/meminfo」で確認できますが、ネットワークの速度については実測してみないことにはわかりません。
特にAWS Lambdaをリージョン間をまたいだバッチ処理などに使用する際にはネットワーク速度は重要になってきます。
そこで今回はAWS Lambda PythonでLambda関数実行サーバのネットワークスピードテストを行う方法を備忘録として記載しておきたいと思います。
AWS Lambda PythonでLambda関数実行サーバのネットワーク速度テストをspeedtest-cliを用いて行う
AWS Lambda Python関数speedtestの作成
[magtranetwork@localhost ~]$ mkdir -p speedtest [magtranetwork@localhost ~]$ cd speedtest [magtranetwork@localhost speedtest]$ curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
[magtranetwork@localhost speedtest]$ vim lambda_function.py # -*- coding:utf-8 -*- import commands import os print('Loading function') #Linuxのシェルコマンドを実行する関数 def _(cmd): return commands.getoutput(cmd) #Lambdaメイン関数 def lambda_handler(event, context): #テストイベントJSONにserver_listのキーがあり、要素が空でなければlist表示 if event.has_key("server_list") == True and event["server_list"] != "": #server_listの要素を検索ワードとしてlistの結果を検索 search_key = event["server_list"].strip() print(_("./speedtest-cli --list | grep " + search_key)) return #テストイベントJSONにserver_numberのキーがない、または要素が空であればserverを指定せずに実行 if event.has_key("server_number") == False or event["server_number"] == "": print("Exec: ./speedtest-cli") print(_("./speedtest-cli")) else: #テストイベントJSONにserver_numberのキーがあり、要素が空でなければserverがlistに存在するかを確認 server_number = event["server_number"].strip() is_server=_("./speedtest-cli --list | grep " + server_number + "\) | wc -l").strip() #server_numberがlistに存在すればserverを指定して実行、存在しなければエラーで終了 if is_server == "1": print("Exec: ./speedtest-cli --server " + server_number) print(_("./speedtest-cli --server " + server_number)) else: print("Inputed server number is invalid.")
[magtranetwork@localhost speedtest]$ chmod 777 -R * [magtranetwork@localhost speedtest]$ zip -r speedtest.zip *
AWS Lambda Python関数speedtestのテストイベントの指定方法
上記で作成したspeedtest.zipを実行する際にはイベント情報として下記のようにキーと要素を指定することで、サーバリストの検索、サーバ番号を指定してのネットワークスピードテストを行うことができます。
サーバ番号のlistを表示する場合はserver_listキーにサーバリストから検索したい文字列(Japan, Tokyoなど)を要素として指定して実行する。
{ "server_list": "Japan", "server_number": "" }
サーバを指定してネットワークスピード測定をする場合はserver_numberキーに使用したいサーバ番号を要素として指定して実行する。
{ "server_list": "", "server_number": "6424" }
サーバを自動選択してネットワークスピード測定をする場合はキーに何も入力せず実行する。
{ "server_list": "", "server_number": "" }Reference: Tech Blog citing related sources