クラウド運用管理

AWSのジョブ管理とは?Step Functionsとジョブ管理ソフトウェアで効率的に管理

クラウド上でのシステム構築を検討している方の中で、重要なデータを期間内にまとめて処理するバッチ処理制御の仕組みを多くの方が必要としています。そのような場合にお勧めなのがジョブ管理です。
しかし、オンプレミスで運用していたようなジョブ管理をどのようにクラウド上のシステムに実装するかは大きな課題の一つです。
例えばAmazon Web Services(以降、AWSと略す)ではAWS Step Functions(以降、Step Functionsと略す)のようにワークフローを使ってアプリケーション間の連携を行うサービスが提供されていますが、他のサービスとどのように連携すれば従来のジョブ管理に近いものを実現できるのか疑問に思われる方が多いかもしれません。
一方、サードパーティー製のジョブ管理ソフトウェアの活用も考えられます。しかし、こちらもオンプレミスでの実績は多いのですが、AWS上でも適用できるか疑問です。
そこで疑問を解消していただくため、ここではAWS上でジョブ管理を実装する方法を3パターンご紹介します。

【目次】

1. ジョブ管理とは?

ジョブ管理とはその名の通り、システムを運用してくうえで必要なジョブを管理することです。ここでいうジョブとは例えば、”売上情報の集計処理”や”顧客情報データベースの更新”など意味のある処理単位を指します。特に基幹系システムでは重要かつ膨大な情報を管理するジョブを多大な時間・負荷をかけて実行するため、システムへの影響が抑えられる夜間や休日などの時間帯にまとめて処理するような管理が必要になってきます。

2. Step Functionsでジョブ管理をする場合

2.1. Step Functionsとは?

Step Functionsはワークフローを使ったローコード・ノーコード開発で、AWSが提供する複数のサービスを連携するためのマネージドサービスです。
Step Functionsについてはこちらの記事で解説していますのでぜひご覧ください。

2.2. 複数のサービスを統合することでジョブ管理を実現

Step FunctionsはAWS Lambda、AWS Batch、Amazon ECS、AWS Systems Manger(以降、Lambda、Batch、ECS、SSMと略す)といったサービスと連携することでジョブ管理と同じような機構を実装できます。そのためにはまず、ジョブの特性に合わせてジョブの実行先のサービスを決定する必要があります。
例えば、複数のバッチプログラムをそれぞれジョブとして定義し、ジョブフローで順序制御を行うとします。その場合は一般的にバッチプログラムの特性に応じて以下のように実行環境を選択します。(以下の基準はあくまでも一例です。)

  1. 短時間で実行が完了するバッチプログラム
    Lambdaの関数に移行

  2. 長時間の実行が必要なバッチプログラム
    コンテナイメージ内に移行し、Amazon ECRのようなコンテナイメージレジストリサービスに登録

  3. 仮想マシン上でのみ動かせるバッチプログラム
    Amazon EC2(以降、EC2と略す)のインスタンス上に構築した実行環境に移行

バッチプログラムを移行後、Step Functionsから 1. 2. は、Lambda、Batch、ECSといったサーバーレスサービスを通じて実行します。 3. は、SSMが提供するRun Command機能を利用してEC2環境上のコマンドを実行することでバッチプログラムを制御できます。

Step Functionsでジョブ管理をする場合のワークフローの例

図1. Step Functionsでジョブ管理をする場合のワークフローの例

2.3. 考慮すべきポイント

しかし、Step Functionsはジョブ管理を行う上で考慮すべき機能がいくつかあります。ここではその代表的な機能として2点あげます。

1点目はジョブのリトライ機能です。
ジョブ管理ではジョブフローが異常終了したときにフロー内の任意のジョブから再実行するような場面が多くあります。
例えば、データの加工や集計処理の後にデータベースの更新処理を行うフローがあるとします。加工、集計処理が計算結果を中間データとして保持しているなど、再実行すると結果が変わってしまう処理の場合、エラー原因の解消後、データベースの更新から再開する必要があります。しかし、Step Functionsではジョブフローが異常終了した場合、失敗したジョブから再度実行することができません。そのため、このようなジョブフローに適用するのは困難です。

2点目はジョブのスケジュール機能です。
Step Functionsの場合、Amazon Event Bridgeと連携することでジョブフローの実行タイミングをスケジューリングできます。
しかし、実行タイミングのスケジューリングは、毎時、毎日、毎週、毎月のような定義のみとなります。そのため、例えば営業日や特定の日だけ実行したい場合や休日に実行予定のジョブを前後の日にずらしたい場合など柔軟なスケジュール定義はできません。特にグローバルなシステムを運用するうえで各国の商習慣に合わせてジョブを実行したい場合はこういったスケジュール設計への考慮が重要になります。

3. ジョブ管理ソフトウェアを利用する場合

3.1. ジョブ管理ソフトウェアとは?

ジョブ管理ソフトウェアとは複数のサーバー上で実行されるジョブを制御、監視することでシステム運用の作業を自動化することを目的としたソフトウェアです。
ジョブ管理ソフトウェアではまず、ジョブを実行するためのプログラムやシェルスクリプト(またはバッチファイル)を実行先のサーバー(以下、実行サーバーと呼ぶ)上に用意します。そして、ジョブの登録や管理を担うサーバー(以下、スケジュールサーバーと呼ぶ)にジョブの実行順序やスケジュールの情報を定義し、実行します。

