AWS + Python

AWS には AWS Gateway と呼ばれる API を立てるための仕組みが存在する。

ただ、これはデフォルトだとどうも決まりきった定型文のようなものしか返せない。

受け取ったリクエストからなにかデータを作成して返すためには EC2 などと連携する必要があるようだ。

そこで稼働中の EC2 サーバで Python を動かしその結果を返すための API を作成することにした。

仕組み

仕組みとしては上図のような感じ。

EC2 内で Python コードを動かして API のような動作をさせておき、EC2-Gateway 間でデータのやり取りをおこなう。外部のクライアントは直接 EC2 の API を叩くことはできず、あくまでも Gateway を介するようにする。

こうすることでアクセス禁止やアクセス頻度制限などは Gateway のみで設定できるようになるはずである。

Python コード

Python で API を立てる方法についてはPython で REST API をサクっと実装 (opens new window)の記事が大変参考になりました。

X-Product Version

Nintendo Switch Online にログインするために必要な X-Product Version を自動更新する API は以下の通り。

from flask import Flask, jsonify, abort, make_response
api = Flask(__name__)
@api.route("/version", methods=["GET"])
def get_version():
    result = {
        "x_product_version": "1.12.0",
        "api_version": "20211004"
    }
    return make_response(jsonify(result))
@api.errorhandler(404)
def not_found(error):
    result = {
        "error": "Not found"
    }
    return make_response(jsonify(result))
if __name__=="__main__":
    api.run(host="localhost", port=3000)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

これだけで API が立てられてしまうので便利というほかない。