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

実行モード

関数実行モード vs. パイプライン実行モード

関数モードパイプラインモジュール
ユーザーのコンピュートモジュールを使用してロジックを関数としてホストします。これらの関数はWorkshopやDeveloper ConsoleなどのFoundryアプリケーションでオントロジー SDKと共に使用できます。Foundryの入力を読み込み、ストリーミングおよびリアルタイムメディアの使用ケースに対してFoundryの出力に書き込みます。このモジュールは、指定できるアクセスを持つジョブトークンとして渡されます。
コンピュートモジュール関数を使用してFoundryアプリケーションを強化します。Foundryのリソース許可システムを使用します。
別の関数からコンピュートモジュール関数を実行します。Data LineageアプリケーションでFoundry全体のデータプロビナンスを取得します。

関数モードの権限

プラットフォームの権限なし: オントロジー SDKやプラットフォームAPIを使用するアクセスは提供されません。 アプリケーションの権限: アプリケーションはユーザー権限に依存せずにサービスユーザーを使用して権限を使用します。

パイプラインモードの権限

Foundryジョブトークンはコンピュートモジュールに添付されます。ジョブトークンは入力および出力リソースにスコープされ、データの取得に使用できます。

関数実行モード

関数モードを使用すると、Foundry全体で使用するためのロジックをWorkshopアプリケーションやオントロジー SDKを通じてホストするためにコンピュートモジュールを使用できます。任意の言語でロジックを定義および記述し、それを関数として登録し、プラットフォーム内で関数呼び出しでこのロジックを実行できます。

関数モードは2つの権限モードを通じて動作できます:

  • プラットフォームの権限なし: アプリケーションにはプラットフォームAPIやオントロジー SDKへのアクセスは提供されません。このモードを使用してFoundryとやり取りする必要がないロジックを実行します。このモードでも外部システムへのエグレスを構成できます。詳細についてはSourcesを確認してください。
  • アプリケーションの権限: アプリケーションはその付随するサービスユーザーを使用して、プラットフォームAPIおよびオントロジー SDKへのアクセス権限を決定します。権限はコンピュートモジュールユーザーに関係なく同じままです。このモードを使用して、アプリケーション全体に対する一連の権限でFoundryとやり取りする必要があるロジックを実行します。

アプリケーションの権限を使用する

すべてのエンロールメントでアプリケーションの権限が利用できるとは限りません。

サービスユーザーを作成する

  1. コンピュートモジュールの設定ページに移動します。
  2. 実行モードの下で、アプリケーションの権限を持つ関数モジュールを選択します。
  3. コンピュートモジュールの設定を保存します。これにより、自動的にコンピュートモジュールのためのサードパーティアプリケーションが作成され、クライアントIDとサービスユーザー名が表示されます。
  4. [オプション] Control Panelサードパーティアプリケーションセクションで、必要に応じてサービスユーザーを設定し、特定のマーキングへのアクセスを制限するなどします。Control Panel

OAuth 2.0 クライアントの管理の権限を持つ組織内のユーザーのみがこの手順を実行できます。詳細については、サードパーティアプリケーションのドキュメントを確認してください。

コンピュートモジュールでサービスユーザーを使用する

  1. Foundry環境のURLへのアクセスを可能にするネットワークポリシーを持つソースを追加します。

  2. クライアントIDとシークレットを交換して、希望する権限を持つアクセストークンを取得します。

app.pyでは、コンピュートモジュールSDKを使用して:

Copied!
1 2 3 4 5 6 from compute_modules.auth import oauth # Palantir Foundryの認証を行う関数oauthを使用してアクセストークンを取得 # "yourenrollment.palantirfoundry.com" は認証サーバーのURL # ["api:datasets-read", "api:datasets-write"] は必要な権限のリスト access_token = oauth("yourenrollment.palantirfoundry.com", ["api:datasets-read", "api:datasets-write"])

コンピュートモジュール SDK なしで:

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import requests import os # 認証トークンを取得するためのPOSTリクエストを送信 token_response = requests.post("https://yourenrollment.palantirfoundry.com/multipass/api/oauth2/token", data={ "grant_type": "client_credentials", # クライアント認証方式 "client_id": os.environ["CLIENT_ID"], # 環境変数からクライアントIDを取得 "client_secret": os.environ["CLIENT_SECRET"], # 環境変数からクライアントシークレットを取得 "scope": "api:datasets-read api:datasets-write" # 必要な権限のスコープ }, headers={ "Content-Type": "application/x-www-form-urlencoded", # フォームデータとして送信 }, verify=os.environ["DEFAULT_CA_PATH"] # 環境変数からCA証明書のパスを取得してSSL/TLS検証を行う ) # レスポンスからアクセストークンを抽出 access_token = token_response.json()["access_token"]
  1. 付与されたトークンを使用して、Foundry API を呼び出します。

app.pyで:

import requests
import os

# データセットのIDを定義
DATASET_ID = "ri.foundry.main.dataset.7bc5a955-5de4-4c5f-9370-248c5517187b"

# データセット情報を取得するためのリクエストを送信
dataset_response = requests.get(
    f"https://yourenrollment.palantirfoundry.com/api/v1/datasets/{DATASET_ID}",
    headers={
        "Authorization": f"Bearer {access_token}"  # 認証トークンをヘッダーに含める
    },
    verify=os.environ["DEFAULT_CA_PATH"]  # 環境変数からCA証明書のパスを取得
)