3.2. AWS CLIやREST APIを使用してAWSサービスのジョブを管理

AWSサービスをジョブ管理ソフトウェアで制御したい場合はAWSが提供するCLIやREST APIを利用します。
例えば、Lambda関数で実装したジョブを実行したい場合はAWS CLIをインストールした実行サーバーにAWSサービスへの認証処理(aws configureコマンド)とLambda関数の実行処理(aws lambda invokeコマンド)を記載したスクリプトを用意し、スケジュールサーバーでスクリプトをジョブとして実行するように定義します。また、REST APIを利用することでcurlやInvoke-webRequestのようなOS標準のHTTPクライアントを使用して制御することも可能です。

3.3. 考慮すべきポイント

しかし、BatchやECSタスクで実行されるような長時間実行を必要とするジョブを制御する場合は考慮が必要です。ジョブを実行するコマンド(Batchの場合はaws batch submit-job、ECSタスクの場合はaws ecs run-task)やAPIは非同期で実行されます。そのため、ジョブ管理側でジョブを監視したい場合は、定期的に実行したジョブの状態を確認する処理をスクリプトに追加する必要があります。また、ジョブを強制終了したい場合もジョブ管理側でジョブの強制終了を実行したときにAWSサービス側のジョブを停止するコマンドやAPIを実行する仕組みが必要です。
また、AWSサービスへの認証処理に必要な情報の扱いにも注意が必要です。認証処理で必要な署名バージョン4(SigV4)の認証情報(アクセスキー、シークレットアクセスキー)を実行サーバーで安全に管理するには、認証情報を暗号化して保管するような仕組みを用意する必要があります。

ジョブ管理ソフトウェアを利用する場合のワークフローの例

図2. ジョブ管理ソフトウェアを利用する場合のワークフローの例

4. Step Functionsとジョブ管理ソフトウェアの比較

以上を踏まえて、AWS上のジョブ管理をStep Functionsを用いて実装した場合とジョブ管理ソフトウェアを使った場合とでのメリット・デメリットをまとめました。

方法 メリット デメリット
Step Functions AWS標準ツールであるためAWSサービスとの連携が容易 ジョブ管理として機能が不足
  • 任意のジョブからのリトライ機能なし
  • ジョブの実行の柔軟なスケジューリング機能なし
ジョブ管理ソフトウェア ジョブを管理するための豊富な機能を有する AWSサービスと連携するために開発工数が必要
  • ジョブの監視、強制終了
  • 認証情報の管理

サーバーレスサービス上で実行されるジョブを単純なジョブフローで制御したい場合や短期間でAWS上のジョブの制御を実装したい場合はStep Functionsを選択し、オンプレミス上で運用していた従来のジョブ管理機能をそのままAWSのジョブ管理にも適用したい場合はジョブ管理ソフトウェアを選択するとよいでしょう。

5. Step Functionsとジョブ管理ソフトウェアを連携させる場合

5.1. それぞれの長所を活かす

Step Functionsとジョブ管理ソフトウェアのどちらか一方だけを選ぶ必要はありません。Step Functionsとジョブ管理ソフトウェアを連携し、それぞれの長所を活かすことでより効率的に実装でき、かつ実用的なジョブ管理ができます。
例えば、サーバーレスサービス上で実行される、リトライやリカバリといった制御を必要としないジョブフローついてはStep Functionsで構築し、Step FunctionsのジョブフローやEC2のインスタンス上で実行されるジョブをジョブ管理ソフトウェアで制御するという手段が考えられます。
ジョブ管理ソフトウェアと複数のAWSサービスとの連携で開発工数がかかるというデメリットをStep Functionsの連携の容易さで吸収し、また逆にStep Functionsのジョブ管理として機能不足というデメリットをジョブ管理ソフトウェアが全体のジョブフローを担うことで実用的なジョブ管理が実現できます。

Step Functionsとジョブ管理ソフトウェアを連携させた場合のワークフローの例

図3. Step Functionsとジョブ管理ソフトウェアを連携させた場合のワークフローの例

5.2. 考慮すべきポイント

上記の方式でもジョブ管理ソフトウェア側からStep Functionsのジョブフローを制御するためのジョブの監視・強制終了および認証情報の管理に関する作りこみは必要だということに注意しなければなりません。当社が提供するSystemwalker Operation Managerではそのような課題に対してAWSサービスとの連携にかかる工数を減らすための機能をご提案しています。詳細については次の記事をぜひご覧ください。

  • 備考
    Amazon Web Services、AWS、AWS Step Functions、Step Functions、AWS Lambda、AWS Batch、Amazon ECS、AWS Systems、MangerLambda、Batch、ECS、SSM、Amazon ECR、Amazon EC2、EC2、Amazon Event Bridge、AWS CLIは、Amazon.com, Inc. またはその関連会社の商標です。

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

富士通コンタクトライン(総合窓口)

0120-933-200

受付時間:9時~12時および13時~17時30分
(土曜日・日曜日・祝日・当社指定の休業日を除く)

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