注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
関数モード | パイプラインモジュール |
---|---|
ユーザーのコンピュートモジュールを使用してロジックを関数としてホストします。これらの関数はWorkshopやDeveloper ConsoleなどのFoundryアプリケーションでオントロジー SDKと共に使用できます。 | Foundryの入力を読み込み、ストリーミングおよびリアルタイムメディアの使用ケースに対してFoundryの出力に書き込みます。このモジュールは、指定できるアクセスを持つジョブトークンとして渡されます。 |
コンピュートモジュール関数を使用してFoundryアプリケーションを強化します。 | Foundryのリソース許可システムを使用します。 |
別の関数からコンピュートモジュール関数を実行します。 | Data LineageアプリケーションでFoundry全体のデータプロビナンスを取得します。 |
プラットフォームの権限なし: オントロジー SDKやプラットフォームAPIを使用するアクセスは提供されません。 アプリケーションの権限: アプリケーションはユーザー権限に依存せずにサービスユーザーを使用して権限を使用します。
Foundryジョブトークンはコンピュートモジュールに添付されます。ジョブトークンは入力および出力リソースにスコープされ、データの取得に使用できます。
関数モードを使用すると、Foundry全体で使用するためのロジックをWorkshopアプリケーションやオントロジー SDKを通じてホストするためにコンピュートモジュールを使用できます。任意の言語でロジックを定義および記述し、それを関数として登録し、プラットフォーム内で関数呼び出しでこのロジックを実行できます。
関数モードは2つの権限モードを通じて動作できます:
すべてのエンロールメントでアプリケーションの権限が利用できるとは限りません。
OAuth 2.0 クライアントの管理
の権限を持つ組織内のユーザーのみがこの手順を実行できます。詳細については、サードパーティアプリケーションのドキュメントを確認してください。
Foundry環境のURLへのアクセスを可能にするネットワークポリシーを持つソースを追加します。
クライアント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"]
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 リソースを入力と出力として追加する必要があります。これらの追加されたリソースに対して権限が付与されます。
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"
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リクエストを実行し、レスポンスを取得