Koyebを使ってWebサービスをコマンドラインから立ち上げる(そして失敗)

2023-04-05未分類

はじめに

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 にログインしてポチポチと設定していったほうが早そうです。

しばらくすれば安定してくるかもしれないので、また後日チャレンジしてみようと思います。

2023-04-05未分類