- Heroku
- ECS, Fargate
- Kubernetes
- AWS Lambda / GCP Cloud Functions
- Google スプレッドシート / Google Apps Script (GAS)
Photo by Massimo Botturi on Unsplash
インフラとはインフラストラクチャ (infrastructure) の略で、ここではバックテストを実行するための環境を指す。バックテストを実際に走らせるサーバーであったり実行環境について述べる。
ローカル環境のみでバックテストを行うことはもちろん可能であるが、当然ながらマシンの電源が入っていないと、バックテストを行うことは不可能である。一方、クラウド上に環境を構築してしまえば、株価の取得からバックテストの実施、そしてレポートの受領まで全てオンライン上で完結させてしまうことができる。こういった類の仕事は、コンピュータが最も得意とする分野であり、むしろ人手が介入しない方がミスが混入しない分、信頼性が高いと言えるかもしれない。
ここではそういったことを実行可能なインフラをサービスとして提供している IaaS (Infrastructure as a Service) や、 同様にプラットフォームをサービスとして提供する PaaS (Platform as a Service) 、またはアプリケーションの紹介をしていく。
ただし、基本的には「サーバーのファイルシステム上に生のソースコードを置いて走らせる」といったようなことは、紹介しないようにしている。代わりにイメージをコンテナ化して実行させることを推奨している。詳しくは「Docker と DockerCompose」でも述べるが、これは環境ごとの差異によるイライラを無くし、不必要なところで作業の手詰まりを起こさないためである。そのために覚えたり学習したりしないといけないことは増えるが、コンテナによるサーバーアプリケーションの実行・運用は、知っておいても損は絶対にしないと言い切れるであろう。もしそれらに馴染みがなく、学習することを検討している人がいれば、是非この機会に触れてみてほしい。
Heroku
専用の cli からデプロイ操作を行うだけで、すぐにアプリケーションをクラウド上で実行できる機能を提供している。データベース (PostgreSQL) や キャッシュサーバー (Redis) もオールインワンで提供してくれるため、昔は Rails アプリケーションのホスティング目的1で利用されることが多かった。
現在は特に何かしらの言語に縛られることなく、イメージをリポジトリにプッシュすればそこからコンテナを作って自動的に実行してくれる。つまり、後述する AWS の ECS と似たようなことができる。もちろん、従来のように生のソースコードをアップロードして実行させることも可能である。その場合、公式で対応している言語は、 Node.js, Ruby, Python, Java, PHP, Go, Scala, Clojure である2。Dockerイメージであれば、これらの言語に縛られることはない3。
ECS, Fargate
Kubernetes
長いので k8s とも書かれる4。詳しく知りたい人はKubernetesとは何か? | Kubernetesを見てもらえば公式による紹介が書かれている。かいつまんでざっくり説明すると、「どのようにサービスをスケールさせるか」「どのようなリソース(サービス、ジョブ、ネットワーク、記憶装置等)をどのように配置するのか」等、Webサービスの運用に必要なリソースを統合的に管理できるプラットフォームである。
例えばサービスが異常終了してしまった場合には、自動的にそれを終了させ再度実行可能なようにしたり、冗長性を持たせるため、複数のサーバマシン上に同一のサービスを同時にデプロイし、ロードバランサでアクセスを振り分けるといったようなことができるようになる。
ただ、できることはたくさんあるのだが、裏返せば設定しないといけないことも多いということになる。運営したいサービスの規模にもよるが、小規模であれば、他の選択肢を検討した方がイニシャルコスト(時間、金)は少なく済むかもしれない。