注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Compute Module 向けの TypeScript SDK(@palantir/compute-module)を使用すると、TypeScript または JavaScript でデプロイ済み関数を構築できます。この SDK は、スキーマ検証を伴う型安全な関数登録、構造化ロギング、および Foundry リソースを扱うためのユーティリティを提供します。
TypeScript SDK は次の機能を提供します。
ComputeModule:関数を作成および登録するためのメインクラスSlsLogger:SLS 形式の構造化ロギングType(@sinclair/typebox から):実行時の型検証とスキーマ生成npm または yarn を使用して SDK をインストールします。
Copied!1npm install @palantir/compute-module
Copied!1yarn add @palantir/compute-module
素の JavaScript を使用して関数を登録します。
Copied!1 2 3 4 5 6import { ComputeModule } from "@palantir/compute-module"; new ComputeModule() .register("addOne", async ({ value }) => ({ value: value + 1 })) .register("stringify", async ({ n }) => "" + n) .default(() => ({ error: "Unsupported query name" }));
TypeBox ↗ を使用すると、スキーマの自動推論を伴う型安全な関数登録ができます。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16import { ComputeModule, SlsLogger } from "@palantir/compute-module"; import { Type } from "@sinclair/typebox"; const myModule = new ComputeModule({ logger: new SlsLogger(), definitions: { addOne: { input: Type.Object({ value: Type.Number(), }), output: Type.Object({ value: Type.Number() }), }, }, }); myModule.register("addOne", async ({ value }) => ({ value: value + 1 }));
スキーマ登録の利点:
結果セットが大きい場合は、ストリーミングを使用してデータを順次送信します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18import { ComputeModule } from "@palantir/compute-module"; import { Type } from "@sinclair/typebox"; const computeModule = new ComputeModule({ definitions: { greet: { input: Type.Object({ name: Type.String() }), output: Type.Array(Type.String()), }, }, }); // 書き込みごとに有効な JSON を生成する必要があります computeModule.registerStreaming("greet", async ({ name }, writeable) => { writeable.write(JSON.stringify("Hello, ")); writeable.write(JSON.stringify(name)); writeable.end(); });
複雑なデータ型を使用したストリーミング:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23const User = Type.Object({ name: Type.String(), role: Type.String(), active: Type.Boolean(), }); const computeModule = new ComputeModule({ definitions: { activeUsers: { input: Type.Object({ users: Type.Array(User) }), output: Type.Array(User), }, }, }); computeModule.registerStreaming("activeUsers", async ({ users }, writeable) => { for (const user of users) { if (user.active) { writeable.write(JSON.stringify(user)); } } writeable.end(); });
ストリーミングでは、出力タイプを Type.Array(...) として宣言する必要があります。各 write() 呼び出しは、有効な JSON を生成する必要があります。
Standard Logging Specification(SLS)形式の構造化ロギングには、SlsLogger を使用します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19import { ComputeModule, SlsLogger } from "@palantir/compute-module"; import { Type } from "@sinclair/typebox"; const logger = new SlsLogger(); const myModule = new ComputeModule({ logger, definitions: { addOne: { input: Type.Object({ value: Type.Number() }), output: Type.Object({ value: Type.Number() }), }, }, }); myModule.register("addOne", async ({ value }) => { logger.info("Processing addOne", { input_value: String(value) }); return { value: value + 1 }; });
ログメソッド:
logger.debug(message, params?) - デバッグレベルのログlogger.info(message, params?) - 情報レベルのログlogger.warn(message, params?) - 警告ログlogger.error(message, params?) - エラーログカスタムのキーと値のペアを第2引数として渡すことができ、ログエントリのパラメーターに追加されます。
また、log、info、warn、error メソッドを持つ任意のオブジェクト(たとえば console)をロガーとして使用できます。
パイプラインモードでは、リソースエイリアスを使用して設定済みの入力と出力にアクセスします。
Copied!1 2 3 4import { ComputeModule } from "@palantir/compute-module"; const resourceId = ComputeModule.getResource("myResourceAlias"); const result = await someDataFetcherForId(resourceId);
実行環境の詳細を取得します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13import { ComputeModule } from "@palantir/compute-module"; const environment = ComputeModule.getEnvironment(); // Pipeline モード const buildToken = environment.type === "pipelines" ? environment.buildToken : undefined; // Functions モード const thirdPartyAppCredentials = environment.type === "functions" ? environment.thirdPartyApplication : undefined;
外部システムの認証に使用するソースの資格情報にアクセスします。
Copied!1const myCredential = myModule.getCredential("MySourceApiName", "MyCredential");
モジュールの設定でソースを宣言し、検証します。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17const myModule = new ComputeModule({ sources: { MyApi: { credentials: ["MyCredential"] }, AnotherApi: {} // ソースの存在は検証しますが、特定の資格情報は検証しません } }); // ✅ 型チェックに合格します myModule.getCredential("MyApi", "MyCredential"); // ❌ 型エラーが発生します myModule.getCredential("YourApi", "YourCredential"); // ✅ 資格情報が宣言されていないソースでは、任意の資格情報名を使用できます myModule.getCredential("AnotherApi", "AnyString");
検証: ソースが宣言されている場合、モジュールは起動時にソースを検証し、コンパイル時の型安全性を提供します。宣言されていない場合、検証は行われません。
Foundry サービス API のエンドポイントにアクセスします。
Copied!1 2 3import { FoundryService } from "@palantir/compute-module"; const streamProxyApi = myModule.getServiceApi(FoundryService.STREAM_PROXY);
これにより、プラットフォームへのイングレス用のソースを設定せずに、Foundry のエンドポイントを呼び出せます。
Copied!1 2 3 4 5 6 7 8 9 10FROM node:18-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --production COPY src . # USER は root 以外で、数値である必要があります USER 5000 CMD ["node", "index.js"]
TypeScript SDK はオープンソースで、GitHub で利用可能です。