注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Marketplace の関数

Foundry DevOps を使用すると、Marketplace 製品に関数を含め、ほかのユーザーがインストールして再利用できるようにできます。

製品に関数を追加する

製品に関数を追加するには、製品を作成します。次に、以下に示すように関数の出力を追加します。

関数の出力を追加します。

関数とバージョンを選択するダイアログが表示されます。

関数を検索します。

モデル関数を含める

モデルのデフォルトブランチ上の直接デプロイを元にしているモデル関数をパッケージ化できます。関数を出力として追加すると、そのモデルバージョンとライブデプロイへの依存関係が含まれます。また、モデルをパッケージ化するときに、ライブデプロイをパッケージ化ではいを選択すると、関数を自動的に含めることもできます。

インストールされた関数は、宛先環境のモデルとデプロイを使用します。関数が推論リクエストを処理するには、デプロイが実行されている必要があります。パッケージ化の要件、バージョンの選択、アップグレード時の動作については、Marketplace のモデル関数を参照してください。起動オプションについては、ライブデプロイのインストールを参照してください。

コードリポジトリのソースコードを含める

コードリポジトリで作成された関数をパッケージ化すると、その基となるリポジトリが追加の出力として製品に自動的に含まれます。コードリポジトリをソースコードとともにパッケージ化することもできますが、ブートストラップモードでのインストールを想定していない製品では、通常、ソースコードを含めることは推奨しません。これは、Marketplace からインストールされた関数は、正常に実行するために基となるソースコードを必要としないためです。また、コードリポジトリは、そのままコンパイルまたはビルドできるとは限りません。

インストール後に関数を変更する場合(たとえば、バグの修正や機能の拡張)は、元の関数に変更を加え、Marketplace 製品の新しいバージョンをリリースしてから、インストールをアップグレードすることを推奨します。インストールした製品を所有していない場合は、バグ報告や機能リクエストを添えて、その製品のメンテナーにお問い合わせください。

拡張関数実行の要件

拡張実行機能を使用する関数には、Marketplace でのインストールに追加の要件があります。これらの機能には、関数内からのアクションの呼び出しや、有効期間(TTL)が延長された認証トークンの取得が含まれます。インストール前に、管理者は Control Panel の関数設定にある拡張関数実行の許可リストに宛先プロジェクトを追加する必要があります。

許可リストの設定手順については、関数設定を参照してください。

バージョンと API名の解決

Marketplace 経由で関数をインストールするとき、バージョンと API名を解決する方法には、重複排除モードと安定モードの2つがあります。

重複排除モード

これは、Marketplace 経由でインストールするときに関数のバージョンと API名を解決する、従来からのデフォルトの動作です。

重複排除モードでは、関数のバージョンは次のように解決されます。

  • インストールによって関数が初めて作成されると、その最初のバージョンは 0.1.0 として公開されます。
  • アップグレードなどの後続のインストールでは、関数の最新バージョンのマイナーバージョンを1つ増やしたバージョンで関数が公開されます。たとえば、インストールされた関数の最新バージョンが 1.1.0 の場合、次のインストールでは 1.2.0 として公開されます。

関数のバージョンは不変です。つまり、関数のバージョンは一度公開されると、変更も上書きもできません。

関数の API名はオントロジーごとに一意であるため、重複排除が必要です。API名が myFunction の関数がオントロジー内にすでに存在する場合、そのオントロジー内のほかの関数は同じ API名を使用できません。

関数の API名は次のように解決されます。

  • インストール先のオントロジー内で、その API名がすでに別の関数に紐づいている場合、連番の整数の接尾辞を追加することで API名の重複を排除します。たとえば、API名 myFunction がすでに使用されている場合、関数は API名 myFunction1 でインストールされます。その API名も使用されている場合は API名 myFunction2 でインストールされ、以降も同様に処理されます。
  • インストールされた関数に API名が設定されると、アップグレードなどの後続のインストールでも、その API名が維持されます。

安定モード

ベータ版

安定モードは開発のベータ版段階にあり、お使いのエンロールメントでは利用できない場合があります。開発が活発に進められている間は、機能が変更される可能性があります。お使いのエンロールメントで有効にするには、Palantir サポートにお問い合わせください。

バージョンと API名は、関数の API に不可欠な要素です。そのため、Marketplace 経由でパッケージ化してインストールする際には、多くの場合、これらを維持することが望まれます。特に、Developer Console アプリケーションのように、関数の依存関係を静的に参照する上流アプリケーションとともに関数をインストールする場合は重要です。

