100日後にRustをちょっと知ってる人になる: [Day 58]Fermyon Cloud へのデプロイとアップグレード
Day 58 のテーマ
Day 56 と Day 57 と続いて、Fermyon のソリューションについて紹介をしました。
- Fermyon Cloud
- Fermyon Spin
この 2 日間 Fermyon に注目した理由というのは、今週 (10月 24 - 28) アメリカのデトロイトで、KubeCon + CloudNativeCon が開催されていたからなのです。
そのイベントに併せて併設開催されていたイベントに、Cloud Native Wasm Day が開催されていたのです。
このイベントは名前通り、Wasm (WebAssembly) をテーマにしたものです。様々な WebAssembly に取り組んでいる企業が参加いて先進的な内容の発表がおこなわれていました。
さて、このイベントのダイアモンドスポンサーになっていたのが、この Fermyon だったのです。(それと Docker, Inc です。)
Docker も、このイベントの中で注目を集めるアナウンスをしていましたよね。知名度で言うと Docker はやはり高いので、目にされた方も多かったのではないでしょうか。
こちらの話はまたどこかでと、この場では置いておいて、注目したのは次のセッションで Fermyon Cloud のアナウンスがあったのです。
もともと Rust を学び始めたきっかけになったのも、この Fermyon Spin を使いこなしたいなっていう思いからというのもあったので、今回の発表に注目をしていたのでした。
というわけで、今日は Day 56 に引き続き、改めて Fermyon Cloud を見てみたいと思います。
Fermyon Cloud ふたたび
Day 56 で Fermyon Cloud にログインしてデプロイをするということを行いました。
デプロイ自体は spin deploy
というコマンド 1 つで実施を行いました。とはいえ、このコマンドが発行されたあと、裏側でどのように デプロイの挙動をしているかが気になる人もきっといるのではないでしょうか。
そこの答えの鍵になるのが、Fermyon Cloud が Fermyon Platform をベースにしているという点です。
前回も紹介したように、Fermyon Platform は WebAssembly アプリケーションのためのオープンソーステクノロジーベースのクラウドアプリケーションプラットフォームです。
次のプロジェクトが利用されています。
- bytecodealliance/wasmtime
- deislabs/bindle
- deislabs/hippo
- fermyon/spin
- hashicorp/consul
- hashicorp/nomad
- hashicorp/terraform
- traefik/traefik
Fermyon Cloud デプロイの仕組み
先の OSS プロジェクトリストを見ると、詳しいかたはピンときたかもしれません。
Fermyon Cloud では、Bindle を用いて Spin アプリケーションのパッケージ化とデプロイを行っています。
Bindle とは
公式な説明として、集約オブジェクトストレージシステム (Aggregate Object Storage System) と言われています。
これだけだとなかなかよく分からないですよね。
例えば、スプーンやフォーク、おはしなどを探そうとする時に、別々のところは探さないですよね。同じところを探すと思います。このように、関連したアイテムをまとめて保管しておくことが、集約オブジェクトストレージシステムの考え方になります。
Bindle では、保管する対象のオブジェクトを コレクション として保管します。
Bindle の仕組みを理解するためには、構成する次のパーツを知っておく必要があります。
-
パーセル (parcel)
- 関連するデータの入れもの。単一のバイナリの場合もあれば、数百もの個別なデータオブジェクト (画像、ドキュメント、実行バイナリ など) の場合もあり、何が含まれるかは問いません。
-
インボイス (invoice)
- 関連付けられたパーセルのセットをリストするドキュメント
-
invoice.toml
として記載する
Bindle は 1 つ以上のパーセルとインボイスを含んで構成します。
そして、この Bindle は一度構成されると不変なものとして管理されるため、上書きすることはできません。
Bindle は各パッケージにバージョンを付けて区別をおこないます。
Fermyon Cloud でのデプロイプロセス
繰り返しになりますが、Fermyon Cloud は Fermyon Platform 上に構成されています。つまり、Bindle インスタンスをホストしています。よって、spin deploy
コマンドを実行すると Bindle を使った処理が裏で実行されます。
- アプリケーションのパッケージングと Fermyon Cloud へのアップロード
- アプリケーションの作成とアップグレード
アプリケーションのパッケージングとアップロード
まず、全てのファイルをパッケージ化して、インボイスの生成が行われます。
Bindle は spin.toml
を使用します。
- 名前
- バージョン
- ビルド文字列
など
spin_version = "1"
authors = ["shinyay <shinyay@abc.xyz>"]
description = "Sping Getting Started"
name = "hello-rust"
trigger = { type = "http", base = "/" }
version = "0.1.0"
パッケージング後、不変なオブジェクトとして扱われ Fermyon Cloud にアップロードされます。
アプリケーションの作成とアップグレード
Fermyon Cloud のアプリケーションは複数のリビジョンを持つことができ、それらはチャンネルに関連付けられます。
アプリケーションをデプロイすると、チャンネル、リビジョンの両方が Fermyon Cloud に作成されます。
アプリケーションがすでに存在する場合は、アップグレードが行われます。
新しいリビジョンが作成され、これが正常であると判断されるとすぐに、トラフィックは新しいリビジョンにルーティングし始めます。
Fermyon Cloud へのデプロイとアップグレード
あらためて、Fermyon Cloud へのデプロイとアップグレードを試してみたいと思います。
デプロイ
まず、Fermyon Cloud にログインします。
spin login
次に、spin.toml
が配置されているディレクトリからデプロイを行います。
spin deploy
Uploading hello-fermyon-cloud version 0.1.0+XXXXXXXX...
Deploying...
Waiting for application to become ready...... ready
Available Routes:
hello-fermyon-cloud: https://hello-fermyon-cloud-XXXXXXXX.fermyon.app/hello
アップグレード
次にアップグレードを行います。
バージョンを書き換えた spin.toml
を用意し、デプロイし直すことによりアップグレードが行えます。
変更前:
version = "0.1.0"
変更後:
version = "0.1.1"
修正した後、改めて spin deploy
コマンドを実行します。
spin deploy
Uploading hello-fermyon-cloud version 0.1.1+XXXXXXXX...
Deploying...
Waiting for application to become ready... ready
Available Routes:
hello-fermyon-cloud: https://hello-fermyon-cloud-XXXXXXXX.fermyon.app/hello
バージョンが上がりました。またアクセスする URL には変更がないということも確認ができました。
Day 58 のまとめ
Fermyon Cloud へのアプリケーションのデプロイの仕組みについて少し詳しく見てみました。
また、デプロイ済のアプリケーションのアップグレードも行いました。
デプロイに関して使われている技術は、Bindle ですが、一切その Bindle にふれることなく処理を行えたことはデプロイの流れを通して分かったと思います。
Discussion