AWSのワークフローの活用を極めるクラウドサービス連携機能とは ~Systemwalker Operation Managerで実現するAWSジョブ管理のベストプラクティス~

AWS上にシステムを構築しようとしている方にとって、バッチ制御をどう実装するかは重要な課題です。
「AWSのジョブ管理とは?Step Functionsとジョブ管理ソフトウェアで効率的に管理」の記事ではジョブ管理ソフトウェアとAWS Step Functions(以降、Step Functionsと略す)を連携させることで実用的なジョブ管理が可能になることをご紹介しましたが、連携するための開発工数が必要になる問題がありました。
そこで今回は、Systemwalker Operations Managerの「クラウドサービス連携機能」を活用することで、少ない開発工数でバッチ制御を実装する方法について詳しく解説します。

本記事は「AWSのジョブ管理とは?Step Functionsとジョブ管理ソフトウェアで効率的に管理」の記事の「5. Step Functionsとジョブ管理ソフトウェアを連携させる場合」の内容をSystemwalker Operation Managerの「クラウドサービス連携機能」を使って実現する手順となります。
AWS上でジョブ管理を実現する際の考慮ポイントを知りたい方は次の記事をご覧ください。

1. ユースケース

ユースケースとしてレンタカー業界で考えてみましょう。車両管理システム(基幹業務)がオンプレミスに、モバイル端末向けの予約システム(クラウドサービス業務)がAWS上に構築されているとします。この場合、既存の基幹業務とクラウドサービス業務を組み合わせた一元的な運用を実現したいと思うでしょう。
しかし、こういったケースでは、基幹業務の営業日に合わせたタイミング制御が必要となるため、従来の基幹システム上で利用していたジョブ管理ソフトウェアを引き続き利用するケースが少なくありません。その一方で、ジョブ管理ソフトウェアではAWSサービスの連携に必要な制御の作りこみが必要となるというデメリットがあります。
ここで注目したいのが、クラウドサービス連携機能です。この機能を利用することで、AWSサービスと連携するのにかかるジョブアプリケーション開発の期間を短縮することが可能となります。クラウドサービス連携機能は、REST実行ジョブと認証情報設定コマンドの2つの機能から構成されています。

2. クラウドサービス連携を活用してStep Functionsと連携する

ここでは実際にクラウドサービス連携機能を使用して、Step Functionsと連携するための手順をご紹介します。

2.1. 構成

オンプレミス上の仮想マシンに構築したSystemwalker Operation Manager V17.0.1からクラウドサービス連携機能であるREST実行ジョブを使用して、Step Functionsのステートマシンを実行、終了待ち合わせ、強制終了操作を行います。
REST実行ジョブからStep Functionsに対してリクエストの送信はAmazon API Gateway(以降、API Gatewayと略す)を経由する必要があります。
Step Functionsのステートマシンで制御するAWS Lambda(以降、Lambdaと略す)とAWS Batch(以降、Batchと略す)、およびLambdaとBatchの実行権限ポリシーが付与されたIAMロールに関しては今回作成済みであるものとします。

Step Functionsと連携する場合の構成の例
図1. Step Functionsと連携する場合の構成の例

2.2. アクセス用のIAMユーザーとアクセスキーの作成

まず、REST実行ジョブからStep Functionsへリクエストを送信するために必要な認証用のIAMユーザーを準備します。
以降、AWS側の手順は、本記事執筆時点のものを記載しています。コンソールの仕様変更により手順が変わる可能性があります。

1. AWSコンソールにルートユーザーまたはIAMの管理権限を持つIAMユーザーでログイン
2. IAMのページを開く
3. 左メニューから[ユーザー]を選択
4. [ユーザーの作成]を選択
5. [ユーザーの詳細を指定]画面でユーザー名を入力し、[次へ]を選択。[AWSマネジメントコンソールへのユーザーアクセスを提供する]はチェック不要
6. 許可を設定画面で作成するユーザーを"AmazonAPIGatewayInvokeFullAccess"ポリシーがアタッチされたグループに追加またはユーザーにポリシーを直接アタッチし、[次へ]を選択
7. [確認して作成]画面で[ユーザーの作成]を選択

