キューベースのマイクロサービスのオーケストレーション

レベル: 中級
所要時間: 10 分

このチュートリアルでは、AWS Step Functions と Amazon SQS を使用して、メッセージキューベースのマイクロサービスを調整するサーバーレスワークフローを設計および実行する方法を学びます。Step Functions はサーバーレスオーケストレーションサービスで、複数の AWS のサービスを連携させ、デバッグや変更を簡単に行える柔軟なワークフローを作成できます。Amazon SQS は、アプリケーションコンポーネントのクラウド内での通信を可能にする AWS のサービスです。

このチュートリアルでは、注文処理ワークフローの一部として、e コマースアプリケーションで受注してからの在庫確認リクエストをシミュレートします。Step Functions は、在庫確認リクエストを SQS のキューに送信します。AWS Lambda 関数は、キューを使用してリクエストをバッファリングするインベントリマイクロサービスとして機能します。リクエストを取得すると、在庫をチェックし、結果を Step Functions に返します。Step Functions のタスクがこのように設定されている場合、「コールバックパターン」と呼ばれます。コールバックパターンでは、このチュートリアルの在庫検証マイクロサービスなどの非同期タスクをワークフローに統合できます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-diagram

このチュートリアルには AWS アカウントが必要です

まずは無料で始める

AWS Step Functions または Amazon SQS に対して追加料金はかかりません。このチュートリアルで作成するリソースは無料利用枠の対象です。

AWS 無料利用枠の詳細 »

a. AWS マネジメントコンソールを開きます。このステップバイステップガイドは開いたままにしておいてください。画面が読み込まれたら、ユーザー名とパスワードを入力して作業を開始します。検索テキストボックスに「SQS」と入力し、[Simple Queue Service] を選択してサービスコンソールを開きます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1a

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1a

b.スクリーンショットに示すように、SQS コンソールのランディングページが表示されたら、[今すぐ始める] をクリックします。このページが表示されない場合は、次の手順に進んでください。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1b

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-1b

このステップでは、Amazon SQS キューを作成して設定します。キューは、分散アプリケーション間またはマイクロサービス間を移動するメッセージを保存する、信頼性とスケーラビリティの高いバッファです。キューは、アプリケーションのデカップリング、マイクロサービスの接続、タスクのバッチ処理、通知の保存を行う際に使用します。
このチュートリアルの SQS の使用例では、e コマースアプリケーションで受注からの在庫確認リクエストを保存するところをシミュレートします。


a. まず、店舗に届いた注文を保存するシンプルなキューを作成します。[キュー名] フィールドに「Orders」と入力します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2a

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2a

b.このチュートリアルでは、厳密な順序付けは必要ないため、キュータイプは変更しません。[標準キュー] を選択したままにします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2b

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2b

c. キューを設定する際、保持期間、最大メッセージサイズ、配信遅延などの設定を変更できます。このチュートリアルでは、デフォルトのパラメータを使用します。[キューをクイック作成] を選択します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2c

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2c

d. 新しいキューが作成され、キューリストで選択されます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2d

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-2d

次は、e コマースの注文の処理方法を記述するワークフローを設計します。ワークフローでは、1 つのプロセスを、一連の独立タスクとして記述します。そうしたタスクは何度も繰り返し発生します。
AWS Step Functions でワークフローを設計します。ワークフローは、マイクロサービスに在庫の検証をリクエストします。多くのマイクロサービスは、キューを使用してリクエストを受信します。このチュートリアルでは、AWS Lambda 関数を使用してマイクロサービスを表します。


a.AWS Step Functions コンソールを開きます。[コードスニペットで作成] を選択し、ステートマシンに InventoryStateMachine という名前を付けます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3c

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3c

b.[ステートマシンの定義] ウィンドウの内容を、Amazon ステートメント言語 (ASL) で作成された以下のステートマシン定義に置き換えます。Amazon ステートメント言語は JSON ベースの構造化言語で、ステートマシンの定義に使用します。

このステートマシンは、タスク状態を使用してメッセージを SQS キューに入れます。このタスク状態は、コールバックパターン向けに設定されています。リソースに .waitForTaskToken を追加すると、Step Functions はタスクトークンを JSON ペイロードに追加し、コールバックを待ちます。マイクロサービスは、Step Functions API を呼び出すことにより、Step Functions に結果を返すことができます。

