コアコンセプトアーキテクチャ

アーキテクチャ

Lizard は、デプロイするリソースを 3 層で管理します。マネージドアドオンはプロジェクトに追加します。

workspace
└── project
    ├── service (app)          ← built from GitHub or an upload
    ├── service (worker)       ← background job, no HTTP port
    └── addons
        ├── postgres
        ├── redis
        └── s3

ワークスペース

ワークスペース は、アカウントや組織ごとに課金、メンバー、プロジェクトをまとめる単位です。ユーザーは少なくとも 1 つに所属します。アクセスできるワークスペースを一覧表示するには、次を実行します:

lizard workspace list
lizard whoami        # shows your active workspace

複数のワークスペースに同名のプロジェクトがある場合に区別できるよう、多くのコマンドは -w, --workspace <ws> を受け付けます。

プロジェクト

プロジェクト は、ワークスペース内で関連するサービスとアドオンをまとめる単位です。作業ディレクトリをプロジェクトに リンク すると、CLI はそのリンクを基に対象を選びます。リンクは ~/.lizard/config.json に保存します。

lizard init --name my-project   # create or select a project, link the cwd
lizard link --project my-project  # link to an existing project
lizard status                   # show the current directory's link
lizard unlink                   # remove the link
lizard project list             # all projects in the workspace

ヒント: プロジェクトにはリポジトリ名またはディレクトリ名を使い、サービスには用途がわかる名前(api、worker、web)を使ってください。

サービス

サービス はデプロイの単位です。ソースは次のいずれかです:

  • github:接続された GitHub リポジトリ。追跡対象ブランチへの push により自動で再デプロイされます。
  • upload:lizard up でアップロードされた tarball。

各サービスは 隔離された Pod で動作します。ネットワークポリシーはデフォルトで通信を拒否し、生成ドメイン <name>-<suffix>.onlizard.com(古いサービスは <words>.<region>.onlizard.com を維持)と自動 TLS が付属します。コンテナは利用者が用意し、Lizard が実行します。この container as a service という仕組みと、利用者が管理する範囲をブログで説明しています。サービスの確認と管理には次を使います:

lizard ps                       # list services with status + URL
lizard service show             # full config as JSON
lizard service set <svc> --set <field>=<value>
lizard service rename <new-name> --service <svc>
lizard service delete --service <svc>

サービスの設定フィールドは フラット で、API のスキーマに 1:1 で対応しています(例: repoUrl、branch、buildCommand、startCommand、containerPort、rootDirectory)。build.* / deploy.* のようなネストはありません。完全な一覧は lizard service を参照してください。

App と worker service

デフォルトのサービスは、ポート(既定値は 3000)で待ち受け、割り当てたドメインで公開する HTTP アプリ です。キューコンシューマー、reconciler、ポーリングループなど、ポートで待ち受けないサービスは、containerPort=0 を設定して worker mode で実行します。ワーカーはポートの注入、ポートのヘルスチェック、ロードバランサーへの登録を行いません。

マネージドアドオン

アドオン は、プロジェクトごとに作成する Managed Postgres、Managed Redis、および Managed Object Storage(S3 互換)です:

lizard add postgres redis s3

各アドオンは決まった環境変数を公開し、サービスはそれらを 参照(${{<addon-name>.KEY}})によって利用します。Managed Addons を参照してください。

リソース間参照

サービスまたはアドオンの値は、別のリソースの環境変数から次の形式で参照できます:

${{<name>.<KEY>}}

Lizard はデプロイ時に、参照先の環境変数を統合した値を使って参照を解決します。参照先は 現在の名前 で指定します。サービスやアドオンの名前を変えた場合は、古い名前を使う参照をすべて更新してください。参照先やキーが存在しない場合は空文字列になります(デプロイは失敗しません)。エラーになるのは循環参照の場合だけです。

# Wire a service to the project's Postgres
lizard secrets set DATABASE_URL='${{postgres.DATABASE_URL}}' --service api

参照の解決結果を確認してください。ビルドログには空の値になった参照の警告が出力され、secrets list には保存されている内容が表示されます:

lizard logs --build --service api
lizard secrets list --service api --show

プラットフォーム注入変数

すべてのサービス は自動的に次の変数を受け取ります(これらは上書きできません):

変数説明
PORTアプリが待ち受けるべきポート(worker mode では省略)
LIZARD_SERVICE_NAMEサービス名
LIZARD_PROJECT_IDプロジェクト ID
LIZARD_PUBLIC_DOMAINサービスの公開ドメイン(ドメインの割り当て時に設定)
LIZARD_PRIVATE_DOMAINサービスのプライベートホスト名 <host>.lizard.internal。同じプロジェクトから到達できます

独自の変数との関係と優先順位については 変数 & Secrets を参照してください。

更新日