RescaleのREST APIの使用

RescaleのREST APIを使用すると、入力ファイルのアップロード、ジョブの作成、既存のジョブのステータスの表示などを行うことができます。APIエンドポイントの全リストは、Rescale API.Documentationを参照してください。

APIキーは、APIと対話する際に、お客様のアカウントを認証するために必要です。お客様のアカウントのAPIキーを生成するには、設定ページのAPIセクションに移動し、Generate ボタンをクリックします。

Rescale APIによるジョブの実行

この例では、cURLとpythonの両方を使用して、APIからLS-DYNAのジョブを設定する方法を紹介します。

デフォルトでは、API キーは非表示になっています。 これを表示するには、API キーをクリックするだけです。 右側のコピーアイコンをクリックすると、API キーをコピーできます。

ジョブの後処理での API キーの使用

この機能は現在、パブリック ベータ版で利用できます。アクセスするにはアカウント担当者にお問い合わせください.

Rescale Jobs は、一意の短期間の API キーを環境変数として自動的に受け取ります。 RESCALE_API_KEY、セキュリティと業務効率を向上させます。この API キーをジョブで使用できるようにすると、API キー管理が自動化され、ジョブ チェーン、ファンアウト、オーケストレーションが合理化されます。

API キーはジョブの完了後に期限切れになるため、共有ジョブ環境におけるセキュリティ リスクが軽減されます。

埋め込みジョブ API キーを使用するには、単に次のように含めます。 RESCALE_API_KEY スクリプト内または Rescale CLI 内でこのジョブ固有の API キーを呼び出します。ジョブで API キーを検証したい場合は、単に echo $RESCALE_API_KEY ジョブ CLI のコマンド。

ジョブ固有の API キーは、リンクされたソース ジョブとともにユーザー プロファイル設定に表示され、ジョブの完了時に期限切れになります。

cURL を使用して埋め込み API キーを使用する場合は、$ を使用して環境 API キーを呼び出します。すべてのジョブをリストする例を次に示します。

curl -H "認可: トークン $RESCALE_API_KEY" https://platform.rescale.com/api/v2/jobs/

Python を使用して埋め込み API キーを使用する場合、OS ライブラリを使用して環境 API キーを呼び出します。すべてのジョブをリストする例を次に示します。

インポートリクエスト import os api_key = os.getenv("RESCALE_API_KEY") request.get( 'https://platform.rescale.com/api/v2/jobs/', headers={'Authorization': f'Token {api_key} '} )requests.get( 'https://platform.rescale.com/api/v2/jobs/?state=not_completed', headers={'Authorization': f'Token {api_key}'} )

Rescale APIによるジョブの実行

この例では、cURLとpythonの両方を使用して、APIからLS-DYNAのジョブを設定する方法を紹介します。

まず、入力ファイル (input.zip) が含まれるディレクトリに移動し、次のコマンドを使用してアップロードします。

curl -X POST -H 'Content-Type:multipart/form-data' \-H '認可: トークン' \-F "file=@input.zip" \https://platform.rescale.com/api/v2/files/contents/

応答は次のようになります。