{
  "Comment": "An example of the Amazon States Language for starting a callback task.",
  "StartAt": "Check Inventory",
  "States": {
    "Check Inventory": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken",
      "Parameters": {
        "QueueUrl": "<INSERT SQS QUEUE URL HERE>",
        "MessageBody": {
          "MessageTitle": "Callback Task started by Step Functions",
          "TaskToken.$": "$$.Task.Token"
        }
      },
      "Next": "Notify Success",
      "Catch": [
      {
        "ErrorEquals": [ "States.ALL" ],
        "Next": "Notify Failure"
      }
      ]
    },
    "Notify Success": {
      "Type": "Pass",
      "Result": "Callback Task started by Step Functions succeeded",
      "End": true
    },
    "Notify Failure": {
      "Type": "Pass",
      "Result": "Callback Task started by Step Functions failed",
      "End": true
    }
  }
}
tmt-orchestrate-microservices-with-message-queues-on-step-functions-3d

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3d

c.SQS コンソールから SQS キューの URL をコピーして、ステートマシンの定義に貼り付けます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3e

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3e

d.[更新] ボタンをクリックし、Step Functions に、ASL ステートマシン定義をビジュアルワークフローへと変換させます。視覚的なワークフローを確認することで、プロセスが正しく記述されていることを簡単に確認できます。マイクロサービスが結果を返すと、ステートマシンは成功ブランチに進みます。何か問題が発生した場合は、例外をキャッチして適切な分岐に進み、修正アクションを実行できます。

[次へ] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3f

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3f

e.次に、IAM ロールをワークフローに追加します。[IAM ロールの作成] を選択し、「inventory-state-machine-role」という名前を付けます。Step Functions によってワークフローが分析され、ワークフローで使用されるリソースを含む IAM ポリシーが生成されます。[ステートマシンの作成] をクリックします。ステートマシンが正常に作成されたことを示す緑色のバナーが表示されます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3g

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-3g

AWS IAM は、AWS リソースへのアクセスを安全に制御するためのウェブサービスです。このステップでは、Step Functions から SQS へのアクセスを許可する IAM ロールを作成します。


a.別のブラウザウィンドウで AWS マネジメントコンソールを開きます。画面が読み込まれたら、検索バーに [IAM] と入力し、[IAM] を選択してサービスコンソールを開きます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4a

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4a

b.[ロール] をクリックしてから、[ロールの作成] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4b

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4b

c.[ロールの作成] 画面で、[AWS のサービス] を選択した状態のまま、[Lambda] を選択し、[次へ: アクセス許可] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4c

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4c

d. ロールの作成画面で、次をアタッチします
AmazonSQSFullAccess ポリシーと AWSStepFunctionsFullAccess ポリシー。 [次へ: タグ]、[次へ: 確認] の順にクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4d

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4d

e.ロール名に「inventory-lambda-role」と入力して、[ロールの作成] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4e

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-4e

このステップでは、インベントリマイクロサービスを模擬的に行う Lambda 関数を作成します。Lambda 関数は SQS からメッセージを取得し、リクエストの結果を表すメッセージを Step Functions に返します。


a.[サービス] をクリックし、検索バーに「Lambda」と入力してから、[Lambda] を選択してサービスコンソールを開きます。

step5-a

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5a

b.[関数の作成] を選択します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5b

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5b

c.[一から作成] が選択された状態のままにしておきます。次に、初めての Lambda 関数を以下のように設定します。

[名前] に「Inventory」と入力します。
[ランタイム] で [Node.js 8.10] を選択します。
[ロール] で、[既存のロールを使用] を選択します。

リストから [inventory-lambda-role] を選択します
[関数の作成] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5c

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5c

d.[関数コード] ウィンドウの内容を以下のコードに置き換えてから、[保存] をクリックします。

