[TEMPLATE-ID] をテンプレートの UUID に、[SNAPSHOT-ID] をファイルシステムスナップショット ID に、[GITHUB-ORG] を GitHub Container Registry の組織またはユーザー名に置き換えてください。
テンプレートを作成する
テンプレートは組織管理者が管理します。書き込み操作にはsandbox_admin ロールが必要です。組織内のすべてのサンドボックスユーザーはテンプレートを読み取り、それらからサンドボックスを開始できます。
- CLI
- curl
ファイルからテンプレートを作成します:既存のテンプレートを検査および一覧表示します:
template.json
displayNameは必須 で、組織のアクティブなテンプレートの中で一意である必要があります。トリミング後 1 ~ 128 文字。UUID 形式の名前は避け、ID 優先のルックアップと衝突しないようにしてください。specは部分的なサンドボックスの spec で、最大 1 MiB です。作成リクエストと同じフィールドを使用し、その内容は作成時にすべて上書きできます。specはまだインスタンスタイプを選択したり、サンドボックスのネットワークをアタッチしたりできません。instanceTypeまたはnetworkIdsを設定するテンプレートは、未実装として拒否されます。- テンプレートの内容は組織内のすべてのサンドボックス ユーザーに表示されます。 テンプレートはシークレット配布チャネルではありません。リテラルの認証情報は含めないでください。
テンプレートからサンドボックスを起動する
ID を使用してテンプレートからサンドボックスを起動します。選択は UUID のみで行えます。表示名はルックアップと一覧表示には使用できますが、作成には使用できません。Create a sandbox from a template
overrides を渡します。オーバーライドは存在するフィールド全体を置き換え、マージされません:
- 設定したメッセージは template のメッセージ全体を置き換えます。省略したメッセージは template の値を保持します。
- 設定したリストまたはマップは、template のコレクション全体を置き換えます (空に設定した場合も含む) 。1 つのエントリを削除することは、希望する内容の完全なコレクションを送信することを意味します。
- 任意のコンテナーフィールドをオーバーライドすると、コンテナーリスト全体が置き換えられます。template コンテナーのスパースパッチは存在しないため、コンテナーに触れるオーバーライドは
imageを含む完全なコンテナーを保持する必要があります。
Override the container per run
Sandbox.run_from_template() および client.runFromTemplate() としてラップします。SDK のワークフローについては、クライアントドキュメント を参照してください。
テンプレートのサンプル
以下のサンプルは、cwic sandbox template create -f template.json で使用する完全なドキュメントです。ポリシーとは異なり、1 つの組織で複数のテンプレートを保持できるため、繰り返し発生するワークロードの構成ごとに 1 つ作成できます。
パブリック HTTPS エンドポイントを持つ Web サービス
プラットフォームが発行した HTTPS エンドポイントを通じてパブリックインターネットに HTTP を提供するサンドボックス用のテンプレートです。割り当てられた URL は、作成後にサンドボックス上でエコーされます。template.json
Workspace restored from a snapshot
毎回同じファイルシステムスナップショットから開始するスクラッチボリュームを持つテンプレート:各サンドボックスがプライベートにフォークするゴールデンWorkspace。template.json
キュレートされた外向き通信
固定された送信先のセットをグラントするテンプレートです: ポート 443 上の 1 つの CIDR 範囲と、同じ組織内の兄弟サンドボックスです。すべてのルールはランナーのポリシーのallowedEgress 範囲内に当てはまる必要があります。そうでない場合、作成は拒否されます。
template.json
network.egress が空または省略されている場合、ポリシーの defaultEgress が代わりに使用されます。ワークロードの送信先がわかっている場合はテンプレートの外向き通信リストを保持し、ポリシーのデフォルトが適切なポスチャーである場合は空のままにしてください。
CKS のみ: Pod のアタッチメント
ご自身の CKS クラスターでは、Admin がテンプレートにattachments ブロックを配置できます。これは、Kubernetes の Pod 仕様フラグメントで、このテンプレートから作成されるすべてのサンドボックスに適用されます。これにより、テンプレートはノード選択、トレランス、またはサンドボックス仕様自体にフィールドがないプルシークレットを固定できます。
template.json
- アタッチメント付きのテンプレートは CKS のみです。 その
requiresCks出力フィールドは true であり、modeをSANDBOX_MODE_SERVERLESSに設定して作成するとFailedPreconditionで失敗します。モードが未設定の場合は CKS として扱われます。 - アタッチメントは Admin 所有です。
sandbox_adminのみが書き込み可能で、通常の作成リクエストでは提供できず、作成時のオーバーライドで変更または削除できません。 - フラグメントは Kubernetes JSON を使用します。
specおよびmetadataの下に camelCase のキーを使用し、テンプレート内の他のサンドボックス仕様フィールドとは異なります。不明なキーは拒否されます。 - 許可される範囲は意図的に狭く制限されています:
nodeSelector、tolerations、imagePullSecrets、volumes、topologySpreadConstraints、hostAliases、DNS 設定などのスケジューリングおよびランタイム関連の設定と、name、env、envFrom、volumeMounts、volumeDevicesに限定された単一のcontainersエントリに加え、Pod のラベルとアノテーションです。セキュリティに関わるフィールドは拒否されます:securityContext、runtimeClassName、initContainers、affinity、ホスト名前空間、hostPathボリューム、デフォルト以外のサービスアカウントなど。 - アタッチメントはポリシーの
baseフラグメントの上に重ねられます。 リスト値のフィールドはポリシーのベースと結合されます:imagePullSecretsとtolerationsは重複排除され、topologySpreadConstraints、hostAliases、readinessGatesは追加されます。nodeSelectorキーなどの単一値のフィールドはベースを特化します。2 つのレイヤー間で同じ名前のボリューム、環境変数、またはマウントパスの競合がある場合、作成は拒否されます。
テンプレートを管理する
- CLI
- curl
- 読み取りには ID または表示名を指定できます。 パスの該当部分を UUID として解析できる場合は ID で検索し、それ以外の場合は実行中のテンプレートの表示名として検索します。
- 更新が成功するたびに、テンプレートの
revisionが 1 増分されます。 サンドボックスには作成元のリビジョンが記録されるため、テンプレートの変更前に作成されたサンドボックスを特定できます。 - 削除は論理削除です。 既存のサンドボックスには影響せず、新規作成時にはそのテンプレートを選択できなくなります。また、その表示名を新しいテンプレートに再利用できるようになります。
次のステップ
- ポリシーの例: これらのテンプレートと組み合わせる完全なランナーポリシー。
- サンドボックスポリシーを設定する: テンプレートの spec が検証される制約グループ。
- ポリシー概要: テンプレートとポリシーがプロフィールの作業をどのように分担するか。
- 独自のコンピュートを使用する: ランナーのセットアップと最初のサンドボックス。