

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 함수를 직접 호출하는 단일 단계로 워크플로를 정의한 다음 워크플로를 실행하고 결과를 확인하는 방법을 보여주는 [Lambda 상태 머신 만들기](tutorial-creating-lambda-state-machine.md) 자습서를 따르세요.

## 워크플로 정의
<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는 Java, .NET, Ruby, PHP, Python(Boto 3), JavaScript, Go 및 C\$1\$1용 AWS SDKs에서 지원됩니다. 이러한 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 Data Science SDK를 사용하여 워크플로 개발**  
데이터 과학자들은 SageMaker AI 및 Step Functions를 사용하여 기계 학습 모델을 처리하고 게시하는 워크플로를 만들 수 있습니다. AWS 인프라를 대규모로 오케스트레이션하는 다단계 기계 학습 워크플로를 Python에서 만들 수도 있습니다. AWS Step Functions Data Science SDK는 Step Functions 워크플로를 생성하고 호출할 수 있는 Python API를 제공합니다. Python과 Jupyter Notebook에서 이러한 워크플로를 직접 관리하고 실행할 수 있습니다. 자세한 내용은 [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 AI 예제](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 Scheduler, 다른 Step Functions 상태 머신에서 워크플로를 여러 가지 방법으로 시작할 수 있습니다. 워크플로를 실행하면 타사 서비스에 연결하고, AWS SDKs 사용하고, 실행 중에 데이터를 조작할 수 있습니다. 실행 단계와 상태 머신을 통해 흐르는 데이터를 실행하고 디버깅할 수 있는 다양한 도구가 있습니다. 다음 섹션에서는 워크플로를 실행하고 디버깅하기 위한 추가 리소스를 제공합니다.

상태 머신 실행을 시작하는 방법에 대한 자세한 내용은 [Step Functions에서 상태 머신 실행 시작](statemachine-starting.md) 섹션을 참조하세요.

**워크플로를 실행할 엔드포인트 선택**  
지연 시간을 줄이고 요구 사항을 충족하는 위치에 데이터를 저장하기 위해 Step Functions는 다양한 AWS 리전의 엔드포인트를 제공합니다. Step Functions의 각 엔드포인트는 완전히 독립적입니다. 즉, 상태 머신이나 활동이 생성된 리전 내에서만 존재합니다. 한 리전에서 생성한 상태 머신 및 활동은 다른 리전에서 생성한 상태 머신 및 활동과 데이터나 속성을 공유하지 않습니다. 예를 들어 서로 다른 두 리전에 `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>

워크플로를 정의하고 디버깅한 후에는 인프라를 코드 프레임워크로 사용하여 배포해야 할 수 있습니다. AWS Serverless Application Model, CloudFormation AWS CDK및 Terraform을 비롯한 다양한 IaC 옵션을 사용하여 상태 시스템을 배포하도록 선택할 수 있습니다.

**AWS Serverless Application Model**  
Step Functions와 AWS Serverless Application Model 함께를 사용하여 워크플로를 구축하고 Lambda 함수, APIs 및 이벤트를 포함하여 필요한 인프라를 배포하여 서버리스 애플리케이션을 생성할 수 있습니다. 통합 경험의 AWS Toolkit for Visual Studio Code 일부로 AWS SAM CLI를와 함께 사용할 수도 있습니다.  
자세한 내용은 [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.  
표준 워크플로를 빌드하려면 [CDK를 사용하여 표준 워크플로 생성](tutorial-lambda-state-machine-cdk.md) 섹션을 참조하세요.  
Express 워크플로를 빌드하려면 [CDK를 사용하여 Express 워크플로 생성](tutorial-step-functions-rest-api-integration-cdk.md) 섹션을 참조하세요.

**Terraform**  
HashiCorp의 [Terraform](https://www.terraform.io/intro/)은 코드형 인프라(IaC)를 사용하여 애플리케이션을 빌드하기 위한 프레임워크입니다. Terraform을 사용하면 상태 머신을 만들고 인프라 배포 미리 보기 및 재사용 가능한 템플릿 만들기와 같은 기능을 사용할 수 있습니다. Terraform 템플릿을 사용하면 코드를 더 작은 청크로 나눠 유지하고 재사용할 수 있습니다.  
자세한 내용은 [Terraform을 사용하여 Step Functions에 상태 시스템 배포](terraform-sfn.md) 단원을 참조하십시오.