AWS Lambda PythonでLambda関数実行サーバのネットワーク速度テストをspeedtest-cliを用いて行う

12月 6, 2016AWS,Lambda,Programming,Python

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の作成

[mag4j@localhost ~]$ mkdir -p speedtest
[mag4j@localhost ~]$ cd speedtest
[mag4j@localhost speedtest]$ curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
[mag4j@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.")
[mag4j@localhost speedtest]$ chmod 777 -R *
[mag4j@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