

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

# Step Functions를 시작하는 방법 알아보기
<a name="getting-started"></a>

Step Functions 서비스를 사용하면 복잡한 애플리케이션 워크플로를 오케스트레이션할 수 있습니다. 시작하려면 Workflow Studio를 사용하여 기본 제공 **Hello World** 워크플로를 생성하고 실행합니다. 코드에서 자동 생성된 [Amazon States Language](concepts-amazon-states-language.md)(ASL) 정의를 검토합니다. 마지막으로 서비스 통합을 끌어다 놓아 감성 분석을 수행합니다.

이 자습서를 완료하면 Workflow Studio의 **설계** 모드와 **코드** 모드를 모두 사용하여 워크플로를 만들고, 구성하고, 실행하고, 업데이트하는 방법을 알게 됩니다.

예상 소요 시간: **20\$130분**

## 빌드할 항목
<a name="what-you-will-build"></a>

첫 번째 상태 머신은 *흐름 상태*로 시작됩니다. 워크플로를 지시하고 제어하는 데에 흐름 상태를 사용할 수 있습니다. 워크플로를 실행하는 방법을 학습한 후 **작업**을 추가하여 Amazon Comprehend 서비스를 **태스크 상태**와 통합합니다.

다음 다이어그램은 빌드할 전체 상태 머신의 시각적 객체를 보여줍니다. Hello World 상태 머신을 처음 생성할 때 실행하는 데 추가 리소스가 필요하지 않습니다. Step Functions 콘솔은 클릭 한 번으로 모든 상태와 IAM 역할을 생성합니다. 나중에 서비스 통합을 추가할 때 사용자 지정 권한 정책을 사용하여 역할을 생성해야 합니다.

