Koyebを使ってWebサービスをコマンドラインから立ち上げる(そして失敗)
はじめに
Heroku を使おうと思った矢先、有料になったということを知りました。
代替えサービスがないか探したところ、Gin という Go 言語のフレームワークのドキュメントページで Koyeb について紹介されていました。
インスタンスタイプ nano ( CPUx1、MEMOx256GB ) が 2 インスタンスまで無料ということで、AWS EC2 の毎月の無料枠を使い切っている現状を解決してくれそうだったので早速使ってみます。
検証環境
$ uname -moi
arm64 unknown Darwin
$ zsh --version | head -n 2
zsh 5.9 (arm-apple-darwin21.3.0)
Koyeb のアカウント作成
アカウントの開設についてはここでは説明しません。
一般的な Web サービス同様の手順でアカウントの作成は完了します。
"koyeb-cli" のインストール
Koyeb のサービスはコマンドラインから操作可能なようです。
koyeb/koyeb-cli: Koyeb cli というツールを見つけたので早速試してみます。
ただし、macOS 版の Homebrew モジュールを使うとどうもコマンド実行のたびに以下のようなエラーが発生してしまう。
# 例えば、 apps list コマンドを実行する
i$ koyeb apps list
GET https://api.github.com/repos/koyeb/koyeb-cli/releases: 401 Bad credentials []
バージョンの問題の可能性もあるが深堀りせず、 go install
で導入してみました。
$ go install github.com/koyeb/koyeb-cli/cmd/koyeb@latest
こちらを使えば先のエラーが発生しなくなった。
"koyeb-cli" の補完
Zsh 上で、 koyeb
と入力後にタブを押してサブコマンドの候補が表示されると便利なので、オートコンプリートが効くように設定。
koyeb completion zsh >"${fpath[1]}/_koyeb"
上記の一行を ~/.zshrc
の末尾に追記します。
追記が終わったら zsh
を立ち上げ直すか . ~/.zshrc
などすれば反映されます。
"koyeb-cli" の使い方
help
$ koyeb --help
Koyeb cli
Usage:
koyeb [command]
Available Commands:
apps Apps
completion Generate completion script
help Help about any command
login Login to your Koyeb account
secrets Secrets
services Services
version Get version
Flags:
-c, --config string config file (default is $HOME/.koyeb.yaml)
-d, --debug debug
-h, --help help for koyeb
-o, --output string output format (yaml,json,table)
--token string API token
--url string url of the api (default "https://app.koyeb.com")
Use "koyeb [command] --help" for more information about a command.
Login
まずはセットアップを始めます。koyeb login
コマンドを実行して認証を完了させます。
これを実行しないと始まりません。
トークンの入力を求められますが、書かれているリンクページからかんたんに生成可能となっています。
➜ koyeb login
? Do you want to create a new configuration file in (/home/genzouw/.koyeb.yaml)? [y/N]
✗ Enter your api access token, you can create a new token here ( https://app.koyeb.com/account/api ): █****************************************************************
INFO[0006] Creating new configuration in /home/genzouw/.koyeb.yaml
設定ファイルが作成されていれば準備は完了です。
$ cat ~/.koyeb.yaml
debug: false
token: ****************************************************************
url: https://app.koyeb.com
サービスの起動
サービスを作成、起動してみます。
サービス作成用のコマンドは koyeb apps create
のようです。
ヘルプを見てみます。
$ koyeb apps create --help
Create apps
Usage:
koyeb apps create [name] [flags]
Flags:
-h, --help help for create
Global Flags:
-c, --config string config file (default is $HOME/.koyeb.yaml)
-d, --debug debug
-o, --output string output format (yaml,json,table)
--token string API token
--url string url of the api (default "https://app.koyeb.com")
設定項目が少ないです。
名前とフラグを与えるだけとなっています。
実行してみます。
$ koyeb apps create hello-world
$ koyeb apps list
ID NAME DOMAINS UPDATED AT
1fbb5c24-fbdf-4eeb-a64c-4509a8905b7b hello-world hello-world-genzouw.koyeb.app 2023-03-30 23:02:28.280167 +0000 UTC
いきなりなにか作成された模様。
成功しました。
ドメインも表示されているので起動しているのかもしれないです。https://hello-world-genzouw.koyeb.app
にアクセスしてみます。
エラーは出ているが、インターネット経由で先方のネットワークまで到達できた模様。
何某かアプリをデプロイしなければこのエラーは解消しないようなのでデプロイしてみることにしました。
Docker イメージをデプロイできるようなので、nginx
イメージをデプロイしてみます。
app という器の中に service を作って初めて外部にサービスを公開できるというのが Koyeb の概念のようなので、 service を作ります。
現在選択中の app を切り替えます。
# ID を確認
$ koyeb apps list
ID NAME DOMAINS UPDATED AT
498a111e-8587-4daa-a2e2-07f49fc4d79d hello-world hello-world-genzouw.koyeb.app 2023-03-31 00:10:29.379612 +0000 UTC
# 切り替える
$ koyeb apps switch 498a111e-8587-4daa-a2e2-07f49fc4d79d
INFO[0000] Switching app to hello-world 498a111e-8587-4daa-a2e2-07f49fc4d79d
# 現在選択中の app を確認
$ koyeb app current
ID NAME DOMAINS UPDATED AT
5fb0ca90-6938-48da-99e1-ede17ceb3758 coupon-code coupon-code.genzouw.com coupon-code-genzouw.koyeb.app 2023-03-30 12:22:25.70576 +0000 UTC
service を作成してみます。
$ koyeb services create hello-koyeb-service --docker nginx:latest
FATA[0000] Not Found: status:404 code:Not Found
エラーとなってしまいました。
サービスの一覧を確認するコマンドを実行してみても、やはりエラーです。
$ koyeb services list
FATA[0000] Not Found: status:404 code:Not Found
まだコマンドラインから操作するためのインターフェイスは安定していないのかなと感じます。
ひとこと
結果的に Web Console にログインしてポチポチと設定していったほうが早そうです。
しばらくすれば安定してくるかもしれないので、また後日チャレンジしてみようと思います。
ディスカッション
コメント一覧
まだ、コメントがありません