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 と以下のリソースを使用する場合の詳細について、詳細を紹介します。
-
AWS SAM を使用して Step Functions ステートマシンを作成する チュートリアルを完了して、AWS SAM を使ってステートマシンを作成してください。
-
AWS::Serverless::StateMachine リソースを指定します。
-
使用する AWS SAM ポリシーテンプレート を検索します。
-
Step Functions と共に AWS Toolkit for Visual Studio Code を使用
-
AWS SAM で利用できる機能の詳細については「AWS SAM CLI リファレンス」を確認してください。
Infrastructure Composer の Workflow Studio などのビジュアルビルダーを使用して、Infrastructure as Code (IaC) でワークフローを設計および構築することもできます。詳細については、「Infrastructure Composer で Workflow Studio を使用して Step Functions ワークフローを構築する」を参照してください。