Compute Module 関数は Foundry 内で独自のバージョン管理の動作を持つため、安定モードに対応していません。

安定モードでは、関数のバージョンは次のように解決されます。

  • インストールされた関数は、常にパッケージ化されたバージョンで公開されます。
  • インストールされた関数にそのバージョンがすでに存在する場合は、まったく新しい関数が作成されます。古い関数は非表示になり、その API名は削除されます。

バージョンの競合を解決するために新しい関数を作成すると、上流アプリケーションに影響します。上流アプリケーションが同じインストールの一部である場合、新しい関数を参照するように自動的に更新されます。それ以外の場合は、手動で更新する必要があります。

関数の API名は次のように解決されます。

  • インストールされた関数は、常にパッケージ化時の API名で公開されます。
  • その API名がすでに別の関数で使用されている場合、インストールエラーが発生します。この競合を解決するには、既存の関数を削除するか、その API名を変更する必要があります。

デプロイ済み関数

関数は、サーバーレス実行モードで実行されるか、長時間稼働するコンテナにデプロイされます。Marketplace は、関数自体とともに、その関数のリポジトリの実行モードをパッケージ化するため、インストールされた関数は、パッケージ化された環境と同じ方法で実行されます。

Marketplace が関数の実行モードをパッケージ化する仕組み

関数の実行モードはリポジトリごとに設定され、Marketplace は同じデプロイで実行されるすべての関数に対して、その実行モードを1回だけパッケージ化します。

デプロイモードのリポジトリについては、Marketplace は環境変数、リソースのリクエストと上限、スケーリングの上限、およびその他の主要なデプロイ設定の詳細を取り込みます。

Marketplace はコンテナイメージを固定値としてパッケージ化しません。代わりに、インストール時に、インストールする関数のバージョンからコンテナイメージを解決するため、インストールされたデプロイでは、常にインストールされた関数のイメージが実行されます。

リポジトリがデプロイモードになっている関数をパッケージ化するには、そのリポジトリのデプロイが存在し、パッケージ化する関数のバージョンがそのデプロイで実行されている必要があります。そうでない場合、パッケージ化に失敗します。これを解決するには、パッケージ化するバージョンが実行されるようにデプロイを開始または更新するか、リポジトリをサーバーレス実行に切り替えます。

Marketplace がインストール時に設定を適用する仕組み

製品をインストールまたはアップグレードすると、Marketplace はパッケージ化済みの実行モードとデプロイ設定を宛先環境に適用します。これは、インストールのロックを解除し、製品がパッケージ化された環境に合わせて実行を手動で設定することと同じです。

パッケージ化済みのモードがデプロイの場合、Marketplace は、インストールされたリポジトリのデプロイがまだ存在しなければ作成し、パッケージ化済みのデプロイ設定を適用して、デプロイを開始します。

パッケージ化済みのモードがサーバーレスの場合、Marketplace はインストールされたリポジトリをサーバーレス実行に設定します。そのリポジトリのデプロイがすでに存在する場合、Marketplace はインストールを停止します。

サーバーレス関数は、すべてのエンロールメントで利用できるとは限りません。製品が関数をサーバーレスモードでパッケージ化していても、宛先環境でサーバーレス実行を利用できない場合、その関数は代わりにデプロイモードでインストールされます。この場合、Marketplace はデフォルト設定でデプロイを作成し、開始します。これにより、インストールされた関数をデプロイ済み関数として実行できることが保証されます。

コンピューティングコスト

デプロイ済み関数ではデプロイが実行されている間、コンピューティングコストが発生しますが、サーバーレス関数では実行時にのみコストが発生します。そのため、宛先環境がサーバーレス実行に対応していないことを理由にデプロイモードでインストールされたサーバーレス関数には、長時間稼働するデプロイのコンピューティングコストが発生します。

Marketplace のデプロイ済み関数の制限事項

Marketplace のデプロイ済み関数には、次の制限事項があります。

同時にデプロイできる関数のバージョンは1つのみ

デプロイでは、関数の単一のバージョンを実行します。デプロイ済み関数を含む Marketplace 製品をアップグレードすると、その関数は新しいバージョンで再公開され、以前にデプロイされていたバージョンに代わって、その新しいバージョンが自動的にデプロイされます。