# レスポンスからデータセット名を取得
dataset_name = dataset_response.json()["name"]
print(f"Dataset name is {dataset_name}")  # データセット名を出力

パイプライン実行モード

パイプラインモードで実行されるコンピュートモジュールは、高いデータセキュリティとプロビナンス制御を必要とするデータパイプラインワークフローの計算を容易にするように設計されています。パイプラインモードは、Foundry の入力を受け取り、ユーザー指定の計算を実行し、その後出力を生成することで機能します。プロセス全体が Foundry のビルドシステムによって確立されたプロトコルとワークフローに厳密に従います。

ユーザーがクエリを送信して直接コンピュートモジュールと対話する関数モードとは異なり、入力と出力およびそれらの権限は Foundry ビルドシステムを通じて管理されます。これにより、計算プロセスに関与するすべてのデータが体系的に追跡されることが保証されます。すべての入力と出力がビルドシステムを通過することを義務付けることで、モジュールは高いデータ整合性と追跡可能性を維持し、これは Foundry のデータプロビナンス制御とセキュリティにとって重要です。

プロビナンス制御の要件により、パイプラインモードのコンピュートモジュールは非対話型であり、ユーザーが直接クエリをコンピュートモジュールに送信することはできません。このため、コンピュートモジュールは、実行中にビルドシステムによって自動的に提供される入力に対してのみ計算を実行します。ビルドシステムは、コンピュートモジュールの出力からの情報の流れも管理します。パイプラインモードで実行されているコンピュートモジュールのコンテナ内で入力と出力と対話するためのインターフェースが提供されています。

まとめると、パイプラインモードはデータセキュリティとプロビナンス制御を強制します。以下の場合はパイプラインモードを選択してください:

  • 関連データが非常に機密性が高く、プロビナンス制御やマーキング制御などに厳密に従う必要がある場合。
  • データのデータフローを追跡したい場合。

入力と出力を追加する

パイプラインモードのコンピュートモジュールは、Foundry ビルドシステムによって確立されたプロビナンス制御とセキュリティモデルに厳密に従います。デフォルトでは、コンピュートモジュールは任意の Foundry リソースと対話する権限を持っていません。ユーザーは明示的に Foundry リソースを入力と出力として追加する必要があります。これらの追加されたリソースに対して権限が付与されます。

  1. パイプラインモードの構成詳細で、入力または出力リソースを追加するオプションを選択します。
  2. ドロップダウンメニューからリソースを選択し、一意の識別子を付けます。この識別子は、コンテナ内でリソース情報を取得するために使用されます。リソースはコンピュートモジュールと同じプロジェクトからのものでなければなりません。現在サポートされている入力/出力は、Foundry データセット、ストリーミングデータセット、およびメディアセットです。

コンピュートモジュール内で入力と出力と対話する

  1. ベアラートークンはコンテナファイルにマウントされ、そのファイル名は BUILD2_TOKEN 環境変数に格納されます。このトークンは入力と出力に対する権限を持ち、それらにアクセスする唯一の方法となります。

In app.py: 2. 入力および出力の一意識別子とその情報のマップは、ファイル名が RESOURCE_ALIAS_MAP 環境変数に格納されているコンテナファイルにマウントされます。設定で指定した一意識別子を使って、リソース情報を取得できます。リソース情報は、RID とブランチのタプルです(ブランチは none の場合もあります)。

app.py の中:

with open(os.environ['RESOURCE_ALIAS_MAP']) as f:
    resource_alias_map = json.load(f)

input_info = resource_alias_map['identifier you put in the config']
output_info = resource_alias_map['identifier you put in the config']

# リソース情報の構造
# {
#     'rid': リソースID
#     'branch': ブランチ (存在しない場合もある)
# }

input_rid = input_info['rid']
input_branch = input_info['branch'] or "master"
output_rid = output_info['rid']
output_branch = output_info['branch'] or "master"
  1. これで、トークンとリソース情報を使用して、インプットとアウトプットを操作できます。たとえば、インプットがストリームデータセットの場合、stream-proxyサービスにリクエストを送ることで最新のレコードを取得できます。

In app.py:

FOUNDRY_URL = "yourenrollment.palantirfoundry.com"  # FOUNDRYのURLを指定
url = f"https://{FOUNDRY_URL}/stream-proxy/api/streams/{input_rid}/branches/{input_branch}/records"  # APIエンドポイントのURLを作成
response = requests.get(url, headers={"Authorization": f"Bearer {bearer_token}"})  # APIリクエストを実行し、レスポンスを取得

その他の考慮事項

  1. スケーリング: 計算モジュールにクエリが送信されないため、トラフィックがないと自動的にゼロにスケールダウンする場合があります。計算モジュールを常に稼働させたい場合は、スケーリング構成で Minimum replicas を 1 に設定します。詳細は scaling ドキュメントをご覧ください。
  2. 計算モジュールクライアント: 計算モジュールにクエリが送信されないため、計算モジュールクライアントを実装する必要はありません。詳細については compute module clients ドキュメントを確認してください。