Shellノードは、標準のシェル構文をサポートしますが、インタラクティブな構文はサポートしません。
制限事項
Shellノードは、標準のシェル構文をサポートしますが、インタラクティブな構文はサポートしません。
Shellノードのタスクは、スケジューリングのためにサーバーレスリソースグループまたは旧バージョンの専用リソースグループで実行できます。タスクはサーバーレスリソースグループで実行することをお勧めします。 サーバーレスリソースグループの購入方法の詳細については、「サーバーレスリソースグループの作成と使用」をご参照ください。
説明サーバーレスリソースグループでタスクを実行する場合、単一のタスクに最大 64 CU を構成できます。 ただし、タスクの起動に影響を与える可能性のあるリソース不足を回避するために、設定を 16 CU 以内に維持することをお勧めします。
サーバーレスリソースグループで実行されるShellノードは、ホワイトリストが構成されているデータソースにアクセスする必要がある場合があります。 この場合、必要なエラスティックIPアドレス(EIP)またはCIDRブロックをデータソースのホワイトリストに追加する必要があります。
Shellノードで多数のサブプロセスを開始しないでください。 スケジューリングのために専用リソースグループで実行されるShellノードで多数のサブプロセスを開始すると、DataWorksはShellノードの実行に対するリソース使用量に制限を課していないため、リソースグループで実行される他のノードが影響を受ける可能性があります。
Shellノードのタスクのコードサイズは、128 KB を超えることはできません。
特定の開発環境を使用してタスクを開発する場合は、DataWorksコンソールでカスタムイメージを作成できます。 詳細については、「イメージの管理」をご参照ください。
前提条件
ワークフローが作成されます。 DataStudioでは、ワークフローに基づいてさまざまなタイプのコンピューティングエンジンで開発操作が実行されます。 したがって、ノードを作成する前に、ワークフローを作成する必要があります。 詳細については、「ワークフローの作成」をご参照ください。
共通のShellノードの作成
DataStudioページに移動します。
DataWorksコンソールにログオンします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションウィンドウで、 を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。
アイコンにポインターを移動し、 を選択します。 [ノードの作成] ダイアログボックスで、名前とパスパラメーターを構成します。[確認] をクリックして、ノードを作成します。
Shellノードでリソースを使用できるようにする
ノードがDataWorksのリソースを使用できるようにするには、リソースをDataWorksにアップロードし、ノードの実行時環境でリソースを参照する必要があります。 このセクションでは、手順について説明します。
リソースのアップロード
DataWorksでは、リソースを作成したり、既存のリソースをアップロードしたりできます。 各タイプのリソースのGUIに基づいてメソッドを選択できます。
DataWorksコンソールでMaxComputeおよびEMRリソースを作成できます。 詳細については、「MaxComputeリソースの作成と使用」および「EMRリソースの作成と使用」をご参照ください。
ノードでリソースを参照するには、リソースをコミットする必要があります。 本番環境のノードでこのリソースを使用する必要がある場合は、リソースを本番環境にデプロイする必要もあります。 詳細については、「ノードのデプロイ」をご参照ください。
ノード内のリソースの参照
ノードでリソースを使用できるようにするには、ノード内のリソースを参照する必要があります。 リソースが参照されると、@resource_reference{"リソース名"} コメントがノードコードの上部に表示されます。
手順:
作成したShellノードを開き、ノード編集ページに移動します。
DataStudioページの [スケジュールされたワークフロー] ペインで、アップロードしたリソースを見つけます。
リソースを右クリックし、[リソースパスの挿入] を選択して、現在のノード内のリソースを参照します。
ノード編集ページで、リソースを実行するコードを記述できます。

