Step Functions를 사용한 워크플로 개발 - AWS Step Functions

Step Functions를 사용한 워크플로 개발

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 작업을 참조하세요.

또한 AWS Command Line Interface(AWS CLI)에서 여러 Step Functions 기능을 사용할 수 있습니다. 예를 들어 상태 머신을 만든 후 기존 상태 머신을 나열할 수 있습니다. AWS CLI에서 Step Functions 명령을 사용하여 실행 시작 및 관리, 활동 폴링 및 작업 하트비트 기록 등의 작업을 수행할 수 있습니다. 전체 Step Functions 명령 목록, 사용 가능한 인수 설명 및 사용법을 보여주는 예제는 AWS CLI 명령 참조를 확인하세요. AWS CLI 명령 참조

AWS CLI 명령은 Amazon States Language를 밀접하게 따르므로 AWS CLI를 사용하여 Step Functions API 작업을 알아볼 수 있습니다. 기존 API 지식을 사용하여 코드 프로토타입을 제작하거나 명령줄에서 Step Functions 작업을 수행할 수도 있습니다.

상태 머신 정의 검증

API를 사용하여 상태 머신을 검증하고 워크플로를 생성하기 전에 잠재적 문제를 찾을 수 있습니다.

워크플로 검증에 대한 자세한 내용은 Step Functions API 참조의 ValidateStateMachineDefinition을 참조하세요.

최소한의 설정을 시작하려면 Lambda 함수를 직접 호출하는 단일 단계로 워크플로를 정의한 다음 워크플로를 실행하고 결과를 확인하는 방법을 보여주는 Lambda 상태 머신 만들기 자습서를 따르세요.

워크플로 정의

워크플로 개발의 첫 번째 단계는 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 속성을 사용해야 합니다. 자세한 내용은 상태 머신 구조 섹션을 참조하세요.

CloudFormation 및 AWS SAM을 사용하면 상태 머신 정의를 Amazon S3에 업로드하고(JSON 또는 YAML 형식) 템플릿에 정의의 Amazon S3 위치를 제공할 수 있습니다. 자세한 내용은 AWS::StepFunctions::StateMachine S3Location 페이지를 참조하세요.

다음 예제 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 SDK를 사용하여 워크플로 개발

Step Functions는 Java, .NET, Ruby, PHP, Python(Boto 3), JavaScript, Go 및 C++용 AWS SDK에서 지원됩니다. 이러한 SDK는 여러 프로그래밍 언어에서 Step Functions HTTPS API 작업을 사용할 수 있는 편리한 방법을 제공합니다. 이러한 SDK 라이브러리에 제공된 API 작업을 사용하여 상태 머신, 활동 또는 상태 머신 시작자를 개발할 수 있습니다. 이러한 라이브러리를 사용하여 가시성 작업에 액세스하여 고유한 Step Functions 모니터링 및 보고 도구를 개발할 수도 있습니다. 현재 AWS SDK용 참조 문서 및 Amazon Web Services용 도구를 참조하세요.

HTTPS 요청을 통한 워크플로 개발

Step Functions는 HTTPS 요청을 통해 액세스할 수 있는 서비스 작업을 제공합니다. 이러한 작업을 사용하여 자체 라이브러리에서 Step Functions와 직접 통신할 수 있습니다. 서비스 API 작업을 사용하여 상태 머신, 작업자 또는 상태 머신 시작자를 개발할 수 있습니다. API 작업을 통해 가시성 작업에 액세스함으로써 사용자 고유의 모니터링 및 보고 도구를 개발할 수도 있습니다. 자세한 내용은 AWS Step Functions API 참조를 참조하세요.

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 데이터 과학 프로젝트, 데이터 과학 SDK 설명서, Jupyter Notebook 예제GitHub의 SageMaker AI 예제를 참조하세요.

워크플로 실행 및 디버깅

