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