Shellノードで使用されるスケジューリングパラメーター
共通のShellノードの変数名をカスタマイズすることはできません。 変数は、$ 1、$ 2、$ 3などの序数に基づいて名前を付ける必要があります。 パラメーターの数が 10 に達するか、10 を超える場合は、${Number}を使用して超過変数を宣言します。 たとえば、${10}を使用して10番目の変数を宣言します。 スケジューリングパラメーターの構成と使用方法の詳細については、「スケジューリングパラメーターの構成と使用」をご参照ください。 スケジューリングパラメーターに値を割り当てる方法の詳細については、「サポートされているスケジューリングパラメーターの形式」をご参照ください。
前の図では、[パラメーター] セクションのカスタム変数 $ 1、$ 2、および $ 3 にカスタムパラメーターが割り当てられ、コードエディターでカスタム変数が参照されます。 例:
$1: $bizdateを$1として指定します。 この変数は、データタイムスタンプを取得するために使用されます。 $bizdateは組み込みパラメーターです。
$2: ${yyyymmdd}を$2として指定します。 この変数は、データタイムスタンプを取得するために使用されます。
$3: $[yyyymmdd]を$3として指定します。 この変数は、データタイムスタンプを取得するために使用されます。
共通のShellノードの場合、式を使用してのみカスタムパラメーターをカスタム変数に割り当てることができます。 パラメーターはスペースで区切る必要があり、パラメーター値はパラメーターが定義されている順序と一致する必要があります。 たとえば、[パラメーター] セクションに入力した最初のパラメーター $bizdate は、最初の変数 $ 1 に割り当てられます。
カスタムShellスクリプトが正常に実行されたかどうかを確認する方法
カスタムShellスクリプトの終了コードによって、スクリプトが正常に実行されたかどうかが決まります。 終了コード:
0: カスタムShellスクリプトが正常に実行されたことを示します。
-1: カスタムShellスクリプトが終了したことを示します。
2: カスタムShellスクリプトを自動的に再実行する必要があることを示します。
その他の終了コード: カスタムShellスクリプトが実行に失敗したことを示します。
Shellスクリプトの場合、最初のコマンドが無効なコマンドであると、エラーが返されます。 無効なコマンドの後に有効なコマンドが実行されると、Shellスクリプトを正常に実行できます。 例:
#! /bin/bash
curl http://xxxxx/asdasd
echo "nihao"スクリプトが予期どおりに終了したため、Shellスクリプトは正常に実行されます。
前のスクリプトを次のスクリプトに変更すると、別の結果が返されます。 例:
#! /bin/bash
curl http://xxxxx/asdasd
if [[ $? == 0 ]];then
echo "curl success"
else
echo "failed"
exit 1
fi
echo "nihao"この場合、スクリプトは実行に失敗します。
Shellスクリプトを使用してossutilにアクセスする
ossutilをインストールする場合、次のデフォルトのインストールパスを使用できます。
/home/admin/usertools/tools/ossutil64。
ossutilの一般的なコマンドについては、「一般的なコマンド」をご参照ください。
ビジネス要件に基づいて、構成ファイルで Object Storage Service (OSS) へのアクセスに使用するユーザー名とパスワードを構成できます。 その後、O&Mアシスタントを使用して、構成ファイルを /home/admin/usertools/tools/myconfig ディレクトリにアップロードできます。
[Credentials]
language = CH
endpoint = oss.aliyuncs.com
accessKeyID = your_accesskey_id
accessKeySecret = your_accesskey_secret
stsToken = your_sts_token
outputDir = your_output_dir
ramRoleArn = your_ram_role_arnコマンド構文:
#! /bin/bash
/home/admin/usertools/tools/ossutil64 --config-file /home/admin/usertools/tools/myconfig cp oss://bucket/object object
if [[ $? == 0 ]];then
echo "access oss success"
else
echo "failed"
exit 1
fi
echo "finished"後続の操作
Shellノードを定期的にスケジュールする必要がある場合は、Shellノードのスケジューリングプロパティを定義し、ノードを本番環境にデプロイする必要があります。 ノードのスケジューリングプロパティの構成方法については、「手順 6: バッチ同期タスクのスケジューリングプロパティを構成する」をご参照ください。 ノードを本番環境にデプロイする方法については、「ノードのデプロイ」をご参照ください。
関連情報
Python 2 または Python 3 コマンドを使用してShellノードでPythonスクリプトを実行する方法については、「Shellノードを使用してPythonスクリプトを実行する」をご参照ください。