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

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import boto3 # FOUNDRY_URLをエンドポイントに設定します endpoint = "https://<FOUNDRY_URL>/io/s3" # boto3セッションを開始します session = boto3.session.Session() # STSクライアントを作成します。エンドポイントURLを設定します。 client = session.client(service_name='sts', endpoint_url=endpoint) # RoleArnとRoleSessionNameはboto3で必須のパラメータですが、未使用です # assume_role_with_web_identityを使用して資格情報を取得します。 credentials = client.assume_role_with_web_identity( RoleArn="xxxxxxxxxxxxxxxxxxxx", RoleSessionName="xxxxx", WebIdentityToken=token )["Credentials"]

代わりに、以下の例のように、cURL などの同等のツールを使って API に直接アクセスすることもできます。<TOKEN> は、有効な Foundry トークンに置き換えてください。

Copied!
1 2 3 4 5 # curlコマンドを使用してPOSTリクエストを送信します。 # FOUNDRY_URLには対象のURLを、TOKENには使用するトークンを入れてください。 # AssumeRoleWithWebIdentityアクションを使って、WebIdentityTokenで指定されたアイデンティティに対するロールを引き受けます。 curl -X POST \ https://<FOUNDRY_URL>/io/s3?Action=AssumeRoleWithWebIdentity&WebIdentityToken=<TOKEN>

XMLレスポンスでセッションの資格情報を受け取ります。これらの資格情報は、以下に示すように安全に保存すべきです。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?xml version='1.0' encoding='UTF-8'?> <!-- 'AssumeRoleWithWebIdentityResponse'はAWSのSTSサービスからのレスポンスを示しています。 --> <AssumeRoleWithWebIdentityResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/"> <!-- 'AssumeRoleWithWebIdentityResult'は操作の結果を含む要素です。 --> <AssumeRoleWithWebIdentityResult> <!-- 'Credentials'は認証情報を含む要素です。 --> <Credentials> <!-- 'AccessKeyId'はアクセスキーIDを示しています。 --> <AccessKeyId>PLTRLZZJE0...</AccessKeyId> <!-- 'SecretAccessKey'はシークレットアクセスキーを示しています。 --> <SecretAccessKey>2j3hKX4EDP...</SecretAccessKey> <!-- 'SessionToken'はセッショントークンを示しています。 --> <SessionToken>eyJwbG50ci...</SessionToken> <!-- 'Expiration'は認証情報の有効期限を示しています。 --> <Expiration>2023-08-30T10:55:08.841403951Z</Expiration> </Credentials> </AssumeRoleWithWebIdentityResult> </AssumeRoleWithWebIdentityResponse>
Copied!
1 2 3 4 5 6 7 8 9 10 # 'curl'コマンドを使用してPOSTリクエストを送信します curl -X POST \ # "Authorization"ヘッダーを使用して、トークンを含む認証情報を提供します -H "Authorization: Bearer <TOKEN>" \ # "Content-type"ヘッダーを使用して、送信するデータの形式を指定します -H "Content-type: application/json" \ # '--data'オプションを使用して、送信するデータを指定します --data '{"clientId":"<CLIENT_ID>","projectRestrictions":["<PROJECT_RID>"]}' \ # 最後に、リクエストを送信するURLを指定します https://<FOUNDRY_URL>/io/s3/api/v2/credentials

オプション 2: Powershell (Windows)

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # ヘッダー変数の設定 $headers = @{ "Authorization" = "Bearer <TOKEN>" # 認証に必要なトークン "Content-type" = "application/json" # コンテンツタイプの指定 } # ボディ変数の設定 $body = @{ "clientId" = "<CLIENT_ID>" # クライアントIDの指定 "projectRestrictions" = @("<PROJECT_RID>") # プロジェクトの制限の指定 } | ConvertTo-Json # Json形式に変換 # Webリクエストの実行 Invoke-WebRequest -Uri "https://<FOUNDRY_URL>/io/s3/api/v2/credentials" -Method POST -Headers $headers -Body $body

このコードは、指定されたURLに対してPOSTメソッドを使用してWebリクエストを行い、結果を返すものです。ヘッダーとボディに必要な情報を設定し、認証とプロジェクトの制限を行います。 アクセスキーとシークレットキーは、このリクエストのレスポンスで受け取るものを安全に保存してください。クレデンシャルを設定する際は、サードパーティアプリケーションのクライアントIDとシークレットではなく、これらの資格情報を使用してください。

組織の指定

デフォルトでは、/v2/credentials エンドポイントは、認証しているユーザーが自分の 組織 内のサードパーティアプリケーション用の資格情報を生成していると想定しています。サードパーティアプリケーションが別の組織に存在する場合は、組織IDをURLのクエリパラメータとして指定します:https://<FOUNDRY_URL>/io/s3/api/v2/credentials?organizationRid=<ORGANIZATION_ID>

資格情報の取り消し

アクセスキーとシークレットアクセスキーを取り消す必要がある場合は、次のエンドポイントを呼び出し、<ACCESS_KEY_ID> を取り消したいアクセスキーIDに置き換えてください:

