DataWorks では、SSH ノードを作成し、特定の SSH データソースに基づいて SSH ノードを使用して、データソースに接続されているホストにリモートアクセスし、ホスト上でスクリプトの実行をトリガーできます。たとえば、この方法を使用して、DataWorks から Elastic Compute Service (ECS) インスタンスにリモートアクセスし、ECS インスタンス上のスクリプトの定期的なスケジューリングをトリガーできます。このトピックでは、SSH ノードを使用してタスクを開発する方法について説明します。
注意事項
SSH ノードを使用してリモートホストでプロセスが開始されると、タスクのタイムアウトなどの例外によって SSH ノードのタスクが終了した場合でも、基盤となるリモートホストの操作は影響を受けません。この場合、DataWorks はリモートホストにプロセス終了コマンドを発行しません。
SSH ノードは標準のシェル構文をサポートしますが、対話型構文はサポートしません。
SSH ノードを使用して ECS インスタンスにリモートアクセスし、インスタンス上でスクリプトの実行をトリガーすると、インスタンスに一時ファイルが生成されます。インスタンスの使用可能なストレージと、インスタンスに保存できるファイルの最大数がビジネス要件を満たしていることを確認してください。
前提条件
ワークフローが作成されていること。
DataStudio では、さまざまな種類のコンピューティングエンジンでの開発操作はワークフローに基づいて実行されます。したがって、ノードを作成する前に、ワークフローを作成する必要があります。詳細については、「ワークフローを作成する」をご参照ください。
SSH データソースが追加されていること。
SSH ノードで SSH タスクを開発し、定期的にスケジュールするには、SSH サーバーにリモートアクセスするために SSH データソースを追加する必要があります。データソースを追加する方法については、「SSH データソースを追加する」をご参照ください。
説明SSH ノードを使用して、Java Database Connectivity (JDBC) 接続文字列モードで DataWorks に追加された SSH データソースのみに基づいてタスクを開発できます。さらに、タスクの実行エラーを防ぐために、データソースが目的のリソースグループに接続されていることを確認する必要があります。
(RAM ユーザーを使用してタスクを開発する場合に必要) RAM ユーザーが DataWorks ワークスペースにメンバーとして追加され、[開発] ロールまたは [ワークスペース管理者] ロールが割り当てられていること。ワークスペース管理者ロールには、必要以上の権限があります。ワークスペース管理者ロールを割り当てる場合は注意してください。メンバーを追加し、メンバーにロールを割り当てる方法については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。
制限事項
SSH ノードのタスクは、サーバーレスリソースグループで実行できます。サーバーレスリソースグループの購入と使用方法については、「サーバーレスリソースグループを作成して使用する」をご参照ください。
SSH ノードは、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (深セン)、中国 (香港)、日本 (東京)、シンガポール、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、ドイツ (フランクフルト)、英国 (ロンドン)、米国 (シリコンバレー)、米国 (バージニア) の各リージョンでサポートされています。
SSH ノードで実行されるコードのサイズは、
128 KB
を超えることはできません。
手順 1:SSH ノードを作成する
DataStudio ページに移動します。
DataWorks コンソール にログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。
DataStudio ページで、目的のワークフローを見つけ、ワークフロー名を右クリックし、
を選択します。[ノードの作成] ダイアログボックスで、[名前] パラメーターを構成し、[確認] をクリックします。その後、作成したノードを使用してタスクを開発および構成できます。
手順 2:SSH タスクを開発する
(オプション) SSH データソースを選択する
ワークスペースに複数の SSH データソースが追加されている場合は、ビジネス要件に基づいて、ノードの構成タブの上部にある [データソースの選択] ドロップダウンリストから 1 つを選択する必要があります。ワークスペースに SSH データソースが 1 つだけ追加されている場合は、その SSH データソースを使用してタスクが開発されます。
SSH ノードを使用して、Java Database Connectivity (JDBC) 接続文字列モードで DataWorks に追加された SSH データソースのみに基づいてタスクを開発できます。さらに、タスクの実行エラーを防ぐために、データソースが目的のリソースグループに接続されていることを確認する必要があります。
コードを開発する:簡単な例
SSH ノードの構成タブにあるコードエディターで、タスクコードを記述します。サンプルコード:
# 1. 環境を準備します。
# リモートホストで実行するファイルを見つけます。たとえば、nihao.sh ファイルはリモートホストの tmp ディレクトリに保存されています。
# テストを容易にするために、SSH ノードで次のコマンドを実行して nihao.sh ファイルを作成できます。
echo "echo nihao,dataworks" >/tmp/nihao.sh
# 2. SSH ノードを使用して、リモートホストでファイルの実行をトリガーします。
# DataWorks の SSH ノードを使用して、nihao.sh ファイルの実行をトリガーします。
sh /tmp/nihao.sh
コードを開発する:スケジューリングパラメーターを使用する
DataWorks は、[スケジューリングパラメーター] を提供します。その値は、定期的なスケジューリングシナリオでのスケジューリングパラメーターの構成に基づいて、タスクのコードで動的に置き換えられます。${変数}
形式でタスクコードに変数を定義し、[プロパティ] タブの [スケジューリングパラメーター] セクションで変数に値を割り当てることができます。サポートされているスケジューリングパラメーターの形式とスケジューリングパラメーターの構成方法については、「サポートされているスケジューリングパラメーターの形式」および「スケジューリングパラメーターを構成して使用する」をご参照ください。
SSH ノードでスケジューリングパラメーターを使用する方法の例を以下に示します。
# 要件:SSH ノードの実行時間を毎日リモートサーバーの /tmp ディレクトリに保存されている sshnode.log ファイルに書き込みます。
# 実装:sshnode.log ファイルで ${myDate} 変数を使用し、myDate 変数に値として $[yyyy-mm-dd hh24:mi:ss] を割り当てます。
echo ${myDate} >/tmp/sshnode.log
cat /tmp/sshnode.log
手順 3:タスクスケジューリングプロパティを構成する
システムにノードのタスクを定期的に実行させる場合は、ノードの構成タブの右側のナビゲーションウィンドウで [プロパティ] をクリックして、ビジネス要件に基づいてタスクスケジューリングプロパティを構成できます。詳細については、「スケジュール」をご参照ください。
タスクをコミットする前に、[プロパティ] タブで [再実行] パラメーターと [親ノード] パラメーターを構成する必要があります。
手順 4:タスクコードをデバッグする
次の操作を実行して、タスクがビジネス要件に基づいて期待どおりに構成されているかどうかを確認できます。
オプション。リソースグループを選択し、変数にカスタムパラメーターを割り当てます。
ノードの構成タブの上部にあるツールバーの
アイコンをクリックします。[パラメーター] ダイアログボックスで、デバッグとタスクコードの実行に使用するスケジューリング用のリソースグループを選択します。
タスクコードでスケジューリングパラメーターを使用する場合は、デバッグのために、タスクコードの変数にスケジューリングパラメーターを値として割り当てます。スケジューリングパラメーターの値割り当てロジックについては、「デバッグ手順」をご参照ください。
タスクコードを保存して実行します。
上部のツールバーで、
アイコンをクリックしてタスクコードを保存します。次に、
アイコンをクリックしてタスクコードを実行します。
オプション。スモークテストを実行します。
ノードをコミットするとき、またはノードをコミットした後に、開発環境でノードのスモークテストを実行して、ノードが期待どおりに実行されるかどうかを確認できます。詳細については、「スモークテストを実行する」をご参照ください。
手順 5:タスクをコミットしてデプロイする
ノードのタスクを構成した後、タスクをコミットしてデプロイする必要があります。タスクをコミットしてデプロイすると、システムはスケジューリング構成に基づいてタスクを定期的に実行します。
上部のツールバーの
アイコンをクリックしてタスクを保存します。
上部のツールバーの
アイコンをクリックして、ノードのタスクをコミットします。
[送信] ダイアログボックスで、[変更の説明] パラメーターを構成します。次に、ビジネス要件に基づいて、タスクのコミット後にタスクコードを確認するかどうかを決定します。
説明タスクをコミットする前に、[プロパティ] タブで [再実行] パラメーターと [親ノード] パラメーターを構成する必要があります。
コードレビュー機能を使用して、タスクのコード品質を確保し、無効なタスクコードによって発生するタスク実行エラーを防ぐことができます。コードレビュー機能を有効にすると、コミットされたノードコードは、コードレビューに合格した後でのみデプロイできます。詳細については、「コードレビュー」をご参照ください。
標準モードでワークスペースを使用する場合は、タスクをコミットした後に本番環境にデプロイする必要があります。ノードのタスクをデプロイするには、ノードの構成タブの右上隅にある [デプロイ] をクリックします。詳細については、「タスクをデプロイする」をご参照ください。
次の手順
タスク O&M:タスクをコミットしてデプロイすると、タスクはスケジューリング構成に基づいて定期的に実行されます。対応するノードの構成タブの右上隅にある [オペレーションセンター] をクリックしてオペレーションセンターに移動し、タスクのスケジューリングステータスを表示できます。詳細については、「自動トリガーされたタスクを表示および管理する」をご参照ください。
FAQ
質問:SSH ノードが指定された期間を超えて長時間実行され、終了できない場合はどうすればよいですか?
回答:リモートサーバーで実行されている SSH サーバーには、デフォルトの切断ロジックがある場合があります。クライアントと SSH サーバー間で 1 時間以内にデータが交換されない場合、サーバーはクライアントから切断されます。ただし、DataWorks は接続が終了したかどうかを判断できず、ノードでタスクの実行を続けます。
解決策:
SSH サーバーの構成ファイル (例:
/etc/ssh/sshd_config
) で次のパラメーターを構成して、SSH サーバーが切断されないようにし、60 秒ごとにkeepalive パケット
メッセージを送信します。ClientAliveInterval: 30
ClientAliveCountMax: 0
TCPKeepAlive: yes
SSH サーバーを再起動します。
sudo service sshd restart
説明コマンドは、使用しているオペレーティングシステムの種類とバージョンによって異なる場合があります。