

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

# 를 사용하여 Step Functions 상태 시스템 생성 AWS SAM
<a name="tutorial-state-machine-using-sam"></a>

이 가이드에서는 AWS Step Functions 상태 머신이 포함된 샘플 AWS SAM 애플리케이션을 다운로드, 빌드 및 배포합니다. 이 애플리케이션은 사전 정의된 일정에 따라 실행되는 모의 주식 거래 워크플로를 생성합니다(요금이 부과되지 않도록 일정이 기본적으로 비활성화되어 있음).

다음 다이어그램은 이 애플리케이션의 구성 요소를 보여줍니다.

![\[이 자습서의 워크플로를 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/step-functions/latest/dg/images/sam-starter-template-docs.png)


다음은 샘플 애플리케이션을 생성하기 위해 실행하는 명령의 미리 보기입니다. 이러한 각 명령에 대한 자세한 내용은 이 페이지의 뒷부분에 있는 섹션을 참조하십시오.

```
# Step 1 - Download a sample application. For this tutorial you
#   will follow the prompts to select an AWS Quick Start Template
#   called 'Multi-step workflow'
sam init

# Step 2 - Build your application
cd project-directory
sam build

# Step 3 - Deploy your application
sam deploy --guided
```

## 사전 조건
<a name="tutorial-state-machine-using-sam-prerequisites"></a>

이 안내서에서는 OS용 [AWS SAM CLI 설치](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)의 단계를 완료했다고 가정합니다. 다음 작업을 수행했다고 가정합니다.

1.  AWS 계정을 생성했습니다.

1. IAM 권한을 구성했습니다.

1. Homebrew를 설치했습니다. 참고: Homebrew는 Linux 및 macOS의 유일한 사전 조건입니다.

1.  AWS SAM CLI를 설치했습니다. 참고: 버전 0.52.0 이상이 설치되어 있는지 확인하십시오. `sam --version` 명령을 실행하여 설치되어 있는 버전을 확인할 수 있습니다.

## 1단계: 샘플 AWS SAM 애플리케이션 다운로드
<a name="tutorial-state-machine-using-sam-initialize"></a>

**실행할 명령:**

```
sam init
```

화면에 표시되는 프롬프트에 따라 다음을 선택합니다.

1. **템플릿:** AWS 빠른 시작 템플릿

1. **언어:** Python, Ruby, NodeJS, Go, Java 또는 .NET

1. **프로젝트 이름:** (선택한 이름 - 기본값은 `sam-app`임)

1. **빠른 시작 애플리케이션:** 다단계 워크플로

** AWS SAM 가 수행하는 작업:**

이 명령은 '프로젝트 이름' 프롬프트에 제공한 이름으로 디렉터리를 생성합니다(기본값은 `sam-app`). 구체적인 디렉터리 내용은 선택한 언어에 따라 다릅니다.

Python 런타임 중 하나를 선택할 때 디렉터리 내용은 다음과 같습니다.

```
├── README.md
├── functions
│   ├── __init__.py
│   ├── stock_buyer
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   ├── stock_checker
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── stock_seller
│       ├── __init__.py
│       ├── app.py
│       └── requirements.txt
├── statemachine
│   └── stock_trader.asl.json
├── template.yaml
└── tests
    └── unit
        ├── __init__.py
        ├── test_buyer.py
        ├── test_checker.py
        └── test_seller.py
```

살펴볼 수 있는 두 가지 특히 흥미로운 파일이 있습니다.
+ `template.yaml`: 애플리케이션의 AWS 리소스를 정의하는 AWS SAM 템플릿을 포함합니다.
+ `statemachine/stockTrader.asl.json`: [Amazon States Language를 사용하여 Step Functions 워크플로 정의](concepts-amazon-states-language.md)에 작성된 애플리케이션의 상태 머신 정의를 포함합니다.

`template.yaml` 파일에서 상태 머신 정의 파일을 가리키는 다음 항목을 볼 수 있습니다.



```
    Properties:
      DefinitionUri: statemachine/stock_trader.asl.json
```

상태 시스템 정의를 AWS SAM 템플릿에 임베딩하는 대신 별도의 파일로 유지하는 것이 유용할 수 있습니다. 예를 들어 템플릿에 정의를 포함하지 않으면 상태 시스템 정의에 대한 변경 사항을 더 쉽게 추적할 수 있습니다. Workflow Studio를 사용하여 상태 시스템 정의를 생성 및 유지하고 정의를 템플릿에 병합하지 않고도 콘솔에서 Amazon States Language 사양 파일로 직접 내보낼 수 있습니다.

샘플 애플리케이션에 대한 자세한 내용은 프로젝트 디렉터리의 `README.md` 파일을 참조하십시오.

## 2단계: 애플리케이션 빌드
<a name="tutorial-state-machine-using-sam-build"></a>

**실행할 명령:**

먼저 프로젝트 디렉터리(예: 샘플 애플리케이션의 `template.yaml` 파일이 있는 디렉터리, 기본값은 `sam-app`임)로 변경한 후 다음 명령을 실행합니다.

```
sam build
```

**출력 예제:**

```
  
 Build Succeeded

 Built Artifacts  : .aws-sam/build
 Built Template   : .aws-sam/build/template.yaml

 Commands you can use next
 =========================
 [*] Invoke Function: sam local invoke
 [*] Deploy: sam deploy --guided
```

** AWS SAM 가 수행하는 작업:**

 AWS SAM CLI는 종속성을 빌드하기 위해 여러 Lambda 런타임에 대한 추상화와 함께 제공되며 모든 빌드 아티팩트를 스테이징 폴더에 복사하여 모든 것을 패키징하고 배포할 준비가 되도록 합니다. 이 `sam build` 명령은 애플리케이션에 있는 모든 종속성을 빌드하고 빌드 아티팩트를 `.aws-sam/build` 아래의 폴더에 복사합니다.

## 3단계: AWS 클라우드에 애플리케이션 배포
<a name="tutorial-state-machine-using-sam-deploy"></a>

**실행할 명령:**

```
sam deploy --guided
```

화면에 표시되는 프롬프트를 따릅니다. 대화형 환경에서 제공되는 기본 옵션을 수락하려면 `Enter`로 응답하면 됩니다.

** AWS SAM 가 수행하는 작업:**

이 명령은 애플리케이션을 AWS 클라우드에 배포합니다. `sam build` 명령을 사용하여 빌드한 배포 아티팩트를 가져와 AWS SAM CLI에서 생성한 Amazon S3 버킷에 패키징 및 업로드하고를 사용하여 애플리케이션을 배포합니다 CloudFormation. 배포 명령의 출력에서 CloudFormation 스택에 대한 변경 사항을 볼 수 있습니다.

다음 단계를 수행하면 예제 Step Functions 상태 시스템이 성공적으로 배포되었는지 확인할 수 있습니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/states/](https://console.aws.amazon.com/states/) Step Functions 콘솔을 엽니다.

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

1. 목록에서 새 상태 머신을 찾아 선택합니다. 여기에는 StockTradingStateMachine-*<unique-hash>*라는 이름이 지정됩니다.

1. **정의** 탭을 선택합니다.

이제 상태 머신의 시각적 표현을 볼 수 있습니다. 시각적 표현이 프로젝트 디렉터리의 `statemachine/stockTrader.asl.json` 파일에 있는 상태 머신 정의와 일치하는지 확인할 수 있습니다.

## 문제 해결
<a name="tutorial-state-machine-using-sam-troubleshooting"></a>

### SAM CLI 오류: "해당 옵션 없음: --guided"
<a name="tutorial-state-machine-using-sam-troubleshooting-guided"></a>

`sam deploy`를 실행하면 다음 오류가 표시됩니다.

```
 
Error: no such option: --guided
```

즉, `--guided` 파라미터를 지원하지 않는 이전 버전의 AWS SAM CLI를 사용하고 있습니다. 이 문제를 해결하려면 AWS SAM CLI 버전을 0.33.0 이상으로 업데이트하거나 `sam deploy` 명령에서 `--guided` 파라미터를 생략할 수 있습니다.

### SAM CLI 오류: "관리형 리소스를 생성하지 못했습니다. 자격 증명을 찾을 수 없습니다.”
<a name="tutorial-state-machine-using-sam-troubleshooting-credentials"></a>

`sam deploy`를 실행하면 다음 오류가 표시됩니다.

```
 
Error: Failed to create managed resources: Unable to locate credentials
```

즉, AWS SAM CLI가 AWS 서비스를 호출할 수 있도록 AWS 자격 증명을 설정하지 않았습니다. 이 문제를 해결하려면 AWS 자격 증명을 설정해야 합니다. 자세한 내용은 *AWS Serverless Application Model 개발자 안내서*의 [AWS 자격 증명 설정을 참조하세요](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-set-up-credentials.html).

## 정리
<a name="tutorial-state-machine-using-sam-cleanup"></a>

이 자습서를 실행하여 생성한 AWS 리소스가 더 이상 필요하지 않은 경우 배포한 CloudFormation 스택을 삭제하여 리소스를 제거할 수 있습니다.

를 사용하여이 자습서로 생성된 CloudFormation 스택을 삭제하려면 다음 단계를 AWS Management Console따릅니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **스택**을 선택합니다.

1. 스택 목록에서 **sam-app**(또는 생성한 스택의 이름)을 선택합니다.

1. **삭제**를 선택합니다.

완료되면 스택의 상태가 **DELETE\$1COMPLETE**로 변경됩니다.

또는 다음 명령을 실행하여 CloudFormation 스택을 삭제할 수 있습니다. AWS CLI 

```
aws cloudformation delete-stack --stack-name sam-app --region region
```

### 삭제된 스택 확인
<a name="tutorial-state-machine-using-sam-cleanup-verify"></a>

 CloudFormation 스택을 삭제하는 두 방법 모두 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 이동하여 왼쪽 탐색 창에서 **스택**을 선택하고 검색 텍스트 상자 오른쪽에 있는 드롭다운에서 **삭제됨을** 선택하여 스택이 삭제되었는지 확인할 수 있습니다. 삭제된 스택 목록에 스택 이름 **sam-app**(또는 생성한 스택의 이름)이 표시되어야 합니다.