콘솔, API 직접 호출(예: Lambda 함수), Amazon EventBridge 및 EventBridge Scheduler, 다른 Step Functions 상태 머신에서 워크플로를 여러 가지 방법으로 시작할 수 있습니다. 워크플로를 실행하면 타사 서비스에 연결하고, AWS SDK를 사용하고, 실행 중에 데이터를 조작할 수 있습니다. 실행 단계와 상태 머신을 통해 흐르는 데이터를 실행하고 디버깅할 수 있는 다양한 도구가 있습니다. 다음 섹션에서는 워크플로를 실행하고 디버깅하기 위한 추가 리소스를 제공합니다.

상태 머신 실행을 시작하는 방법에 대한 자세한 내용은 Step Functions에서 상태 머신 실행 시작 섹션을 참조하세요.

워크플로를 실행할 엔드포인트 선택

지연 시간을 줄이고 요구 사항을 충족하는 위치에 데이터를 저장하도록 Step Functions는 다양한 AWS 리전에 엔드포인트를 제공합니다. Step Functions의 각 엔드포인트는 완전히 독립적입니다. 즉, 상태 머신이나 활동이 생성된 리전 내에서만 존재합니다. 한 리전에서 생성한 상태 머신 및 활동은 다른 리전에서 생성한 상태 머신 및 활동과 데이터나 속성을 공유하지 않습니다. 예를 들어 서로 다른 두 리전에 STATES-Flows-1 상태 머신을 등록할 수 있습니다. 한 리전의 STATES-Flows-1 상태 머신은 데이터나 속성을 다른 리전의 STATES-Flow-1 상태 머신과 공유하지 않습니다. Step Functions 엔드포인트 목록은 AWS 일반 참조AWS Step Functions 리전 및 엔드포인트를 참조하세요.

VS Code를 사용한 개발

AWS 도구 키트를 사용하면 VS Code 내에서 Workflow Studio를 사용하여 상태 머신의 개별 상태를 시각화, 빌드 및 테스트할 수 있습니다. SAM 및 CloudFormation 정의 대체를 사용할 수도 있습니다. 상태 입력을 제공하고 변수를 설정하고 테스트를 시작하면 데이터가 어떻게 트랜스포밍되는지 확인할 수 있습니다. 상태 정의 탭에서 워크플로를 조정하고 다시 테스트할 수 있습니다. 완료되면 변경 사항을 적용하여 상태 머신을 업데이트할 수 있습니다. 자세한 내용은 AWS Toolkit for Visual Studio Code의 Step Functions 작업Workflow Studio 작업을 참조하세요.

워크플로 배포

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

AWS Serverless Application Model

Step Functions에서 AWS Serverless Application Model을 사용하여 워크플로를 빌드하고 Lambda 함수, API 및 이벤트를 포함하여 필요한 인프라를 배포하고 서버리스 애플리케이션을 생성할 수 있습니다. 또한 통합 환경의 일부로 AWS SAM CLI를 AWS Toolkit for Visual Studio Code과 함께 사용할 수 있습니다.

자세한 내용은 AWS SAM을 사용하여 Step Functions 워크플로 구축 섹션을 참조하세요.

CloudFormation

CloudFormation 템플릿에서 직접 상태 머신 정의를 사용할 수 있습니다.

자세한 내용은 Step Functions에서 CloudFormation을 사용하여 워크플로 생성 섹션을 참조하세요.

AWS CDK

AWS CDK에서 표준 및 Express 상태 머신을 빌드할 수 있습니다.

표준 워크플로를 빌드하려면 CDK를 사용하여 표준 워크플로 생성 섹션을 참조하세요.

Express 워크플로를 빌드하려면 CDK를 사용하여 Express 워크플로 생성 섹션을 참조하세요.

Terraform

HashiCorp의 Terraform은 코드형 인프라(IaC)를 사용하여 애플리케이션을 빌드하기 위한 프레임워크입니다. Terraform을 사용하면 상태 머신을 만들고 인프라 배포 미리 보기 및 재사용 가능한 템플릿 만들기와 같은 기능을 사용할 수 있습니다. Terraform 템플릿을 사용하면 코드를 더 작은 청크로 나눠 유지하고 재사용할 수 있습니다.

자세한 내용은 Terraform을 사용하여 Step Functions에 상태 머신 배포 섹션을 참조하세요.