Copied!
1 2 3 4 5 # このコードは、特定の資格情報を削除するためのcurlコマンドです。 curl -X DELETE \ # DELETEリクエストを送信します。 -H "Authorization: Bearer <TOKEN>" \ # 認証ヘッダーにBearerトークンを含めます。 https://<FOUNDRY_URL>/io/s3/api/v2/credentials/<ACCESS_KEY_ID> # 対象のURLを指定します。ここでは資格情報のIDを使用して特定の資格情報にアクセスします。
$ aws configure --profile foundry
# AWSへのアクセスキーIDを設定します。ここにはあなたのアクセスキーIDを入力します。
AWS Access Key ID [None]: <ACCESS_KEY_ID>
# AWSのシークレットアクセスキーを設定します。ここにはあなたのシークレットアクセスキーを入力します。
AWS Secret Access Key [None]: <SECRET_ACCESS_KEY>
# デフォルトのリージョン名を設定します。ここでは "foundry" を設定しています。
Default region name [None]: foundry
# デフォルトの出力形式を設定します。特に指定がなければ空白のままにします。
Default output format [None]:

これで foundry プロファイルのコマンドを実行できるようになりました。たとえば:

Copied!
1 2 3 # AWS CLIを使用して、特定のプロファイル(foundry)とエンドポイントURL(FOUNDRY_URL)を指定してS3バケットの内容をリストします。 # これは、特定のデータセット(DATASET_RID)の内容を表示するためのものです。 aws --profile foundry --endpoint-url https://<FOUNDRY_URL>/io/s3 s3 ls s3://<DATASET_RID>
Copied!
1 2 3 [profile foundry] region = foundry # リージョンを指定します。ここでは "foundry" を設定しています。 endpoint_url = https://<FOUNDRY_URL>/io/s3 # エンドポイントのURLを指定します。具体的な値に置き換えてください。
Copied!
1 2 3 4 5 6 7 8 [profile foundry] region = foundry # エンドポイントURLの設定 endpoint_url = https://<FOUNDRY_URL>/io/s3 # Webアイデンティティトークンファイルの設定 web_identity_token_file = ~/.foundry/web-identity.token # ロールARNの設定 role_arn=xxxxxxxxxxxxxxxxxxxx

上記の例では、有効な Foundry トークンが ~/.foundry/web-identity.token というファイルに保存されていることを前提としています。このファイルが適切に保護されており、漏洩のリスクがない場合にのみ、このアプローチを推奨します。 role_arn プロパティは使用されませんが、AWS CLI の検証のため、提供される必要があり、かつ少なくとも20文字以上である必要があります。例では xxxxxxxxxxxxxxxxxxxx をプレースホルダーとして使用しています。この設定を使用するには、上記で説明したように、 ~/.aws/configendpoint_url を設定し、--endpoint-url を使用する代わりに設定する必要があります。

AWS SDK for Python(Boto3)

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # boto3とpandasをインポートします import boto3 import pandas as pd # boto3のS3クライアントを作成します s3 = boto3.client( 's3', aws_access_key_id="<ACCESS_KEY_ID>", # AWSのアクセスキーIDを指定します aws_secret_access_key="<SECRET_ACCESS_KEY>", # AWSのシークレットアクセスキーを指定します # session_token="<SESSION_TOKEN>", 一時的な認証情報を使用する場合にのみ必要です endpoint_url="https://<FOUNDRY_URL>/io/s3", # エンドポイントのURLを指定します region_name="foundry" # リージョンの名前を指定します ) # バケットとキー(ファイル名)を指定します bucket = 'ri.foundry.main.dataset.<uuid>' key = 'iris.csv' # 指定したバケットからキーを使用してオブジェクトを取得します obj = s3.get_object(Bucket=bucket, Key=key) # 取得したオブジェクトからCSVデータを読み込み、pandasのデータフレームに変換します df = pd.read_csv(obj['Body']) # データフレームを出力します print(df)
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from pyspark.sql import SparkSession hostname = "https://<FOUNDRY_URL>/io/s3" access_key_id = "<ACCESS_KEY_ID>" secret_access_key = "<SECRET_ACCESS_KEY>" # データセットRIDが有効なホスト名として解析できるようにします dataset_rid = "ri.foundry.main.dataset.<uuid>".replace('.', '-') # SparkSessionを作成します spark_session = ( SparkSession.builder # アクセスキーとシークレットキーを設定します .config("fs.s3a.access.key", access_key_id) .config("fs.s3a.secret.key", secret_access_key) # .config("fs.s3a.session.token", session_token) 一時的な認証情報を使用するときのみ必要です .config("fs.s3a.endpoint", hostname) .config("fs.s3a.endpoint.region", "foundry") .config("fs.s3a.path.style.access", "true") .getOrCreate() ) # parquetファイルを読み込み、データフレームを作成します df = spark_session.read.parquet(f"s3a://{dataset_rid}/*") df.show()

S3と一緒にSparkを使用する方法の詳細については、Spark documentation ↗を参照してください。