console.log('Loading function');
          const aws = require('aws-sdk');

          exports.handler = (event, context, callback) => {
              const stepfunctions = new aws.StepFunctions();

              for (const record of event.Records) {
                  const messageBody = JSON.parse(record.body);
                  const taskToken = messageBody.TaskToken;

                  const params = {
                      output: "\"Callback task completed successfully.\"",
                      taskToken: taskToken
                  };

                  console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`);

                  stepfunctions.sendTaskSuccess(params, (err, data) => {
                      if (err) {
                          console.error(err.message);
                          callback(err.message);
                          return;
                      }
                      console.log(data);
                      callback(null);
                  });
              }
          };
tmt-orchestrate-microservices-with-message-queues-on-step-functions-5d

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5d

e.SQS ティガーを選択します。[注文] キューのトグルを [有効] に設定します。[追加] 、続いて [保存] の順にクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5e

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-5e

サーバーレスワークフローを実行する準備が整いました。 ステートマシンの実行はワークフローのインスタンスであり、Step Function ステートマシンの実行ごとに発生し、タスクが実行されます。それぞれの Step Functions ステートマシンは同時に複数実行できます。ステートマシンの実行は、Step Functions コンソールから開始するか (この後実行します)、AWS SDK、Step Functions API アクション、AWS CLI を使用して行います。ステートマシンの実行では、JSON 入力を渡すと、JSON 出力が生成されます。


a.[サービス] をクリックし、検索バーに「Step」と入力してから、[Step Functions] を選択してサービスコンソールを開きます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6a

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6a

b.[ステートマシン] 画面で、[InventoryStateMachine] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6b

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6b

c.[実行を開始] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6c

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6c

d.[新しい実行] ダイアログボックスが表示され、ステートマシンへの入力を指定できます。このステートマシンは入力に依存しません。デフォルトの入力を使用できます。[実行を開始] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6d

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6d

e.ワークフローの実行中、[ビジュアルワークフロー] ペインの各ステップの色が変わります。実行が完了するまで数秒待ちます。次に、[実行の詳細] ペインで、[入力] と [出力] をクリックして、ワークフローの入力内容と結果を表示します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6e

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6e

f.ステップ関数を使用すると、各状態の入力と出力を含む、ワークフロー実行の各ステップを検査できます。ワークフローの各タスクをクリックし、[ステップの詳細] の下にある [入力] と [出力] フィールドを展開します。ステートマシンへの入力ペイロードが各ステップから次のステップに渡され、各ステップが完了するたびにペイロードが更新されることがわかります。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6f

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6f

g.[実行イベント履歴] セクションまで下にスクロールします。実行の各ステップを順にクリックして、Step Functions がどのように SQS を呼び出し、ステップ間でペイロードを渡したかを確認します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6g

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6g

h.InventoryStateMachine の出力に応じて、ワークフローは成功または失敗した可能性があります。
実際のシナリオでは、受け取ったエラーメッセージに応じて、タスクを再試行するか、他のアクションを実行するかを決定することになるかもしれません。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6h

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-6h

このステップでは、AWS Step Functions と AWS Lambda の関連リソースを終了します。
重要: 活用されていないリソースを終了することで費用を削減でき、お勧めです。リソースを終了しないと、料金が発生することがあります。


a.AWS Step Functions コンソールウィンドウの上部で [ステートマシン] をクリックします。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7a

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7a

b.ステートマシンウィンドウで、[InventoryStateMachine] をクリックし、[削除] を選択します。ダイアログボックスで [ステートマシンの削除] を選択して、アクションを確認します。処理中の実行がすべて完了したことが Step Functions により確認されると、1~2 分でステートマシンが削除されます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7b

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7b

c.次に、Lambda 関数を削除します。AWS マネジメントコンソールのメニューで [サービス] をクリックしてから、[Lambda] を選択します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7c

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7c

d.[関数] 画面で、このチュートリアル用に作成した Inventory 関数をクリックし、[アクション]、[削除] の順に選択します。もう一度 [削除] をクリックして削除を確定します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7d

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7d

e.最後に、IAM ロールを削除します。AWS マネジメントコンソールのメニューで [サービス] をクリックしてから、[IAM] を選択します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7e

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7e

f.このチュートリアル用に作成した IAM ロールを選択し、[ロールの削除] をクリックします。ダイアログボックスで [はい、削除します] をクリックして削除を承認します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7f

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7f

g.キューリストで、[注文] キューを選択します。次に、[キューアクション] から、[キューの削除] を選択します。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7g

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7g

h.[キューの削除] ダイアログボックスが表示されます。まだメッセージが残っている場合でも、キューを削除できます。[はい、キューを削除] を選択します。キューが削除されます。

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7h

(クリックして拡大)

tmt-orchestrate-microservices-with-message-queues-on-step-functions-7h

AWS Step Functions と Amazon SQS を使用して、メッセージキューでクラウド内のマイクロサービスをオーケストレーションしました。Step Functions は、生産性と俊敏性が重要な考慮事項であるアプリケーションリソースを調整する必要がある場合に最適です。

キューベースのマイクロサービスのオーケストレーションについて学習したので、次のチュートリアルに進み、ステップ関数を使用してエラーを処理する方法を学習できます。Retry および Catch フィールドを使用してステートマシンを作成します。これは、エラーメッセージタイプに基づいて模擬 API からの応答コードに対応する、関数エラー処理と呼ばれるメソッドです。

はい
いいえ