#はじめに
前回の記事の続きで、APIGatewayを使いステップ関数を使用して、マイクロサービスをオーケストレーションし、AWSサービスにアクセスする方法について書いていきます。
#マイクロサービスの自動化
まず前提として、Step Functionsに組み込まれている障害処理、意思決定の分岐、および並列処理を使用して、アプリケーションのバックエンドを調整しているとします。
開発者は、APIGatewayを使用してバックエンドマイクロサービスへのアクセスを管理しています。
##APIGatewayを使う
要求、応答形式を標準化し、ビジネスロジックをルーティングロジックから切り離すのに役立ちます。
開発者が認証、スロットル、負荷分散などの責任を軽減できるようにすることで、複雑さを軽減します。
##新しいAPIGateway統合を活用する
開発者はAPIGatewayエンドポイントを使用して、堅牢なワークフローを構築してマイクロサービスを調整できます。
これらのマイクロサービスは、サーバーレスまたはコンテナベースにすることができます。
次の例は、APIGatewayとStep Functionsを使用し、マイクロサービスをオーケストレーションして、AWSサービスにアクセスする方法を説明しています。
このアプリケーションのサンプルコード
##アプリケーションを実行する
GitHubリポジトリのクローンを作成します。
$ git clone https://github.com/aws-samples/example-step-functions-integration-api-gateway.git
$ cd example-step-functions-integration-api-gateway
AWS SAM CLIを使用して、アプリケーションをデプロイし、すべてのデフォルトのパラメーター入力を受け入れます。
$ sam build && sam deploy -g
これにより以下の17のリソースがデプロイされます。
- Step Functions標準のワークフロー
- 3つのリソースエンドポイントを備えたAPI Gateway REST API
- 3つのLambda関数
- DynamoDBテーブルを含む17のリソース
[StockTradingStateMachineArn]値をメモします。
これは、コマンドライン出力またはAWSLambdaコンソールの[アプリケーション/セクション]にあります。
##ワークフローを手動でトリガーする
ターミナルウィンドウから、ワークフローを手動でトリガーします。
aws stepFunctions start-execution \
--state-machine-arn <StockTradingStateMachineArnValue>
ワークフローが実行されると、APIGatewayから[/check]リソースへのGETリクエストを介して、Lambda関数が呼び出されます。
これにより、1〜100のランダムな株価値が返されます。
この値は、50未満かそれ以上かによって、購入または販売の選択で評価されます。
##Lambda関数を呼び出す
販売状態と購入状態は、APIGateway統合を使用してLambda関数を呼び出します。
POSTメソッドを使用します。
"stock_value"は、 POSTリクエストです。
"transaction_result"で返され、"ResponseBody"に渡します。
最終状態は、遷移のログをDynamoDBテーブルに書き込みます。
##AWSSAMテンプレートを使用したリソースの定義
ステップ関数リソースは、このAWSSAMテンプレートで定義されています。
"DefinitionSubstitutions"のフィールドは、ワークフロー定義にテンプレートパラメータを渡すために使用されます。
StockTradingStateMachine:
Type: AWS::Serverless::StateMachine # More info about State Machine Resource: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-statemachine.html
Properties:
DefinitionUri: statemachine/stock_trader.asl.json
DefinitionSubstitutions:
StockCheckPath: !Ref CheckPath
StockSellPath: !Ref SellPath
StockBuyPath: !Ref BuyPath
APIEndPoint: !Sub "${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com"
DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem
DDBTable: !Ref TransactionTable
ワークフローは別のファイル(/statemachine/stock_trader.asl.json)で定義されています。
次のコードブロックは、株価のチェック状態を定義します。
新しいリソースは、[arn:aws:states:::apigateway:invoke]APIGatewayのサービス統合タイプを意味します。
パラメータオブジェクトは、サービス統合を構成するために必要なフィールドを保持します。
パスと"ApiEndpoint"値によって、提供される"DefinitionsSubstitutions"のAWS SAMテンプレート内のフィールドです。
"RequestBody"の入力はアマゾン米国の言語を使って動的に定義されます。
[.$]フィールド名の末尾に"RequestBody"を指定するパラメータは、入力にJSONノードを参照するためのパスを使用します。
"Check Stock Value": {
"Type": "Task",
"Resource": "arn:aws:states:::apigateway:invoke",
"Parameters": {
"ApiEndpoint":"${APIEndPoint}",
"Method":"GET",
"Stage":"Prod",
"Path":"${StockCheckPath}",
"RequestBody.$":"$",
"AuthType":"NO_AUTH"
},
"Retry": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"IntervalSeconds": 15,
"MaxAttempts": 5,
"BackoffRate": 1.5
}
],
"Next": "Buy or Sell?"
},
展開プロセスは、ApiEndpoint値を検証します。
サービス統合は、"https:// [APIendpoint] / [Stage] / [Path ]"の形式で、parametersブロックで提供される情報から、APIエンドポイントのURLを構築します。
#所感
APIゲートウェイでのステップ機能の統合の紹介と
REST API、HTTP APIの機能を、ワークフローステップから直接呼び出す機能をご紹介しました。
Step Functionsに組み込まれているエラー処理は、開発者がコードを削減し、ビジネスロジックを切り離すのに役立ちます。
これをAPIGatewayと組み合わせて、認証、スロットリング、負荷分散などの重荷を軽減できます。
インフラストラクチャを管理することなく、APIGatewayを介してコンテナまたはLambda関数にデプロイされたマイクロサービスを自動化できるので、試してみる価値大です!