Hadoop AWSクライアントを使用して'.'を含むバケット名を使用すると、既知の問題があります。"bucket is null/empty" などのエラーメッセージが表示される場合があります。これが発生した場合、データセットRIDは有効なホスト名として解析できません。回避策として、データセットRIDの'.'を'-'に置換することができます。

Cyberduck

  1. 次のプロフィールをダウンロードします:Foundry S3.cyberduckprofile ↗

  2. プロフィールファイルをダブルクリックして開き、Cyberduckにプロフィールを登録します。

  3. Cyberduckが作成したデフォルトのブックマークに次の接続プロパティを設定します:

    • Server: https://<FOUNDRY_URL>
    • Access Key ID: <ACCESS_KEY_ID>
    • Secret Access Key: <SECRET_ACCESS_KEY>
    • Path: (under More Options) ri.foundry.main.dataset.<uuid>
  4. ブックマークの設定ウィンドウを閉じます。

  5. ブックマークをダブルクリックして接続を開きます。

S3互換ソースへの接続についての詳細は、Cyberduck documentation ↗を参照してください。

Google Storage Transfer Service

Google Cloudの Storage Transfer Service ↗はFoundryをS3互換ソース ↗として扱うことができます。以下の手順に従って、FoundryのデータセットからCloud Storageバケットにデータを転送できます。

  1. Google Cloudの指示 ↗に従って、エージェントプールと転送エージェントを設定します。

  2. 転送ジョブを作成し、Source typeとしてS3-compatible object storageを選択します。次に、ステップ(1)で作成したエージェントプールを選択し、次の設定が行われていることを確認します:

    • Bucket: ri.foundry.main.dataset.<uuid>.
    • Endpoint: https://<FOUNDRY_URL>/io/s3
    • Signing region: foundry
    • Signing process: Signature Version 4 (SigV4)
    • Addressing-style: Path-style requests
    • Network protocol: HTTPS
    • Listing API version: ListObjectsV2 Cloud Storageバケットの目的地、スケジュール、転送ジョブの設定を完成させて設定を完了します。

Apache NiFi

Apache NiFiを使用して、Foundryのデータセット内のファイルを読み書きすることができます。以下の例は、PutS3Objectプロセッサータイプの書き込みの設定方法を示しています:

  • Object Key: データセット内の論理ファイルパス、形式 path/to/file.csv
  • Bucket: データセットRID、たとえば ri.foundry.main.dataset.<uuid>
  • Access Key ID: <ACCESS_KEY_ID>
  • Secret Access Key: <SECRET_ACCESS_KEY>
  • Region: "US East (N. Virginia)" は us-east-1に対応します
  • Use Path Style Access: true
  • Endpoint Override URL: https://<FOUNDRY_URL>/io/s3

PutS3ObjectプロセッサーやS3互換ソースをサポートする他のプロセッサーについての詳細は、Apache NiFi documentation ↗を参照してください。

Airbyte

Airbyte ↗のS3デスティネーションに対するサポートを使用して、Foundryデータセットにファイルを書き込むことができます。次のデスティネーション設定を設定します:

  • Destination type: S3
  • S3 Key ID: <ACCESS_KEY_ID>
  • S3 Access Key: <SECRET_ACCESS_KEY>
  • S3 Bucket Name: ri.foundry.main.dataset.<uuid>
  • S3 Bucket Path: 任意の有効なサブディレクトリパス。Airbyteはこのサブディレクトリ内のFoundryデータセットにファイルを書き込みます。
  • S3 Bucket Region: us-east-1
  • Output Format: Airbyteのすべての出力形式はFoundryデータセットと互換性があります。
  • Endpoint: https://<FOUNDRY_URL>/io/s3

詳細と設定オプションについては、AirbyteのS3 destinations ↗のドキュメンテーションを参照してください。

DuckDB

DuckDB ↗のS3サポートを使用して、Foundryデータセットをクエリすることができます。DuckDBのシークレットを使用して資格情報を管理し、s3://プレフィックスのURLを使用してデータセットをクエリします。 詳細については、DuckDBのドキュメンテーション ↗を参照してください。

上記のシークレット設定では、ENDPOINT設定パラメーターにhttps://スキームを含めないでください。URLスキームは、デフォルトでtrueに設定されているUSE_SSLパラメーターによって自動的に処理されます。

Polars

Polars' ↗ のS3サポートは、Foundryデータセットをクエリするために使用できます。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import polars as pl # ホスト名 hostname = "https://<FOUNDRY_URL>/io/s3" # アクセスキーID access_key_id = "<ACCESS_KEY_ID>" # シークレットアクセスキー secret_access_key = "<SECRET_ACCESS_KEY>" # データセットのリソースID dataset_rid = "ri.foundry.main.dataset.<uuid>" # ストレージオプションの設定 storage_options = { "aws_access_key_id": access_key_id, "aws_secret_access_key": secret_access_key, "aws_region": "foundry", "endpoint_url": hostname } # ParquetファイルをスキャンしてDataFrameに読み込む df = pl.scan_parquet(f"s3://{dataset_rid}/spark/*.parquet", storage_options=storage_options)

詳細については、Polars のドキュメンテーション ↗ を参照してください。