IAMユーザーの[確認して作成]画面
図2. IAMユーザーの[確認して作成]画面

8. 手順3のユーザー一覧から作成したユーザーのユーザー名を選択
9. [セキュリティ認証情報]のタブを開き、[アクセスキーを作成]を選択
10. [主要なベストプラクティスと代替案にアクセスする]画面で[AWSの外部で実行されるアプリケーション]を選択し、[次へ]を選択
11. [説明タグを設定]画面で説明タグ値を入力し、[アクセスキーを作成]を選択
12. [アクセスキーを取得]画面でアクセスキーとシークレットアクセスキーが表示されるのでコピーしておき、[完了]を選択
アクセスキーとシークレットアクセスキーは、「2.6. 認証情報の登録」で使用します。

[アクセスキーを取得]画面
図3. [アクセスキーを取得]画面

2.3. IAMロールの作成

次に、API GatewayのAPI作成時に必要なIAMロールを作成します。

1. AWSコンソールにルートユーザーまたはIAMの管理権限をもつIAMユーザーでログイン
2. IAMサービスのページを開く
3. 左メニューから[ロール]を選択
4. [ロールの作成]を選択
5. [信頼されたエンティティ]画面で[信頼されたエンティティタイプ]は[AWSサービス]、[ユースケース]は[API Gateway]を選択し、[次へ]を選択
6. [許可を追加する]画面で[次へ]を選択
7. [名前、確認、および作成]画面で[ロール名]を入力し、[ロールを作成]を選択
8. ロール一覧から作成したロールを選択
9. [許可ポリシー]の[許可を追加]から[ポリシーをアタッチ]を選択
10. [その他の許可ポリシー]一覧から[AWSStepFunctionsFullAccess]を選択し、[許可を追加]を選択

 [AWSStepFunctionsFullAccess]が追加された許可ポリシー一覧
図4. [AWSStepFunctionsFullAccess]が追加された許可ポリシー一覧

2.4. Step Functionsのステートマシンの作成

次に、Step Functionsのステートマシンを作成します。

1. AWSコンソールにログイン
2. Step Funcstionsのページを開く
3. 左メニューから[ステートマシン]を選択
4. [ステートマシンの作成]を選択
5. [テンプレートの選択]画面では必要に応じてテンプレートを選択。今回は[Blank]を選択
6. [デザイン]画面からAWS LambdaとAWS batchの実行アクションをフローに配置

ステートマシンのフロー
図5. ステートマシンのフロー

7. [設定]を選択
8. [ステートマシンの設定]画面から下記項目を設定して、[作成]を選択
・[ステートマシン名]を変更
・[タイプ]は"標準"
・[アクセス許可]の[実行ロール]はAWS LambdaおよびAWS Batchの実行権限ポリシーが付与されたロールを選択
・その他必要に応じて設定を変更

作成したステートマシンのページでARNが表示されるのでコピーしておく。 ARNは、「2.7. 接続情報ファイルの作成」で使用します。

 [ステートマシンの設定]画面
図6. [ステートマシンの設定]画面

2.5. API GatewayでAPIを作成

次に、API GatewayでAPIを作成します。

1. AWSコンソールにログイン
2. API Gatewayのページを開く
3. 左メニューから[API]を選択
4. [APIを作成]を選択
5. [APIタイプを選択]画面で[REST API]の[構築]を選択
6. [REST APIを作成]画面で[新しいAPI]を選択し、API名を入力し、その他必要に応じて設定を変更し、[APIを作成]を選択
7. [リソース]画面から[リソースを作成]を選択
8. [リソースを作成]画面からリソースパスを"/"、リソース名を"start-execution"を入力し、[リソースを作成]を選択
9. [メソッド]の[メソッドを作成]を選択
10. [メソッドを作成]画面で下記項目を設定してメソッドを作成
・[メソッドタイプ]は"POST"を選択
・[統合タイプ]は"AWSのサービス"を選択
・[AWSリージョン]ステートマシンを作成したリージョンを選択
・[AWSのサービス]は"Step Functions"を選択
・[HTTPメソッド]は"POST"を選択
・[アクション名]は"StartExecution"を選択
・[実行ロール]は「2.3. IAMロールの作成」で作成したロールを選択

