FX 取引をするボットを Rust で書いて、1 年くらい動かしている。
もともと興味があったので勉強がてら Rust を使ってみたのだが、Rust にして良かったと思っている。よく言われる話だが、Rust は速く、安全で、それでいて書き心地が良いので、お気に入りのプログラミング言語になった。
運用面では、シングルバイナリを吐き出せるので、本番サーバーにはファイルを置くだけで、何もインストールする必要がないのも嬉しい。 AWS で t2.micro
な EC2 インスタンスで動かし続けているが、いままで全くトラブルになったことが無い。ちなみに EC2 でやっているのは安いからで、ECS なども検討したが、やはり EC2 が最安だった。
デプロイは GitHub Actions 上で行っている。やっていることは、素の Ubuntu で動くシングルバイナリを生成して、 Ansible で配置するだけ。かなり前に作ったもので、 toolchain やキャッシュの設定を見直したところ、設定ファイルは簡潔になり、ビルド時間も 10 分から 3 分に短縮された。
自分の中のテンプレとして残しておく。
|
|
少しだけ解説。
- キャッシュに関しては
Swatinem/rust-cache@v1
を使っていたが、なぜかキャッシュが効いていなかった- 単純に
target
と~/.cargo
をキャッシュするようにしたら良くなった
- 単純に
- musl-tools を入れないと
ring
のビルドで失敗する- 作っているものによっては、 apt-get の部分は不要かもしれない
- 最後の Ansible のところは、構成に合わせて
rsync
なりdocker build
なりに変更すれば良い
ちなみに Ansible の Playbook では下記を行っている。
- 生成したシングルバイナリを本番サーバーの
/usr/local/bin
に配置 - 環境変数を設定
systemd
サービスの登録と起動
Ansible は GitHub Actions で最初からインストールされていて使いやすいのと、構成管理とデプロイを同時にできるのが気に入っている。
Rust のアプリケーションについても、このブログに適宜投稿していきたい。