AWS SAM を使用して Step Functions ワークフローを構築する - AWS Step Functions

AWS SAM を使用して Step Functions ワークフローを構築する

Step Functions で AWS Serverless Application Model を使用すると、ワークフローを構築し、Lambda 関数、API、イベントなどの必要なインフラストラクチャをデプロイして、サーバーレスアプリケーションを作成できます。

また、統合エクスペリエンスの一部として AWS Serverless Application Model CLI を AWS Toolkit for Visual Studio Code と組み合わせて使用して、AWS Step Functions ステートマシンを構築およびデプロイできます。AWS SAM を使用してサーバーレスアプリケーションを構築し、VS Code IDE でステートマシンを構築できます。その後、リソースを検証、パッケージ化、デプロイできます。

ヒント

AWS SAM を使用して Step Functions ワークフローを開始するサーバーレスアプリケーションのサンプルをデプロイするには、「AWS Step Functions ワークショップ」の「AWS SAM によるデプロイ」を参照してください。

Step Functions を AWS SAM で使う理由

Step Functions を AWS SAM とともに使用する場合、以下を実行できます。

  • AWS SAM サンプルテンプレートを使用して開始します。

  • ステートマシンをサーバーレスアプリケーションにビルドします。

  • 変数置換を使用して、デプロイ時に ARN をステートマシンに置き換えます。

    AWS CloudFormation は、CloudFormation テンプレートに指定した値にワークフロー定義内の動的な参照を追加できる DefinitionSubstitutions をサポートしています。${dollar_sign_brace} 表記を使用してワークフロー定義に代替を追加することで、動的な参照を追加できます。また、これらの動的参照は、CloudFormation テンプレートの StateMachine リソースの DefinitionSubstitutions プロパティで定義する必要があります。これらの置換は、CloudFormation スタックの作成プロセス中に実際の値に置き換えられます。詳細については、「AWS SAM テンプレート内の DefinitionSubstitutions」を参照してください。

  • AWS SAM ポリシーテンプレートを使用して、ステートマシンのロールを指定します。

  • API Gateway、Eventbridge イベントと共に、または AWS SAM テンプレート内のスケジュールにおいてステートマシンの実行を開始します。

Step Functions と AWS SAM 仕様 との統合

使用可能な AWS SAM ポリシーテンプレート を使用すると、ステートマシンにアクセス許可を追加できます。これらのアクセス許可では、Lambda 関数やその他の AWS リソースをオーケストレートして、複雑で堅牢なワークフローを形成を有効にできます。

SAM CLI との Step Functions の統合

Step Functions を AWS SAM CLI と統合。これを使用して、ステートマシンをサーバーレスアプリケーションにすばやく開発します。

AWS SAM を使用して Step Functions ステートマシンを作成する チュートリアルを試して、AWS SAM を使用してステートマシンを作成する方法を学びます。

サポートされる AWS SAM CLI 関数は次のとおりです。

CLI コマンド 説明
sam init

AWS SAM テンプレートを使用してサーバーレスアプリケーションを初期化します。Step Functions 用の SAM テンプレートで使用できます。

sam validate AWS SAM テンプレートを検証します。
sam package

AWS SAM アプリケーションをパッケージ化します。コードと依存関係の ZIP ファイルを作成し、次にそれを Amazon S3 にアップロードします。次に、AWS SAM テンプレートのコピーを返し、ローカルのアーティファクトへの参照を、コマンドがアーティファクトをアップロードした Amazon S3 の場所に置き換えます。

sam deploy AWS SAM アプリケーションをデプロイします。
sam publish

AWS SAM アプリケーションを AWS Serverless Application Repository に公開します。このコマンドは、パッケージ化された AWS SAM テンプレートを受け取り、指定されたリージョンにアプリケーションを公開します。

注記

AWS SAM ローカルを使用するときは、Lambda および API Gateway をローカルでエミュレートできます。ただし、AWS SAM を使用して Step Functions をローカルでエミュレートすることはできません。