[メソッドを作成]画面
図7. [メソッドを作成]画面

11. [リソース]画面のメソッドリクエストの設定で[編集]を選択
12. [メソッドリクエストを編集]画面の[メソッドリクエストの設定]で[認可]を"AWS IAM"を選択し、[保存]を選択

 [メソッドリクエストを編集]画面
図8. [メソッドリクエストを編集]画面

13. 手順8~12と同様の手順でステートマシンの監視用、強制終了用のリソースとメソッドを作成。ただし、リソース名と[メソッドを作成]画面で指定する[アクション名]は以下のように指定

監視用

リソース名:describe-execution
アクション名:DescribeExecution

強制終了用

リソース名:stop-execution
アクション名:StopExecution

手順13実施後の[リソース]画面
図9. 手順13実施後の[リソース]画面

14. [リソース]画面で[APIをデプロイ]を選択
15. [ステージ]に[*新しいステージ*]を選択し、[ステージ名]に”stage”と入力して、[デプロイ]を選択
16. [ステージ]画面の[ステージの詳細]にAPI GatewayのURLが表示されるのでコピーしておく
API GatewayのURLは、「2.7. 接続情報ファイルの作成」で使用します。

2.6. 認証情報の登録

ここからはオンプレミス上に構築したSystemwalker Operation Managerの操作となります。
REST実行ジョブからAWSのサービスに接続するための認証情報の登録が必要です。

1. Systemwalker Operation Managerをインストールしたマシンに管理者アカウントでログイン
2. 以下のファイルを”/root/restjob/request”配下に作成

ファイル名:auth_stepfunctions.json

ソースコード1

3. 以下のコマンドを実行し、認証情報を登録

ソースコード2

4. 以下のコマンドを実行し、認証情報が登録されたかを確認

ソースコード3

以下のように出力されればOK

ソースコード4

【Systemwalker Operation ManagerがProxy環境下にある場合】
以下の認証情報も上記と同様の手順で登録します。

ファイル名:auth_proxy.json

ソースコード5

2.7. 接続情報ファイルの作成

次にREST実行ジョブがAWSのサービスに接続するために必要なパラメーターを記載した接続情報ファイルを作成します。

1. Systemwalker Operation managerをインストールしたマシンにログイン
2. 以下のファイルを”/root/restjob/request”配下に作成
太字の箇所は、用意した環境に応じて変更します。それ以外の箇所はサービスによる固定値となるため変更する必要はありません。

ファイル名:connection_info_stepfunctions.json

ソースコード6

ファイル名:main_body.json

ソースコード7

ファイル名:moni_body.json

ソースコード8

ファイル名:term_body.json

ソースコード9

2.8. REST実行ジョブの配置

次にREST実行ジョブを作成済みのジョブネットに配置します。

1. Systemwalker Operation Managerクライアントからスケジュールサーバーにログインし、ジョブネットの変更画面を開く
2. ジョブ一覧から"REST実行ジョブ"のアイコンを選択し、フローに配置する
3.ジョブの登録画面から「2.7. 接続情報ファイルの作成」で作成した接続情報ファイルのパスを入力し、OKを選択

ジョブ登録画面
図10. ジョブ登録画面

4. [ファイル]メニューから[上書き保存]を選択し、ジョブネットを保存する

ジョブネットの変更画面
図11. ジョブネットの変更画面

3. 動作を確認する

ここでは、REST実行ジョブでStep Functionsのステートマシンを制御できることを確認します。

3.1. Step Functionsのステートマシンを実行する

「2.8. REST実行ジョブの配置」で作成したジョブネットを起動します。ジョブネット監視画面のジョブの一覧からREST実行ジョブの状態が実行中の状態になることを確認します。