アップグレード対象のインストールに含まれない製品は、そのアップグレードでは更新されません。これには、外部製品と、Marketplace 製品にもリンクされた製品にも含まれない製品が該当します。これらの製品がデプロイ済み関数の特定のバージョンを参照している場合、その参照は引き続き古いバージョンを指します。同時にデプロイできる関数のバージョンは1つだけであるため、古いバージョンの関数への参照はエラーを返すようになります。

これを回避するには、次の対応が必要です。

  • デプロイ済み関数を利用するリソースを同じ製品またはリンクされた製品にパッケージ化し、関数とともにアップグレードされるようにします。
  • 可能な限りサーバーレス実行を使用します。サーバーレス関数では、関数の異なるバージョンをオンデマンドで実行できるため、アップグレードによって以前のバージョンへの参照が無効になることはありません。

アップグレード中にデプロイが再起動する

デプロイ済み関数を実行する長時間稼働コンテナへの変更の中には、設定されているソースの更新など、コンテナの実行中には適用できないものがあります。このため、Marketplace 製品のアップグレードの一環としてデプロイがアップグレードされるたびに、デプロイが停止して再度開始され、関数にダウンタイムが発生する場合があります。

関数の固定入力

この機能は TypeScript v1 でのみサポートされています。

Marketplace 製品に同梱される関数の「固定」入力をオーバーライドする、ローカルで定義した関数を指定することで、インストール時に関数の動作の一部を変更できます。これを行うには、@Static デコレーターを使用して、特定の関数をオーバーライド可能として指定します。

import { Function, Static, Double } from "@foundry/functions-api";

export class MyFunctions {

    @Function()
    public async modifyNumberByStaticFoo(
        n: Double,
        @Static() staticFunctionInput: (num: Double) => Promise<Double> = this.defaultFoo
    ): Promise<Double> {
        return await staticFunctionInput(n);
    }

    private async defaultFoo(n: number) {
        return -n;
    }

}

関数をパッケージ化すると、固定入力はインストール時に関数の入力として表示されます。インストール担当者は、デフォルトの動作をオーバーライドする独自の関数ロジックを指定できます。

オーバーライドされた固定入力の関数内では、クエリの呼び出しや API 呼び出しに対応していません。

カスタムエイリアス

カスタムエイリアスには、設定パラメーター、機能フラグ、環境固有の設定などの文字列値を格納します。カスタムエイリアスを持つ関数を Marketplace 製品に追加すると、エイリアスは入力値の下に設定可能なパラメーターとして自動的に表示されます。インストール担当者は、関数のソースコードを変更せずに、環境固有の値を設定できます。

カスタムエイリアスは、TypeScript v2 および Python の関数でサポートされています。関数の固定入力とは異なり、カスタムエイリアスには次の特徴があります。

  • TypeScript v2 と Python の両方で動作します
  • インストール担当者が関数ロジックではなく文字列値を設定できます
  • Marketplace のインストール画面で説明とプリセット値を利用できます

関数でカスタムエイリアスを定義して使用する方法の詳細については、カスタムエイリアスを参照してください。

モデルエイリアス

モデルエイリアスを通じて言語モデルを参照する関数を Marketplace 製品に追加できます。Marketplace では、これらのエイリアスに特定の制限があります。

モデルエイリアスは、インストール時に再マッピングできません。エイリアスが参照するモデルを対象環境で利用できない場合、関数は実行時にエイリアスの解決に失敗します。

インストール時に設定可能なパラメーターとして表示されるカスタムエイリアスとは異なり、Marketplace はソースリポジトリに設定されたモデル RID と完全一致する RID を使用して、実行時にモデルエイリアスを解決します。製品をインストールするすべての対象環境で、エイリアスが参照するモデルを利用できることを確認してください。

既知の問題

Marketplace 関数のインターフェース入力

入力パラメーターとしてインターフェースを受け取る関数は、対象環境で MarketplaceSdkObjectMappingNotFound エラーをスローする場合があります。Marketplace では、SDK バインディングにインターフェースだけでなく、具象オブジェクトタイプも含める必要があります。

関数がインターフェース入力を宣言しており、対象環境にそのインターフェースを実装する具象タイプのオブジェクトが存在する場合、SDK はその具象タイプのマッピングを見つけられません。その結果、関数は実行時に失敗します。

回避策: 対象環境で使用される具象オブジェクトタイプがソース環境にも存在することを確認し、そのタイプを Marketplace でパッケージ化する SDK に明示的に含めます。これにより、必要なマッピングが生成され、関数がそのオブジェクトタイプを解決して使用できるようになります。