{ "pathParts": { "path": "user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "container": "prod-rescale-platform" }, "typeId": 1, " name": "input.zip", "dateUploaded": "2016-11-11T18:50:54.078468Z", "relativePath": "input.zip", "storage": { "storageType": "S3Storage", " id": "pCTMk", "connectionSettings": { "region": "us-east-1" }, "encryptionType": "default" }, "decryptedSize": 10391660, "downloadUrl": "https://platform .rescale.com/api/v2/files/yMqdxd/contents/", "sharedWith": [], "encodedEncryptionKey": "N1iq48GWyEDkMG1wTHI656hcJZKdSQecuwKhu31Epd0=", "owner": "demo@example.com", "path": " user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip"、"isUploaded": true、"viewInBrowser": false、"id": "yMqdxd"、"isDeleted": false、"md5": " 159bb1cdd01987f9122f5ec673958eaf" }

次に、分析ソフトウェアを選択する必要があります。 分析の完全なリストは、次の呼び出しによって取得できます。 curl -H "Authorization: Token <api-token>" https://platform.rescale.com/api/v2/analyses/。 抽出する重要な情報は、使用したいソフトウェアのコードです。以下に示されています。 "code":"...".

また、 を使用して見つけることができる情報 curl -H "Authorization: Token <api-token>" https://platform.rescale.com/api/v2/coretypes/。 Web UI に表示されるコアタイプの名前は、次の場所にキャプチャされます。 "name":"..." 各エントリで。 同様に、以下に示すコアタイプのコードを抽出する必要があります。 "code":"...".

現在いるディレクトリと同じディレクトリに、ジョブ設定と情報の JSON を含むデータ ファイルを作成します。 入力ファイルの ID は、入力ファイルがアップロードされたときの応答で確認できます。 例えば:

cat <<EOF > data.json{  "name": "LS-DYNA cURL API Setup", "billingPriorityValue": "INSTANT", "jobanalyses": [    {      "useRescaleLicense":true,      "command": "ls-dyna -n 2 -i neon.refined.rev01.k -p single",      "analysis": {        "code": "ls_dyna",        "version": "9.0.0"      },      "hardware": {        "coresPerSlot": 2,        "slots": 1,        "coreType": "hpc-3"      },      "inputFiles": [        {          "id": "yMqdxd"        }      ]    }  ]}EOF

コマンド オプションとそのデフォルトの完全なリストを参照してください。 こちらをご覧ください。.

次に、コマンドを実行して、作成したデータ ファイルに基づいて再スケール ジョブを設定します。

curl -X POST --data @data.json \-H "認証: トークン" \-H "Content-Type: application/json" \https://platform.rescale.com/api/v2/jobs/

応答は次のようになります。

{   "monteCarloIterations":null,   "paramFile":null,   "name":"LS-DYNA cURL API Setup",  "billingPriorityValue": "INSTANT", "includeNominalRun":false,   "jobanalyses":[      {         "envVars":{          },         "preProcessScriptCommand":"",         "postProcessScriptCommand":"",         "postProcessScript":null,         "useRescaleLicense":true,         "templateTasks":[          ],         "analysis":{            "version":"9.0.0",            "code":"ls_dyna",            "name":"LS-DYNA",            "versionName":"R9.0.0"         },         "hardware":{            "coresPerSlot":2,            "coreType":"hpc-3",            "coreSummary":{               "storagePerNode":80000,               "gpusPerNode":0,               "numberOfNodes":1.0,               "memoryPerNode":7500            },            "slots":1,            "type":"compute",            "walltime":750         },         "command":"ls-dyna -n 2 -i neon.refined.rev01.k -p single",         "preProcessScript":null,         "flags":{          },         "inputFiles":[            {               "pathParts":{                  "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip",                  "container":"prod-rescale-platform"               },               "typeId":1,               "name":"input.zip",               "dateUploaded":"2016-11-11T18:50:54.078468Z",               "relativePath":"input.zip",               "storage":{                  "storageType":"S3Storage",                  "id":"pCTMk",                  "connectionSettings":{                     "region":"us-east-1"                  },                  "encryptionType":"default"               },               "decryptedSize":10391660,               "downloadUrl":"https://platform.rescale.com/api/v2/files/yMqdxd/contents/",               "sharedWith":[                ],               "encodedEncryptionKey":"N1iq48GWyEDkMG1wTHI656hcJZKdSQecuwKhu31Epd0=",               "owner":"demo@rescale.com",               "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip",               "isUploaded":true,               "viewInBrowser":false,               "id":"yMqdxd",               "isDeleted":false,               "md5":"159bb1cdd01987f9122f5ec673958eaf"            }         ]      }   ],   "projectId":null,   "resourceFilters":[    ],   "remoteVizConfig":null,   "jobvariables":[    ],   "sshPort":22,   "expectedRuns":null,   "caseFile":null,   "isLowPriority":false,   "owner":"demo@rescale.com",   "isTemplateDryRun":false,   "autoTerminateCluster":true,   "id":"RcAFeb",   "archiveFilters":[]}

ジョブが保存され、Rescale Web UI に表示されます。 最後に、次のコマンドを使用してジョブを送信する必要があります。

curl -X POST -H '認証: トークン' \https://platform.rescale.com/api/v2/jobs/RcAFeb/submit/

注: ジョブ ID は前の応答で確認できます。

ジョブのステータスを監視したい場合は、次のコマンドを使用します。

curl -H '認可: トークン' \https://platform.rescale.com/api/v2/jobs/RcAFeb/statuses/

応答は次のようになります。

{   "count":6,   "previous":null,   "results":[      {         "status":"Completed",         "statusDate":"2016-11-15T19:01:13.948641Z",         "id":"KNwnm",         "statusReason":"Completed successfully"      },      {         "status":"Executing",         "statusDate":"2016-11-15T18:47:05.530000Z",         "id":"ePisa",         "statusReason":null      },      {         "status":"Validated",         "statusDate":"2016-11-15T18:41:23.929000Z",         "id":"Yfcem",         "statusReason":null      },      {         "status":"Started",         "statusDate":"2016-11-15T18:41:23.629000Z",         "id":"KDisa",         "statusReason":null      },      {         "status":"Queued",         "statusDate":"2016-11-15T18:41:21.577545Z",         "id":"ircem",         "statusReason":null      },      {         "status":"Pending",         "statusDate":"2016-11-15T18:40:56.465755Z",         "id":"UOisa",         "statusReason":null      }   ],   "next":null}

ジョブは Python スクリプトを通じてセットアップすることもできます。 この例では、LS-DYNA ジョブのセットアップと実行に使用できるサンプル Python コードのチャンクを提供します。

注: この方法では、 requests ライブラリなので実行する必要があります import requests コードの先頭に。

まず、ファイルを zip 圧縮してから、以下を使用して Rescale にアップロードします。

file_upload =requests.post( 'https://platform.rescale.com/api/v2/files/contents/', data=None, files={'file': open('input.zip','rb') }, headers={'認可': 'トークン'} )print file_upload.content

ファイル (input.zip) はスクリプトと同じディレクトリに存在する必要があることに注意してください。

出力は次のようになります。

{   "pathParts":{      "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",      "container":"prod-rescale-platform"   },   "typeId":1,   "name":"input.zip",   "dateUploaded":"2016-11-14T22:58:35.729270Z",   "relativePath":"input.zip",   "storage":{      "storageType":"S3Storage",      "id":"pCTMk",      "connectionSettings":{         "region":"us-east-1"      },      "encryptionType":"default"   },   "decryptedSize":10391660,   "downloadUrl":"https://platform.rescale.com/api/v2/files/FDXpJd/contents/",   "sharedWith":[    ],   "encodedEncryptionKey":"ixay5gbPcYHnSwKNhPHldhzCZXEpN/rpD9Q8tskoavo=",   "owner":"demo@rescale.com",   "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",   "isUploaded":true,   "viewInBrowser":false,   "id":"FDXpJd",   "isDeleted":false,   "md5":"159bb1cdd01987f9122f5ec673958eaf"}

次に、ジョブを設定する必要があります。 このためには、分析ソフトウェアおよびハードウェア情報を取得する必要があります。

分析の場合:

request.get( 'https://platform.rescale.com/api/v2/analyses/', headers={'Authorization': 'トークン'} )

コアタイプの場合:

request.get( 'https://platform.rescale.com/api/v2/coretypes/', headers={'Authorization': 'トークン'} )

どちらの場合も、以下に表示されるコードを取得する必要があります。 "code":"...".

ジョブの設定例は次のようになります。

job_setup = requests.post(    'https://platform.rescale.com/api/v2/jobs/',    json = {         "name": "LS-DYNA Python API Setup",         "jobanalyses": [             {                 "useRescaleLicense":True,                 "command": "ls-dyna -n 2 -i neon.refined.rev01.k -p single",                 "analysis": {                     "code": "ls_dyna",                     "version": "9.0.0"                    },                 "hardware": {                     "coresPerSlot": 2,                     "slots": 1,                     "coreType": "hpc-3"                    },                 "inputFiles": [                     {                         "id": "FDXpJd"                        }                    ]                }            ]        },  headers={'Authorization': 'Token <api-token>'} )print job_setup.content

注: 入力ファイル ID は、前の出力 (ファイルのアップロード) から見つけることができます。

出力は次のようになります。

{   "monteCarloIterations":null,   "paramFile":null,   "name":"LS-DYNA Python API Setup",   "includeNominalRun":false,   "jobanalyses":[      {         "envVars":{          },         "preProcessScriptCommand":"",         "postProcessScriptCommand":"",         "postProcessScript":null,         "useRescaleLicense":true,         "templateTasks":[          ],         "analysis":{            "version":"9.0.0",            "code":"ls_dyna",            "name":"LS-DYNA",            "versionName":"R9.0.0"         },         "hardware":{            "coresPerSlot":2,            "coreType":"hpc-3",            "coreSummary":{               "storagePerNode":80000,               "gpusPerNode":0,               "numberOfNodes":1.0,               "memoryPerNode":7500            },            "slots":1,            "type":"compute",            "walltime":750         },         "command":"ls-dyna -n 2 -i neon.refined.rev01.k -p single",         "preProcessScript":null,         "flags":{          },         "inputFiles":[            {               "pathParts":{                  "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",                  "container":"prod-rescale-platform"               },               "typeId":1,               "name":"input.zip",               "dateUploaded":"2016-11-14T22:58:35.729270Z",               "relativePath":"input.zip",               "storage":{                  "storageType":"S3Storage",                  "id":"pCTMk",                  "connectionSettings":{                     "region":"us-east-1"                  },                  "encryptionType":"default"               },               "decryptedSize":10391660,               "downloadUrl":"https://platform.rescale.com/api/v2/files/FDXpJd/contents/",               "sharedWith":[                ],               "encodedEncryptionKey":"ixay5gbPcYHnSwKNhPHldhzCZXEpN/rpD9Q8tskoavo=",               "owner":"demo@rescale.com",               "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",               "isUploaded":true,               "viewInBrowser":false,               "id":"FDXpJd",               "isDeleted":false,               "md5":"159bb1cdd01987f9122f5ec673958eaf"            }         ]      }   ],   "projectId":null,   "resourceFilters":[    ],   "remoteVizConfig":null,   "jobvariables":[    ],   "sshPort":22,   "expectedRuns":null,   "caseFile":null,   "isLowPriority":false,   "owner":"demo@rescale.com",   "isTemplateDryRun":false,   "autoTerminateCluster":true,   "id":"ASwPT",   "archiveFilters":[    ]}

ジョブが保存され、Rescale Web UI に表示されます。 最後に、次のコマンドを使用してジョブを送信する必要があります。

request.post( 'https://platform.rescale.com/api/v2/jobs/ASwPT/submit/', headers={'Authorization': 'トークン'} )

ジョブを監視したい場合は、次のコマンドを実行できます。

job_status =requests.get( 'https://platform.rescale.com/api/v2/jobs/ASwPT/statuses/', headers={'Authorization': 'トークン'} )job_status.contentを印刷

API キーに関するよくある質問

Q. API の最大有効期間ポリシーをユーザーレベルで設定できますか?
A. いいえ、API の最大有効期間ポリシーは組織レベルでのみ設定されます。

Q. API キーの有効期限が切れるとどうなりますか?
A. API キーの有効期限が切れると、日付が赤色に変わりますが、API キーは引き続き存在します。 API キーを使用しようとすると、「API キーはもうアクティブではありません」というエラーがスローされます。 API キーの有効期限が切れたときに削除するかどうかはユーザーの責任です。

Q. 有効期限に関連するアラートはありますか?
A. いいえ、今日は有効期限に関連するアラートはありません。 これに興味がある場合は、Rescale に連絡してニーズを表明してください。

Q. キーレベルで権限を追加することは可能ですか?
A. いいえ、すべてのキーには、ユーザーがアクセスできるものに対する完全なアクセス許可が与えられます。

Q. ユーザーが非アクティブ化された場合、API キーはどうなりますか?
A. ユーザーを非アクティブにしていずれかのキーを使用しようとすると、次のメッセージが表示されます。 User inactive or deleted.