![\[Hello World 워크플로의 시각적 표현입니다.\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello-world-arch.png)


## 1단계 - 상태 머신 만들기
<a name="step-1-create-your-state-machine"></a>

 Step Functions에서 *워크플로*는 **상태 머신**으로 불립니다. 두 용어를 서로 바꿔서 사용할 것입니다. 워크플로에는 **조치를 취하거나** 상태 머신의 **흐름을 제어**하는 *상태*가 포함됩니다.

1. **Step Functions 콘솔**로 이동합니다.

1. Step Functions 콘솔의 왼쪽 상단 탐색 또는 브레드크럼에서 ‘**Step Functions**’를 선택한 다음 **시작하기**를 선택합니다.  
![\[Hello World 워크플로를 시작하는 방법을 보여주는 예시 스크린샷\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/get-started-hello-world.png)

1. 옵션에서 **Hello World 실행**을 선택합니다.  
![\[Hello World 워크플로를 선택하는 방법을 보여주는 예시 스크린샷\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/create-hello-world.png)

**작은 정보**  
UI에 익숙해지도록 짧은 콘솔 내 연습을 단계별로 살펴보는 것이 좋습니다.

### Workflow Studio 개요
<a name="overview-of-workflow-studio"></a>

 Step Functions에 Workflow Studio를 사용하면 시각적으로 상태를 캔버스로 끌어서 놓아 워크플로를 구축할 수 있습니다.

 상태를 추가 및 편집하고, 단계를 구성하고, 결과를 트랜스포밍하고, 오류 처리를 설정할 수 있습니다. 다음 스크린샷은 상태 머신을 빌드하는 데 사용할 인터페이스의 네 가지 중요한 영역을 보여줍니다.

![\[Workflow Studio 인터페이스의 4가지 중요 영역에 대한 예시 스크린샷\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/wfs-panel-overview.png)


**모드** - Workflow Studio는 3가지 작업 모드를 제공하며 기본적으로 시각적 디자인 모드로 설정됩니다.
+ **설계** - 워크플로로 상태를 끌어다 놓을 수 있는 시각적 편집 모드입니다.
+ **코드** - ASL 코드라고도 하는 Amazon States Language 코드에 초점을 맞춘 모드입니다. ASL 코드를 직접 편집하고 시각적 디자인에 반영된 변경 사항을 볼 수 있습니다.
+ **구성** - 상태 머신(Standard 또는 Express)의 이름 및 유형, 워크플로 실행 시 할당된 역할, 로깅, 추적, 버전 관리, 암호화 및 태그를 포함한 구성 옵션입니다.

 **상태 브라우저**에는 다음 3가지 탭이 포함되어 있습니다.
+ **작업** - 워크플로로 drag-and-drop을 수 있는 AWSAPIs. 각 작업은 Task 워크플로 상태를 나타냅니다.
+ **흐름** - 워크플로의 단계 순서를 제어하는 흐름 상태입니다.
+ **패턴** - Amazon S3 버킷의 데이터를 반복적으로 처리하는 등 바로 사용할 수 있고 재사용 가능한 구성 요소입니다.

 **캔버스 및 워크플로 그래프**는 상태를 워크플로 그래프로 끌어다 놓고, 상태 순서를 변경하고, 구성 및 테스트할 상태를 선택하는 곳입니다.

 **Inspector 패널** 은 캔버스에서 선택한 모든 상태의 속성을 보고 편집할 수 있습니다. *정의* 토글을 켜서 현재 선택한 상태의 코드를 표시할 수 있습니다.

### 상태 머신 개요
<a name="overview-of-the-state-machine"></a>

 Hello World 워크플로는 작업을 수행하지 않고 출력을 *전달*하는 **Pass 상태**로 시작합니다. Pass 상태는 데이터를 다음 상태로 전달하기 전에 정적 JSON 출력을 생성하거나 JSON 입력을 트랜스포밍하는 데 사용할 수 있습니다. Pass 상태는 상태 머신을 구성하고 디버깅할 때 유용합니다.

 다음 상태인 **Choice 상태**는 `IsHelloWorldExample`의 데이터를 사용하여 워크플로의 다음 브랜치를 선택합니다. 첫 번째 규칙이 일치하면 워크플로가 **Wait 상태**에서 일시 중지된 다음 체크포인트로 이동하고 워크플로가 성공적으로 종료되기 전에 **Parallel 상태**에서 두 작업을 실행합니다. 일치 항목이 없는 경우 워크플로는 상태 머신을 중지하기 전에 기본적으로 **Fail 상태**로 설정됩니다.

 Wait 상태는 더 많은 작업을 수행하기 전에 지연하려는 경우에 유용할 수 있습니다. 워크플로는 주문 입력 후 30초를 기다릴 수 있으므로 고객이 잘못된 배송 주소를 확인하고 수정할 시간이 있을 수 있습니다.

 Parallel 상태는 데이터에 대해 여러 프로세스를 실행할 수 있습니다. 워크플로가 주문 티켓을 인쇄하고, 인벤토리를 업데이트하고, 일일 판매 보고서를 동시에 늘릴 수 있습니다.

![\[Hello World 시작하기 워크플로의 예시 이미지\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/workflow-1-hello-world.png)


### 워크플로 코드 보기(ASL)
<a name="view-the-code"></a>

 첫 번째 상태 머신은 실제로 매우 세부적이므로 코드를 검토하여 자세히 살펴보세요.

 상태 머신은 상태 머신을 선언적으로 설명하기 위해 JSON 기반 언어를 설명하는 오픈 소스 사양인 [Amazon States Language(ASL)](https://states-language.net/)를 사용하여 정의됩니다.

**전체 상태 머신 정의를 보려면 **

1. ASL 코드를 보려면 **\$1 \$1 코드** 버튼을 선택합니다.

1. 왼쪽의 코드를 보고 오른쪽의 상태 머신 그래프와 비교합니다.

1. 캔버스에서 검토할 일부 상태를 선택합니다. 예를 들어 **Choice 상태**를 선택합니다.

![\[코드 보기의 예시 이미지\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello-code-view.png)


 코드 보기에서 상태 정의가 어떻게 강조 표시되는지 알고 계셨나요?

**Inspector에서 코드를 보려면 **

1. **설계** 모드로 다시 전환합니다.

1. 오른쪽의 **Inspector 패널**을 확장합니다.

1. Canvas의 워크플로 그래프에서 **Choice 상태**를 선택합니다.

1. **Inspector** 패널에서 **정의** 토글을 선택합니다.

 다른 상태를 선택해 보세요. 선택한 각 상태의 ASL 코드가 어떻게 보기로 스크롤되고 강조 표시되는지 확인합니다.

### (실제) 상태 머신 생성
<a name="actually-create-the-state-machine"></a>

**경고: 지금 상태 머신의 이름을 지정하세요\$1**  
상태 머신을 생성한 후에는 **이름을 바꿀 수 없습니다**. 상태 머신을 저장하기 **전에** 이름을 선택합니다.

 지금까지는 상태 머신의 초안을 작성해 왔습니다. 아직 생성된 리소스가 없습니다.

 **상태 머신의 이름을 바꾸고 생성하려면** 

1. **구성 모드**를 선택합니다.

1. 상태 머신 이름에 `MyFirstStateMachine`을 입력합니다.

1. 권한의 경우 기본값인 *새 역할 생성*을 수락합니다.

1. **생성** 버튼을 선택하여 **실제로** 상태 머신을 생성합니다.

 상태 머신과 새 IAM 역할이 생성되었다는 알림이 표시됩니다.

 상태 머신을 시작하는 옵션이 자동으로 표시됩니다. 다음 단계에서 이 작업을 수행하게 됩니다\$1

![\[Hello World 시작하기 워크플로의 예시 이미지\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/workflow-created.png)


**워크플로 생성 완료\$1**  
Step Functions에서 워크플로 및 IAM 역할을 생성했습니다. 이제 상태 머신을 시작할 준비가 되었습니다.

## 2단계 - 상태 머신 시작
<a name="step-2-start-your-state-machine"></a>

 상태 머신이 생성된 후 워크플로 실행을 시작할 수 있습니다.

 워크플로는 선택적으로 상태에서 사용하고, 통합 서비스로 전송하고, 다음 상태로 전달할 수 있는 **입력**을 사용합니다.

**Hello World** 상태 머신은 독립형이며 입력이 필요하지 않습니다.

![\[시작하기의 예시 이미지\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/start_283486381.jpg)


 **상태 머신 실행을 시작하려면**

1. 실행 이름에 `hello001`를 입력합니다.

1. 입력 필드는 *비워둡니다*.

1. **실행 시작** 버튼을 선택합니다.

![\[워크플로 시작을 위한 예시 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello001.png)


### 실행 세부 정보 검토
<a name="review-the-execution-details"></a>

 시작 직후 처음 두 상태가 **성공**한 것을 볼 수 있습니다.

 잠시 기다린 후 나머지 상태 전환이 실행되어 워크플로를 완료합니다.

 **Choice 상태**(*Hello World 예제인가요?)가* **X초 대기** 상태로 브랜치하기로 결정한 방법이 궁금하신가요?

1. 힌트: 상태 머신의 첫 번째 단계에는 브랜치 결정에 필요한 데이터가 포함됩니다.

1. **그래프 보기**에서 실행 중 진행 상황을 모니터링하고 각 상태에 대한 세부 정보를 탐색할 수 있습니다.

1. 첫 번째 **Pass 상태**(*변수 설정 및 상태 출력*)를 선택한 다음 **입력/출력** 탭을 검토합니다.

 **상태 입력**이 비어 있지만 **상태 출력**에 `IsHelloWorldExample`의 값을 `true`로 설정하는 JSON이 포함되어 있음을 알 수 있습니다.

![\[Execution 001\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello001-graph-view.png)


 **그래프 보기**에서 **테이블 보기**로 전환하여 이름, 유형 및 상태별 상태 목록을 확인합니다.

![\[Execution 001 테이블 보기\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello001-table.png)


**작은 정보**  
이전 스크린샷의 **기간** 및 **타임라인** 필드를 기록해 둡니다. 어떤 상태가 다른 상태보다 더 많은 시간이 걸리는지 한눈에 확인할 수 있습니다.

 이 실행 세부 정보 페이지에는 **이벤트 보기**와 **상태 보기**라는 2가지 보기가 더 있습니다. 

 **이벤트 보기**는 상태 간 흐름의 세부적인 세부 보기입니다.

 **이벤트 보기** 테이블에서 첫 번째 **PassStateEntered** 및 **PassStateExited** 이벤트를 확장하여 상태가 입력을 받지 않고, `CheckpointCount` 값 0이라는 변수를 할당하고, 이전에 본 출력을 생성하는 방법을 확인합니다.

![\[Execution 001 이벤트 보기\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello001-event-view.png)


 마지막으로 **테이블 보기**와 유사한 **상태 보기**가 있습니다. **상태 보기** 테이블에서 **상태**를 선택적으로 확장하여 각 상태의 입력 및 출력만 볼 수 있습니다.

![\[Execution 001 상태 보기\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello001-state-view.png)


**축하합니다\$1 첫 번째 Step Functions 상태 머신을 실행했습니다.**  
 Pass 상태를 사용하여 워크플로에 **정적 데이터**를 추가하는 것은 특히 문제 해결에 일반적인 패턴입니다.  
 다음 단계에서는 상태 머신 입력을 *동적*으로 설정할 수 있도록 워크플로를 업데이트합니다.

## 3단계 - 외부 입력 처리
<a name="step-3-process-external-input"></a>

 워크플로 내에서 `IsHelloWorldExample`의 값을 상수 값으로 설정하는 것은 현실적이지 않습니다. 상태 머신이 다양한 입력 데이터에 응답할 것으로 예상해야 합니다.

 이 단계에서는 외부 JSON 데이터를 워크플로에 대한 입력으로 사용하는 방법을 보여줍니다.

![\[외부 입력 처리\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/process-external-input.png)


### 하드 코딩된 입력 제거
<a name="remove-the-hardcoded-input"></a>

 먼저 첫 번째 Pass 상태의 **출력**에서 하드 코딩된 값을 바꿉니다.

1. 페이지 오른쪽 상단에 있는 **상태 머신 편집** 버튼을 선택하여 Hello World 상태 머신을 편집합니다.

1. **시작** 후 첫 번째 **Pass 상태**(*변수 설정 및 상태 출력*)를 선택한 다음 **출력** 탭을 선택합니다.

1. **출력**을 다음 JSON으로 바꿉니다.

   ```
   {
     "IsHelloWorldExample": "{% $states.input.hello_world %}",
     "ExecutionWaitTimeInSeconds":  "{% $states.input.wait %}"
   }
   ```

1. 상태 머신을 저장합니다.

 업데이트된 상태 출력은 JSONata 표현식을 사용하여 예약된 **[\$1states](transforming-data.md#transforming-reserved-variable-states)** 변수에서 입력 데이터를 가져옵니다. 이러한 값은 다음 상태에 대한 입력이 되도록 출력으로 다음 상태로 전달됩니다.

### 입력 데이터를 사용하여 업데이트된 워크플로 실행
<a name="run-the-updated-workflow-with-input-data"></a>

 그런 다음 워크플로를 실행하고 외부 입력 데이터를 JSON으로 제공합니다.

1. **실행** 버튼을 선택하여 워크플로를 실행합니다.

1. **이름**에는 임의로 생성된 ID를 사용합니다.

1. 입력 필드에 다음 JSON을 사용합니다.

   ```
   {
       "wait" : 20,
       "hello_world": true
   }
   ```

1. **실행 시작** 버튼을 선택합니다.

 상태 머신 실행은 훨씬 더 오래(20초) 기다려야 하지만, 결국 입력한 입력을 사용하여 성공해야 합니다.

 그래프 보기에서 첫 번째 통과 상태의 **입력/출력**을 검토합니다. 입력한 입력이 출력으로 어떻게 변환되었는지 확인합니다. 또한 실행 세부 정보 페이지 상단의 **실행 입력 및 출력**을 살펴봅니다. 두 위치 모두 실행을 시작하는 데 사용한 입력을 표시합니다.

**작은 정보**  
*hello\$1world*가 **false**로 설정된 새 실행을 실행하면 어떻게 되나요? 사용해보기\$1

### 워크플로 실행 검토
<a name="review-workflow-executions"></a>

 이제 워크플로를 몇 번 실행했으므로 실행 세부 정보를 검토하여 워크플로 실행을 검토합니다.

 **실행 세부 정보를 검토하려면**

1. 탐색 브레드크럼 또는 왼쪽 메뉴에서 **상태 머신**을 선택합니다.

1. 상태 머신을 선택합니다.

 **실행** 탭에는 다음 스크린샷과 유사한 실행 목록이 표시됩니다.

![\[hello 워크플로 실행의 샘플 목록을 보여주는 예시 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/hello-executions.png)


 마지막 참고 사항: 워크플로 실행 이름은 고유해야 하며 재사용할 수 **없습니다**. 이 자습서에서는 짧은 이름(`hello001`)을 제안했지만 프로덕션 워크로드에 항상 고유한 이름 지정 규칙을 사용하는 것이 좋습니다.

**작은 정보**  
 **축하합니다\$1** 워크플로를 실행할 때마다 달라질 수 있는 *외부 입력*을 처리하도록 워크플로를 수정했습니다.

## 4단계 - 서비스 통합
<a name="step-4-integrate-a-service"></a>

 Step Functions 상태 시스템은 [AWSSDK 통합](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html)을 사용하여 220개 이상의 AWS서비스를 호출할 수 있습니다. AWS서비스는 상태 시스템에 10,000개 이상의 잠재적 API 작업을 제공합니다.

 이 단계에서는 **감정 분석**을 위한 Amazon Comprehend 작업을 통합하여 상태 머신 입력을 처리합니다.

 서비스 통합은 다음 3가지 *서비스 통합 패턴* 중 하나를 사용합니다.

1. **응답 요청**(기본값) - HTTP 응답을 기다린 후 *즉시* 다음 상태로 진행합니다.

1. **작업 실행**(*.sync*) - 다음 단계로 이동하기 전에 작업이 완료될 때까지 기다립니다.

1. **콜백 대기**(*.waitForTaskToken*) - 외부 프로세스에서 작업 토큰을 반환할 때까지 워크플로를 일시 중지합니다.

![\[서비스 통합을 보여주는 예시 스크린샷입니다.\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/AdobeStock_513621530_integration_1000.jpg)


 첫 번째 통합의 경우 **응답 요청**(기본값) 통합 패턴을 사용합니다.

### 통합은 어떻게 작동하나요?
<a name="how-do-integrations-work"></a>

 *Task 상태*는 상태 머신에 의해 수행되는 하나의 작업 단위를 나타냅니다. 상태 머신에서의 모든 작업은 작업에 의해 수행됩니다.

 작업은 일반적으로 다른 서비스의 API 작업에 입력을 전달하여 작업을 수행한 다음 자체 작업을 수행합니다. `Credentials`, `Retry`, `Catch`, `TimeoutSeconds` 등의 여러 필드를 사용하여 작업 수행 방식을 지정할 수 있습니다. [Task 워크플로 상태](state-task.md)에서 Task에 대해 자세히 알아볼 수 있습니다.

 AWSSDK 통합을 사용하려면 호출할 **서비스 이름과** **API**를 지정합니다. 일부 통합에는 파라미터도 필요합니다.

 Amazon States Language를 사용하여 작업 상태의 **리소스** 필드에 AWSAPI 작업을 지정할 수 있습니다. 선택적으로 서비스 이름에 서비스 통합 유형을 추가할 수 있습니다.

 API 작업을 지정하려면 다음 리소스 이름 템플릿을 사용합니다.

```
arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
```

**파라미터 이름 대/소문자**  
API 작업은 *camelCase*(소문자 이니셜)이지만 *ParameterNames*는 Pascal 케이스(대문자 이니셜)입니다.

 **리소스 이름의 예**
+ `arn:aws:states:::aws-sdk:ec2:describeInstances`는 Amazon EC2 describeInstances API를 직접 호출한 결과를 반환합니다.
+ `arn:aws:states:::aws-sdk:s3:listBuckets`는 Amazon S3 listBuckets API를 직접 호출한 결과를 반환합니다.
+ `arn:aws:states:::aws-sdk:sfn:startExecution`은 중첩된 Step Functions 상태 머신 실행을 시작하고 해당 워크플로의 결과를 반환합니다.

 Step Functions가 `Task` 상태를 사용하여 다른 서비스를 직접 호출할 때 기본 패턴은 [응답 요청](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-default)입니다. Step Functions는 **응답 요청** 통합 패턴을 사용하여 서비스를 직접 호출하고 응답을 수신한 다음 ***즉시*** 다음 상태로 진행합니다.

![\[감정 감지 통합\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/integrate_sentiment_592194331.png)


### 4.1단계 - 감정 분석 상태 추가
<a name="step-1-add-sentiment-analysis-state"></a>

1. **MyFirstStateMachine** 상태 머신을 **편집**합니다.

1. **상태 브라우저**의 **작업** 패널에서 `DetectSentiment`를 검색합니다.

1. **Comprehend DetectSentiment**를 **Choice 상태**의 **기본** 브랜치로 끌어서 놓습니다.

1. **Fail** 상태를 선택하고 삭제합니다.

1. **상태 브라우저**의 **흐름 탭**에서 **DetectSentiment** 뒤의 **Success** 상태를 드래그합니다.

### 4.2단계 - 감정 분석 상태 구성
<a name="step-2-configure-the-sentiment-analysis-state"></a>

1. **Comprehend** 단계를 선택하여 Inspector 패널에서 구성합니다.

1. **인수 및 출력** 탭을 선택한 다음 **인수**를 다음 JSON으로 바꿉니다.

   ```
   {
      "LanguageCode": "en",
      "Text": "{% %}"
   }
   ```

1. 백분율 기호: 퍼센트 기호 `{% %}` 및 **사이에** 커서를 놓고 `$`를 입력합니다.

1. 편집기에서 **자동 완성**을 사용하여 `states`를 선택하고,

    그런 다음 `.`을 입력하고 `context`를 선택합니다.

    그런 다음 `.`을 입력하고 `Execution`을 선택합니다.

    그런 다음 `.`을 입력하고 `Input`을 선택합니다.

    마지막으로 `.feedback_comment`를 입력하여 **컨텍스트 객체**에서 초기 입력을 검색합니다.

 이러한 자동 완성 옵션을 선택한 후에는 상태 **인수**에 대해 다음과 같은 JSON이 있어야 합니다.

```
{
    "LanguageCode": "en",
    "Text": "{% $states.context.Execution.Input.feedback_comment %}"
}
```

**편집기 자동 완성 사용**  
편집기 자동 완성을 사용하면 옵션을 탐색할 수 있습니다.  
자동 완성에는 변수, 컨텍스트 객체가 포함된 예약된 **[\$1states](transforming-data.md#transforming-reserved-variable-states)** 변수, 정의가 포함된 사용 가능한 함수가 나열됩니다.

### 4.3단계 - 자격 증명 정책 구성
<a name="step-3-configure-an-identity-policy"></a>

 워크플로를 실행하려면 먼저 상태 머신이 외부 서비스에 대한 API 직접 호출을 수행하도록 허용하는 **역할** 및 **정책**을 생성해야 합니다.

 **Step Functions에 대한 IAM 역할을 생성하려면** 

1. 새 탭에서 IAM 콘솔로 이동하여 **역할**을 선택합니다.

1. [**Create a new role**]을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 *AWS 서비스*를 선택합니다.

1. **사용 사례**에서 *Step Functions*를 선택합니다.

1. **권한 추가**에서 **다음**을 선택하여 기본 권한을 수락합니다. 역할을 생성한 후 Comprehend에 대한 정책을 추가합니다.

1. **이름**에 *HelloWorldWorkflowRole*을 입력합니다.

1. **역할 생성**을 선택합니다.

 **Amazon Comprehend용 **HelloWorldWorkflowRole**에 정책을 추가하려면** 

1. **HelloWorldWorkflowRole** 역할을 선택하고 편집합니다.

1. **권한 추가**를 선택한 후 **인라인 정책 추가**를 선택합니다.

1. 서비스에 대해 **Comprehend**를 선택합니다.

1. **읽기**에서 **DetectSentiment**를 선택한 후 **다음**을 선택합니다.

1. **정책 이름**에 *DetectSentimentPolicy*를 입력한 다음 **정책 생성**을 입력합니다.

정책을 검토하면 모든 리소스가 **작업** `"comprehend:DetectSentiment"`를 수행할 수 있도록 허용하는 것을 볼 수 있습니다.

 **Step Functions 상태 머신에 IAM 역할을 연결하려면** 

1. 상태 머신 편집으로 돌아가서 **구성** 탭을 선택합니다.

1. **실행 역할** 드롭다운에서 *HelloWorldWorkflowRole*을 선택합니다.

1. 상태 머신을 저장합니다.

### 4.4단계: 상태 머신 실행
<a name="step-4-run-your-state-machine"></a>

 입력을 위해 다음 JSON을 사용하여 상태 머신 실행을 시작합니다.

```
{
    "hello_world": false,
    "wait": 42,
    "feedback_comment" : "This getting started with Step Functions workshop is a challenge!"
}
```

#### 권한 오류 문제 해결 중...
<a name="policy-section"></a>

 올바른 정책이 없으면 다음과 비슷한 **권한 오류**가 발생합니다.

```
User: arn:aws:sts::account-id:assumed-role/StepFunctions-MyStateMachine-role is not authorized
to perform: comprehend:DetectSentiment because no identity-based policy allows the comprehend:DetectSentiment
action (Service: Comprehend, Status Code: 400, Request ID: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)
```

 이전 오류 메시지는 상태 머신에 외부 서비스를 사용할 권한이 없음을 알려줍니다. 단계로 돌아가서 자격 증명 정책을 구성했는지 확인합니다.

 **학습한 내용을 연습해 보세요\$1**

 더 복잡한 워크플로를 살펴보기 전에 다음 작업을 통해 학습한 내용을 연습합니다.
+  **DetectSentiment** 단계를 검토합니다. 다양한 보기에서 입력/출력을 살펴보고 감정 감지 결과를 확인합니다.
+ 테이블 보기에서 DetectSentiment 상태의 **기간**을 찾습니다.
+ **JSON 입력**의 주석을 변경한 다음 상태 머신을 다시 실행합니다.

감정 분석 결과에 대한 자세한 내용은 [Amazon Comprehend - 감정](https://docs.aws.amazon.com/comprehend/latest/dg/how-sentiment.html)을 참조하세요.

 요청 응답 통합에 대해 생각할 수 있는 한 가지 방법은 응답은 일반적으로 요청에 대한 *승인*만 나타냅니다. 그러나 감정 분석과 같은 일부 통합에서 승인은 실제로 작업 *완료*를 나타냅니다.

 키 학습은 `Task` 상태가 요청 응답 통합에서 기본 작업을 **기다리지 않는다**는 것입니다. 응답을 기다리려면 *작업 실행(.sync)* 서비스 통합 패턴을 탐색해야 합니다.

**축하합니다\$1**  
 첫 번째 상태 머신을 생성하고 **응답 요청** 패턴을 사용하여 감정 분석 작업을 통합했습니다.

**피드백은 소중합니다\$1**  
이 시작하기 자습서가 도움이 되었거나 자습서를 개선하기 위한 제안이 있는 경우이 페이지의 피드백 옵션을 사용하여 알려주세요.

## 리소스 정리
<a name="clean-up-resources"></a>

 다음 단계를 수행하여 생성한 리소스를 정리합니다.

1. AWS콘솔에서 [Step Functions](https://console.aws.amazon.com/states/home) 페이지로 이동합니다.

1. 왼쪽 탐색 창에서 **상태 머신**을 선택합니다.

1. **MyFirstStateMachine**을 선택합니다.

1. IAM 역할을 삭제하려면

   1 - **IAM 역할**의 링크를 따라 새 탭의 IAM 역할 페이지로 이동합니다. 사용자 지정 관련 역할을 삭제합니다.

   2 - IAM 역할에서 *MyFirstStateMachine*이 포함된 자동 생성된 역할을 검색합니다. 자동 생성된 역할을 삭제합니다.

1. Step Functions 콘솔 탭으로 돌아가서 **작업** 드롭다운을 선택한 다음 **삭제**를 선택하여 상태 머신을 삭제합니다.

이제 상태 머신 및 관련 역할이 성공적으로 삭제되어야 합니다.