

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Step Functions を使用したワークフローの開発
<a name="developing-workflows"></a>

Step Functions コンソールと Workflow Studio ビジュアルエディタでワークフローの構築を開始することをお勧めします。空のキャンバスから開始することもできれば、一般的なシナリオの場合はスターターテンプレートを選択することもできます。

ワークフローを構築するには、次のタスクが必要です。
+ ワークフローの定義
+ ワークフローの実行とデバッグ
+ ワークフローのデプロイ

Amazon States Language でステートマシンを定義します。Amazon States Language の定義を手動で作成できますが、Workflow Studio はチュートリアルで取り上げられます。Workflow Studio を使用すると、マシン定義の定義、ステップの視覚化と編集、ワークフローの実行とデバッグ、および結果のすべてを Step Functions コンソール内で表示できます。

**Visual Studio Code での Workflow Studio の使用**  
 AWS ツールキットを使用すると、VS Code 内から Workflow Studio を使用して、ステートマシン内の個々の状態を視覚化、構築、テストすることもできます。ステートへの入力と変数を設定し、テストを開始すると、データがどのように変換されるかを確認できます。ワークフローを調整して再テストできます。完了したら、変更を適用してステートマシンを更新できます。詳細については、 AWS Toolkit for Visual Studio Codeの「[Workflow Studio の使用](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html)」を参照してください。

 AWS Command Line Interface () の多くの Step Functions 機能を使用することもできますAWS CLI。例えば、ステートマシンを作成し、既存のステートマシンを一覧表示できます。で Step Functions コマンドを使用して、実行 AWS CLI の開始と管理、アクティビティのポーリング、タスクハートビートの記録などを行うことができます。Step Functions コマンドがすべて記載されたリスト、使用可能な引数、および、使用方法を示す例については、「*AWS CLI コマンドリファレンス*」を参照してください。[AWS CLI コマンドリファレンス](https://docs.aws.amazon.com/cli/latest/reference/)

AWS CLI コマンドは Amazon States Language に厳密に従うため、 AWS CLI を使用して Step Functions API アクションについて学習できます。また、既存の API の知識を使用して、コマンドラインからコードのプロトタイプを作成したり Step Functions アクションを実行したりできます。

**ステートマシン定義の検証**  
API を使用してステートマシンを**検証**し、ワークフローを作成する前に潜在的な問題を見つけることができます。  
ワークフローの検証の詳細については、「Step Functions API リファレンス」の「[ValidateStateMachineDefinition](https://docs.aws.amazon.com/step-functions/latest/apireference/API_ValidateStateMachineDefinition.html)」を参照してください。

最小限のセットアップを開始するには、「[Lambda ステートマシンの作成](tutorial-creating-lambda-state-machine.md)」チュートリアルに従います。このチュートリアルでは、Lambda 関数を呼び出す 1 つのステップでワークフローを定義し、ワークフローを実行して結果を表示する方法を示します。

## ワークフローの定義
<a name="development-define"></a>

ワークフロー開発の最初のステップは、Amazon States Language でステップを定義することです。設定とツールに応じて、Step Functions ステートマシンを JSON、YAML、または文字列化された Amazon States Language (ASL) 定義として定義できます。

次の表で、ツール別にサポートされる ASL ベースの定義の形式を示します。


| AWS ツール | サポートされる形式 | 
| --- | --- | 
| Step Functions コンソール | JSON | 
| HTTPS サービス API | 文字列化された ASL | 
| AWS CLI | 文字列化された ASL | 
| Step Functions Local | 文字列化された ASL | 
| AWS Toolkit for Visual Studio Code | JSON、YAML | 
| AWS SAM | JSON、YAML | 
| CloudFormation | JSON、YAML、文字列化された ASL | 

テンプレートのステートマシン定義にある YAML の単一行のコメントは、作成されたリソースの定義には転送されません。コメントを保持する必要がある場合は、ステートマシン定義内で `Comment` プロパティを使用する必要があります。詳細については、「[ステートマシン構造](statemachine-structure.md)」を参照してください。

 CloudFormation および を使用すると AWS SAM、ステートマシン定義を Amazon S3 (JSON または YAML 形式) にアップロードし、定義の Amazon S3 の場所をテンプレートに指定できます。詳細については、「[AWS::StepFunctions::StateMachine S3Location](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-stepfunctions-statemachine-s3location.html)」ページを参照してください。

次のサンプル CloudFormation テンプレートは、異なる入力形式を使用して同じステートマシン定義を提供する方法を示しています。

------
#### [ JSON with Definition ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "Definition": {
          "StartAt": "HelloWorld",
          "States": {
            "HelloWorld": {
              "Type": "Pass",
              "End": true
            }
          }
        }
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ JSON with DefinitionString ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "AWS Step Functions sample template.",
  "Resources": {
    "MyStateMachine": {
      "Type": "AWS::StepFunctions::StateMachine",
      "Properties": {
        "RoleArn": {
          "Fn::GetAtt": [ "StateMachineRole", "Arn" ]
        },
        "TracingConfiguration": {
          "Enabled": true
        },
        "DefinitionString": "{\n  \"StartAt\": \"HelloWorld\",\n  \"States\": {\n    \"HelloWorld\": {\n      \"Type\": \"Pass\",\n      \"End\": true\n    }\n  }\n}"
      }
    },
    "StateMachineRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Action": [
                "sts:AssumeRole"
              ],
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "states.amazonaws.com"
                ]
              }
            }
          ]
        },
        "ManagedPolicyArns": [],
        "Policies": [
          {
            "PolicyName": "StateMachineRolePolicy",
            "PolicyDocument": {
              "Statement": [
                {
                  "Action": [
                    "lambda:InvokeFunction"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "Outputs": {
    "StateMachineArn": {
      "Value": {
        "Ref": "MyStateMachine"
      }
    }
  }
}
```

------
#### [ YAML with Definition ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      Definition:
        # This is a YAML comment. This will not be preserved in the state machine resource's definition.
        Comment: This is an ASL comment. This will be preserved in the state machine resource's definition.
        StartAt: HelloWorld
        States:
          HelloWorld:
            Type: Pass
            End: true
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachine
```

------
#### [ YAML with DefinitionString ]

```
AWSTemplateFormatVersion: 2010-09-09
Description: AWS Step Functions sample template.
Resources:
  MyStateMachine:
    Type: 'AWS::StepFunctions::StateMachine'
    Properties:
      RoleArn: !GetAtt
        - StateMachineRole
        - Arn
      TracingConfiguration:
        Enabled: true
      DefinitionString: |
        {
            "StartAt": "HelloWorld",
            "States": {
                "HelloWorld": {
                    "Type": "Pass",
                    "End": true
                }
            }
        }
  StateMachineRole:
    Type: 'AWS::IAM::Role'
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - 'sts:AssumeRole'
            Effect: Allow
            Principal:
              Service:
                - states.amazonaws.com
      ManagedPolicyArns: []
      Policies:
        - PolicyName: StateMachineRolePolicy
          PolicyDocument:
            Statement:
              - Action:
                  - 'lambda:InvokeFunction'
                Resource: "*"
                Effect: Allow

Outputs:
  StateMachineArn:
    Value:
      Ref: MyStateMachinele
```

------

**AWS SDKs を使用してワークフローを開発する**  
Step Functions は、 AWS SDKs for Java、.NET、Ruby、PHP、Python (Boto 3)、JavaScript、Go、C\+\+ でサポートされています。これらの SDK は、複数のプログラミング言語で Step Functions HTTPS API アクションを使用する便利な方法を提供します。これらの SDK ライブラリで公開されている API アクションを使用して、ステートマシン、アクティビティ、ステートマシンスターターを開発できます。また、これらのライブラリを使用して可視性オペレーションにアクセスし、独自の Step Functions のモニタリングおよびレポートツールを開発できます。現行の AWS SDK および [Amazon Web Services のツール](https://aws.amazon.com/tools/)については、リファレンスドキュメントを参照してください。

**HTTPS リクエストによるワークフローの開発**  
Step Functions は HTTPS リクエスト経由でアクセス可能なサービスオペレーションを提供します。これらのオペレーションを使用して、独自のライブラリから Step Functions と直接通信できます。サービス API アクションを使用するステートマシン、ワーカー、ステートマシンスターターを開発できます。また、API アクションを介して可視性オペレーションにアクセスし、独自のモニタリングおよびレポートツールを開発できます。詳細については、「[AWS Step Functions API リファレンス](https://docs.aws.amazon.com/step-functions/latest/apireference/)」を参照してください。

**AWS Step Functions データサイエンス SDK を使用してワークフローを開発する**  
データサイエンティストは、SageMaker AI と Step Functions を使用して、機械学習モデルを処理してパブリッシュするワークフローを作成できます。 AWS インフラストラクチャを大規模に調整する Python の複数ステップの機械学習ワークフローを作成することもできます。 AWS Step Functions Data Science SDK は、Step Functions ワークフローを作成して呼び出すことができる Python API を提供します。これらのワークフローは、Python および Jupyter ノートブックで直接管理および実行できます。詳細については、「[GitHub のAWS Step Functions データサイエンスプロジェクト](https://github.com/aws/aws-step-functions-data-science-sdk-python)」、「[データサイエンス SDK ドキュメント](https://aws-step-functions-data-science-sdk.readthedocs.io/)」、「[Jupyter Notebook の例](https://docs.aws.amazon.com/sagemaker/latest/dg/howitworks-nbexamples.html)」、「[GitHub の SageMaker の例](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/step-functions-data-science-sdk)」を参照してください。

## ワークフローの実行とデバッグ
<a name="development-run-debug"></a>

ワークフローは、コンソールから、API コール (Lambda 関数など)、Amazon EventBridge および EventBridge スケジューラから、別の Step Functions ステートマシンからなど、さまざまな方法で開始できます。ワークフローを実行すると、サードパーティーのサービスに接続し、 AWS SDKs、実行中にデータを操作できます。ステートマシンを通過する実行ステップとデータの実行し、デバッグするために、さまざまなツールがあります。以下のセクションでは、ワークフローを実行およびデバッグするための追加のリソースを提供します。

ステートマシンの実行を開始する方法の詳細については、「[Step Functions でステートマシンの実行を開始する](statemachine-starting.md)」を参照してください。

**ワークフローを実行するエンドポイントを選択する**  
レイテンシーを減らし、要件を満たす場所にデータを保存するために、Step Functions は異なる AWS リージョンのエンドポイントを提供します。Step Functions の各エンドポイントは完全に独立しています。ステートマシンまたはアクティビティは、それが作成されたリージョン内にのみ存在します。あるリージョンで作成されたステートマシンおよびアクティビティは、別のリージョンで作成されたものとデータや属性を共有しません。例えば、2 つの異なるリージョンに `STATES-Flows-1` というステートマシンを登録できます。一方のリージョンの `STATES-Flows-1` ステートマシンは、もう一方のリージョンの `STATES-Flow-1` ステートマシンとはデータや属性を共有しません。Step Functions エンドポイントのリストについては、「*AWS 全般のリファレンス*」の「[AWS Step Functions のリージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/step-functions.html)」を参照してください。

**VS Code での開発**  
 AWS ツールキットを使用すると、VS Code 内から Workflow Studio を使用して、ステートマシン内の個々の状態を視覚化、構築、テストすることもできます。SAM と CloudFormation の定義置換も使用できます。ステートへの入力と変数を設定し、テストを開始すると、データがどのように変換されるかを確認できます。[ステート定義] タブでワークフローを調整して再テストできます。完了したら、変更を適用してステートマシンを更新できます。詳細については、 AWS Toolkit for Visual Studio Codeの「[Step Functions の使用](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/bulding-stepfunctions.html)」および「[Workflow Studio の使用](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/stepfunctions-workflowstudio.html)」を参照してください。

## ワークフローのデプロイ
<a name="development-deploy"></a>

ワークフローを定義してデバッグした後は、Infrastructure as Code フレームワークを使用してデプロイすることをお勧めします。ステートマシンは AWS Serverless Application Model、、、、Terraform など CloudFormation AWS CDK、さまざまな IaC オプションを使用してデプロイできます。

**AWS Serverless Application Model**  
Step Functions AWS Serverless Application Model で を使用すると、ワークフローを構築し、Lambda 関数、APIs、イベントなどの必要なインフラストラクチャをデプロイして、サーバーレスアプリケーションを作成できます。統合エクスペリエンス AWS Toolkit for Visual Studio Code の一部として CLI AWS SAM を と組み合わせて使用することもできます。  
詳細については、「[AWS SAM を使用して Step Functions ワークフローを構築する](concepts-sam-sfn.md)」を参照してください。

**CloudFormation**  
ステートマシンの定義は、 CloudFormation テンプレートで直接使用できます。  
詳細については、「[CloudFormation を使用して Step Functions でワークフローを作成する](tutorial-lambda-state-machine-cloudformation.md)」を参照してください。

**AWS CDK**  
Standard ステートマシンと Express ステートマシンは、 を使用して構築できます AWS CDK。  
Standard ワークフローを構築するには、「[CDK を使用して Standard ワークフローを作成する](tutorial-lambda-state-machine-cdk.md)」を参照してください。  
Express ワークフローを構築するには、「[CDK を使用して Express ワークフローを作成する](tutorial-step-functions-rest-api-integration-cdk.md)」を参照してください。

**Terraform**  
[Terraform](https://www.terraform.io/intro/) by HashiCorp は、Infrastructure as Code (IaC) を使用してアプリケーションを構築するためのフレームワークです。Terraform では、ステートマシンを作成したり、インフラストラクチャデプロイのプレビューや再利用可能なテンプレートの作成などの機能を使用したりできます。Terraform テンプレートを使用すると、コードが小さなチャンクに分割されるため、コードを保守して再利用しやすくなります。  
詳細については、「[Terraform を使用して Step Functions でステートマシンをデプロイする](terraform-sfn.md)」を参照してください。