LoginSignup
2
3

More than 3 years have passed since last update.

Step FunctionsとAPI Gatewayの統合【後編】

Last updated at Posted at 2020-12-07

はじめに

前回の記事の続きで、APIGatewayを使いステップ関数を使用して、マイクロサービスをオーケストレーションし、AWSサービスにアクセスする方法について書いていきます。

マイクロサービスの自動化

まず前提として、Step Functionsに組み込まれている障害処理、意思決定の分岐、および並列処理を使用して、アプリケーションのバックエンドを調整しているとします。
開発者は、APIGatewayを使用してバックエンドマイクロサービスへのアクセスを管理しています。

APIGatewayを使う

要求、応答形式を標準化し、ビジネスロジックをルーティングロジックから切り離すのに役立ちます。
開発者が認証、スロットル、負荷分散などの責任を軽減できるようにすることで、複雑さを軽減します。

新しいAPIGateway統合を活用する

開発者はAPIGatewayエンドポイントを使用して、堅牢なワークフローを構築してマイクロサービスを調整できます。
これらのマイクロサービスは、サーバーレスまたはコンテナベースにすることができます。

次の例は、APIGatewayとStep Functionsを使用し、マイクロサービスをオーケストレーションして、AWSサービスにアクセスする方法を説明しています。

このアプリケーションのサンプルコード

2020-12-07_10h31_44.png

アプリケーションを実行する

GitHubリポジトリのクローンを作成します。

Bash
$ git clone https://github.com/aws-samples/example-step-functions-integration-api-gateway.git
$ cd example-step-functions-integration-api-gateway

AWS SAM CLIを使用して、アプリケーションをデプロイし、すべてのデフォルトのパラメーター入力を受け入れます。

Bash
$ sam build && sam deploy -g

image.png

これにより以下の17のリソースがデプロイされます。

  • Step Functions標準のワークフロー
  • 3つのリソースエンドポイントを備えたAPI Gateway REST API
  • 3つのLambda関数
  • DynamoDBテーブルを含む17のリソース

[StockTradingStateMachineArn]値をメモします。
これは、コマンドライン出力またはAWSLambdaコンソールの[アプリケーション/セクション]にあります。

image.png

ワークフローを手動でトリガーする

ターミナルウィンドウから、ワークフローを手動でトリガーします。

Bash
aws stepFunctions start-execution \
--state-machine-arn <StockTradingStateMachineArnValue>

応答は以下のようなものが出ます。
image.png
image.png

ワークフローが実行されると、APIGatewayから[/check]リソースへのGETリクエストを介して、Lambda関数が呼び出されます。

これにより、1〜100のランダムな株価値が返されます。
この値は、50未満かそれ以上かによって、購入または販売の選択で評価されます。

Lambda関数を呼び出す

販売状態と購入状態は、APIGateway統合を使用してLambda関数を呼び出します。
POSTメソッドを使用します。
"stock_value"は、 POSTリクエストです。
"transaction_result"で返され、"ResponseBody"に渡します。
最終状態は、遷移のログをDynamoDBテーブルに書き込みます。

AWSSAMテンプレートを使用したリソースの定義

ステップ関数リソースは、このAWSSAMテンプレートで定義されています。
"DefinitionSubstitutions"のフィールドは、ワークフロー定義にテンプレートパラメータを渡すために使用されます。

YAML
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ノードを参照するためのパスを使用します。

YAML
"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関数にデプロイされたマイクロサービスを自動化できるので、試してみる価値大です!

公式リンク

Step FunctionsからAPI Gatewayを利用する
AWS公式サイト

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3