現時点では、一意の ID でコンテナを取得し、そのあと起動することで手動スケールします。コンテナの取得だけでは、自動では起動しません。
// get and start two container instances
const containerOne = getContainer(
env.MY_CONTAINER,
idOne,
).startAndWaitForPorts();
const containerTwo = getContainer(
env.MY_CONTAINER,
idTwo,
).startAndWaitForPorts();各インスタンスは、sleepAfter の時間が経過するか、手動で停止するまで実行されます。
この動作は、コンテナインスタンスのライフサイクルを明示的に制御したいときに便利です。たとえば、特定ユーザー向けにコンテナバックエンドを起動する、AI が生成したコードを隔離するためにコードサンドボックスを短時間動かす、短命のバッチジョブを実行する、といった用途です。
複数のコンテナインスタンスを動かし、その間でリクエストをルーティングしたい場合は、getRandom ヘルパー関数を使います。
import { Container, getRandom } from "@cloudflare/containers";
const INSTANCE_COUNT = 3;
class Backend extends Container {
defaultPort = 8080;
sleepAfter = "2h";
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const containerInstance = await getRandom(env.BACKEND, INSTANCE_COUNT);
return containerInstance.fetch(request);
},
};ステートレスな複数のコンテナインスタンスへルーティングするには getRandom を使います。リクエストごとに N 個のインスタンスから 1 つをランダムに選びます。つまり次のとおりです。
- ルーティング先のインスタンス数を、利用者が固定で設定する必要があります。
- 所在地に関係なく、各インスタンスをランダムに選びます。
組み込みのオートスケールとルーティング機能で、これらの制約を近いうちに解消する予定です。