AWS SAM テンプレート内の DefinitionSubstitutions

ステートマシンは、AWS SAM で CloudFormation テンプレートを使用して定義できます。AWS SAM では、ステートマシンをテンプレート内でインラインで定義するか、別個のファイルに定義できます。以下の AWS SAM テンプレートには、株取引のワークフローをシミュレートするステートマシンが含まれています。このステートマシンは 3 つの Lambda 関数を呼び出して、株の価格を確認し、株を売買するかを決定します。その後、この取引は Amazon DynamoDB テーブルに記録されます。次のテンプレートの Lambda 関数と DynamoDB テーブルの ARN は、DefinitionSubstitutions を使用して指定されます。

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: | step-functions-stock-trader Sample SAM Template for step-functions-stock-trader Resources: StockTradingStateMachine: Type: AWS::Serverless::StateMachine Properties: DefinitionSubstitutions: StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn DDBPutItem: !Sub arn:${AWS::Partition}:states:::dynamodb:putItem DDBTable: !Ref TransactionTable Policies: - DynamoDBWritePolicy: TableName: !Ref TransactionTable - LambdaInvokePolicy: FunctionName: !Ref StockCheckerFunction - LambdaInvokePolicy: FunctionName: !Ref StockBuyerFunction - LambdaInvokePolicy: FunctionName: !Ref StockSellerFunction DefinitionUri: statemachine/stock_trader.asl.json StockCheckerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-checker/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 StockSellerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-seller/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 StockBuyerFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/stock-buyer/ Handler: app.lambdaHandler Runtime: nodejs18.x Architectures: - x86_64 TransactionTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S

以下のコードは、AWS SAM を使用して Step Functions ステートマシンを作成する チュートリアルで使用する、stock_trader.asl.json ファイルのステートマシン定義です。このステートマシン定義には、${dollar_sign_brace} 表記で示される複数の DefinitionSubstitutions が含まれています。例えば、Check Stock Value タスクに静的 Lambda 関数 ARN を指定する代わりに、置換 ${StockCheckerFunctionArn} が使用されます。この置換はテンプレートの DefinitionSubstitutions プロパティで定義されます。DefinitionSubstitutions はステートマシンリソースのキーと値のペアのマップです。DefinitionSubstitutions では、${StockCheckerFunctionArn} は CloudFormation 組み込み関数 !GetAtt を使用して StockCheckerFunction リソースの ARN にマッピングされます。AWS SAM テンプレートをデプロイすると、テンプレート内の DefinitionSubstitutions は実際の値に置き換えられます。

{ "Comment": "A state machine that does mock stock trading.", "StartAt": "Check Stock Value", "States": { "Check Stock Value": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockCheckerFunctionArn}" }, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.stock_price", "NumericLessThanEquals": 50, "Next": "Buy Stock" } ], "Default": "Sell Stock" }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockBuyerFunctionArn}" }, "Retry": [ { "ErrorEquals": [ "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2 } ], "Next": "Record Transaction" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "${StockSellerFunctionArn}" }, "Next": "Record Transaction" }, "Record Transaction": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:putItem", "Parameters": { "TableName": "${DDBTable}", "Item": { "Id": { "S.$": "$.id" }, "Type": { "S.$": "$.type" }, "Price": { "N.$": "$.price" }, "Quantity": { "N.$": "$.qty" }, "Timestamp": { "S.$": "$.timestamp" } } }, "End": true } } }

次のステップ

Step Functions で AWS SAM と以下のリソースを使用する場合の詳細について、詳細を紹介します。

Infrastructure Composer の Workflow Studio などのビジュアルビルダーを使用して、Infrastructure as Code (IaC) でワークフローを設計および構築することもできます。詳細については、「Infrastructure Composer で Workflow Studio を使用して Step Functions ワークフローを構築する」を参照してください。