ジョブネット起動後のジョブネット監視画面
図12. ジョブネット起動後のジョブネット監視画面

次に、AWSコンソールのStep Functionsのページから実行先のステートマシンのページを開きます。ステートマシンの実行一覧を確認すると、ジョブネットが起動したときと同じタイミングでステートマシンが実行されていることが確認できます。

ジョブネット起動後のステートマシンの実行一覧
図13. ジョブネット起動後のステートマシンの実行一覧

3.2. Step Functionsのステートマシンの終了を待ち合わせる

REST実行ジョブがStep Functionsのステートマシンの終了を待ち合わせることができることを確認します。「3.1. Step Functionsのステートマシンを実行する」で実行したステートマシンのステータスが実行中の間はREST実行ジョブの状態も実行中となっています。

ステートマシンが実行中の間のREST実行ジョブの状態
図14. ステートマシンが実行中の間のREST実行ジョブの状態

次に、ステートマシンのステータスが成功になった後、REST実行ジョブの状態を確認します。しばらく待っているとREST実行ジョブの状態が正常終了に変わります。

ステートマシン成功後のステートマシン実行一覧
図15. ステートマシン成功後のステートマシン実行一覧
ステートマシン成功後のREST実行ジョブの状態
図16. ステートマシン成功後のREST実行ジョブの状態

3.3. Step Functionsのステートマシンを強制終了する

最後にREST実行ジョブを強制終了するとStep Functionsのステートマシンも強制終了されることを確認します。「3.1. Step Functionsのステートマシンを実行する」と同様にジョブネット起動し、Step Functionsのステートマシンのステータスを実行中の状態にします。

ジョブネット起動後のジョブネット監視画面
図17. ジョブネット起動後のジョブネット監視画面

ジョブネットを強制終了します。ジョブネット監視画面のジョブの一覧からREST実行ジョブの状態も強制終了になることを確認します。その後、ステートマシンのページから実行一覧を確認するとREST実行ジョブから起動したステートマシンのステートが中断済みになっていることが確認できます。

ジョブネット強制終了後のジョブネット監視画面
図18. ジョブネット強制終了後のジョブネット監視画面
ジョブネット強制終了後のステートマシン実行一覧
図19. ジョブネット強制終了後のステートマシン実行一覧

4. まとめ

4.1. 導入効果

当社での検証実績では、クラウドサービス連携機能を使うことでジョブの構築に要する工数が90%削減可能であるという結果が出ています。これは、Systemwalker Operation Managerのクラウドサービス連携機能が、AWSのワークフローを大幅に効率化する強力なツールであることを示しています。

4.2. おわりに

いかがだったでしょうか。今回ご紹介したSystemwalker Operation Managerのクラウドサービス連携機能でStep Functionsのワークフローを制御する手順から、制御に必要なプログラム開発を一切必要とせず、簡単な定義情報の設定のみで連携を実現できることがお分かりいただけたかと思います。

5. 製品紹介

Systemwalker Operation Managerの製品情報についてもっと詳しくお知りになりたい方は、ぜひ下記のページをご覧ください。

備考
Amazon Web Services、AWS、AWS Step Functions、Step Functions、AWS Lambda、AWS Batchは、Amazon.com, Inc. またはその関連会社の商標です。
本記事に記載されている会社名、システム名、製品名、サービス名などの固有名詞は一般に各社の登録商標または商標です。
また、本文および図表中に記載されている会社名、システム名、製品名、サービス名などには必ずしも「TM」、「®」を付記しておりません。

関連情報

ガラス張りのオフィスで仕事をする人々のグループ。

クラウド上のシステム運用にお悩みの方必見!

システムを安定稼働させるためには、システムの可用性、状態監視、業務運用管理が重要なポイントになりますが、従来のオンプレミスとクラウドとで設計や運用は異なるのでしょうか。重要なポイントは変わりませんが、クラウドの機能・特徴を意識した設計や運用が必要です。
特集「クラウド運用管理」ではクラウド運用の基本的な考え方を解説するとともに、システムを安定稼働させる方法についてわかりやすくご紹介します。