서버리스 워크플로 예약

AWS Step Functions 및 Amazon CloudWatch 사용

AWS 계정에서 리소스의 운영 이벤트에 대한 응답을 자동화하면 AWS 클라우드 인프라의 운영 오버헤드를 줄일 수 있습니다. DevOps 엔지니어 또는 IT 관리자가 ETL 작업, 데이터 동기화 또는 보안을 자동화하고자 하는 경우를 예로 들어보겠습니다.

이 문제를 해결하기 위해 시간 기반 일정에서 서버리스 워크플로를 실행할 수 있습니다. Amazon CloudWatch Events는 AWS 리소스에 대한 변경 사항 및 알림을 설명하는, 거의 실시간에 가까운 시스템 이벤트 스트림입니다. 이러한 스트림에서 특정 이벤트를 AWS Step Functions로 라우팅하고 상태 시스템을 호출하여 추가 처리를 수행할 수 있습니다. AWS Step Functions를 사용하면 여러 서비스를 서버리스 워크플로로 조정하여 자동화된 프로세스를 신속하게 빌드 및 업데이트할 수 있습니다.

이 자습서에서는 Step Functions를 사용하여 CloudWatch 이벤트에 대한 응답으로 서버리스 워크플로를 오케스트레이션해보겠습니다. 우선 AWS Step Functions를 사용하여 아주 간단한 상태 시스템을 만듭니다. 그런 다음, Amazon CloudWatch Events를 사용하여 상태 시스템을 1분마다 실행하는 규칙을 설정합니다. 이 자습서에서는 시간 기반 일정에서 워크플로를 호출하지만, 이 경우를 일반화하여 다른 이벤트 생성 AWS 서비스와 통합할 수 있습니다.

이 자습서에서는 AWS Step FunctionsAmazon CloudWatch를 사용합니다. 두 서비스는 AWS 프리 티어에 포함됩니다.

이 자습서를 사용하려면 AWS 계정이 필요합니다.

Step Functions 또는 CloudWatch는 추가 요금 없이 사용할 수 있습니다. 이 자습서에서 생성하는 리소스는 프리 티어에 해당합니다. 

프리 티어에 대해 자세히 알아보기 >>


1단계. AWS Identity and Access Management(IAM) 역할 생성

AWS Step Functions는 코드를 실행하고 다른 AWS 리소스(예: Amazon S3 버킷에 저장된 데이터)에 액세스할 수 있습니다. 보안을 유지하려면 AWS Identity and Access Management(IAM)를 사용하여 이러한 리소스에 Step Functions 액세스 권한을 부여해야 합니다.


a. 다른 브라우저 창에서 AWS Management Console을 엽니다. 이 단계별 안내서는 계속 열어 놓을 수 있습니다. 이 화면이 로드되면 먼저 사용자 이름 및 암호를 입력하여 시작합니다. 그런 다음 검색 창에 IAM을 입력하고 IAM을 선택하여 서비스 콘솔을 엽니다.

(확대하려면 클릭)


b.  [역할]을 클릭한 후 [역할 생성]을 선택합니다.

( 확대하려면 클릭 )


c. [신뢰받는 엔터티 유형 선택] 페이지의 AWS 서비스 목록에서 [Step Functions]를 선택한 후 [다음: 권한]을 선택합니다.

(확대하려면 클릭)


d. [권한 정책 연결] 페이지에서 [다음: 검토]를 선택합니다.

( 확대하려면 클릭 )


e. [검토] 페이지에서 [역할 이름]에 step_functions_basic_execution을 입력하고 [역할 생성]을 클릭합니다.

( 확대하려면 클릭 )


f. 새 IAM 역할이 생성되었습니다.

(확대하려면 클릭)


2단계. AWS Step Functions 상태 시스템 생성

이 단계에서는 Pass 상태를 사용하여 간단하고 독립적으로 실행되는 상태 시스템을 생성합니다. Pass 상태는 입력을 출력으로 전달하기만 하며 실질적인 작업은 전혀 수행하지 않습니다.

실제 시나리오에서 서버리스 워크플로는 필요한 어떤 작업이든 수행할 수 있습니다. 여러 가지 Lambda 함수를 조정하여 태스크를 수행하고, 결정을 내리는 등 다양한 작업을 할 수 있습니다. 단, 이 자습서의 목적을 위해 여기에서는 워크플로를 간단하게 유지하고자 합니다.


a. AWS Step Functions 콘솔을 엽니다. Step Functions는 다양한 미리 정의된 상태 시스템을 템플릿으로 제공합니다. 이 자습서에서는 Hello World 템플릿을 사용하여 상태 시스템을 생성해보겠습니다. [상태 시스템 생성] 페이지에서 [템플릿]을 선택하고 [Hello world]를 선택합니다.

(확대하려면 클릭)


b. [세부 정보] 섹션에 상태 시스템의 [이름]을 [ScheduledWorkflow]로 입력한 다음, [IAM 역할] 아래에서 [기존 역할 사용]을 선택합니다. [기존 IAM 역할] 아래에서 여러분이 생성한 IAM 역할인 step_functions_basic_execution을 선택합니다.

(확대하려면 클릭)


c. Step Functions는 상태 시스템의 이름을 자동으로 채웁니다. 그리고 [상태 시스템 정의] 창에 상태 시스템의 Amazon States 언어 설명을 채웁니다. 상태 시스템을 정의하는 방법에 대한 자세한 내용은 상태 시스템 구조를 참조하십시오.

이제 상태 시스템을 간단히 수정해보겠습니다.

행 2와 행 5에서 “HelloWorld”를 “Do Something”으로 바꿉니다.
행 7에서 “Hello World!” with “Work complete!”로 바꿉니다.

그런 다음 시각적 워크플로 옆의 새로 고침 버튼을 클릭하여 상태 시스템 다이어그램에 변경 사항이 반영되도록 합니다.

(확대하려면 클릭)


d. [상태 시스템 생성]을 선택합니다. 이제 상태 시스템을 실행할 준비가 되었습니다.

(확대하려면 클릭)


3단계. Amazon CloudWatch 이벤트 규칙 생성

이제 상태 시스템을 생성했으므로, 일정에 따라 상태 시스템을 실행하는 Amazon CloudWatch Events 규칙을 생성할 수 있습니다. Amazon CloudWatch Events는 Amazon Web Services(AWS) 리소스의 변경 사항을 설명하는 시스템 이벤트의 스트림을 거의 실시간으로 제공합니다. 빠르게 설정할 수 있는 간단한 규칙을 사용하면 이벤트를 매칭하여 하나 이상의 대상 함수 또는 스트림으로 라우팅할 수 있습니다.


a. 다른 브라우저 탭을 엽니다. 검색 창에 CloudWatch를 입력하여 CloudWatch Events 콘솔로 이동합니다.

(확대하려면 클릭)


b. [이벤트]를 선택한 후 [규칙 생성]을 선택합니다.  

(확대하려면 클릭)


c. [단계 1: 규칙 생성] 페이지가 표시됩니다. [이벤트 소스] 섹션에서 [일정]을 선택합니다. [고정 주기]에 1을 입력하고 단위는 “분”으로 선택된 상태로 둡니다.

(확대하려면 클릭)


d. [대상] 섹션에서 [대상 추가]를 선택합니다. 목록에서 [Step Functions 상태 시스템]을 선택하고 [ScheduledWorkflow] 상태 시스템을 선택합니다.

[입력 구성]을 선택하고 [일치하는 이벤트]를 선택합니다. 이렇게 하면 상태 시스템의 인스턴스를 실행할 때마다 CloudWatch Event의 세부 정보가 Step Functions에 입력으로 전달됩니다.

[이 특정 리소스에 대한 역할 생성]을 선택한 다음 [세부 정보 구성]을 클릭합니다.

(확대하려면 클릭)


e. [단계 2: 규칙 세부 정보 구성] 페이지가 표시됩니다. execute_state_machine을 규칙의 [이름]으로 입력하고 [상태에 대해 활성화됨]을 선택된 상태로 둔 다음 [규칙 생성]을 선택합니다.

규칙이 생성되고 모든 CloudWatch Events 규칙이 나열된 [규칙] 페이지가 표시됩니다.

이제 상태 시스템의 새로운 실행 작업이 1분마다 실행됩니다.

(확대하려면 클릭)


4단계. 상태 시스템이 입력 및 출력을 처리하는 방법 사용자 지정

다음 단계로는 상태 시스템이 입력 및 출력을 처리하는 방법을 사용자 지정해보겠습니다. 상태 시스템 간의 정보 흐름이 어떤 방식으로 이루어지는지 이해하고, 이 데이터를 필터링 및 조작하는 방법을 학습하면 AWS Step Functions에서 워크플로를 효과적으로 설계하고 구현하는 데 도움이 됩니다.


a. Step Functions 콘솔로 돌아가면 [ScheduledWorkflow] 상태 시스템이 계속 표시되어야 합니다. [편집]을 클릭합니다.

(확대하려면 클릭)


b. [상태 시스템 정의] 창에서 상태 시스템의 행 7을 참조합니다. Pass 상태의 결과 필드는 다음 상태로 전달해야 하는 출력을 지정합니다. 상태 시스템에 한 가지 상태만 있으므로, “Work complete!” 메시지가 워크플로의 끝 상태로 전달됩니다.

Step Functions Pass 상태는 입력을 출력으로 전달하기만 한다는 걸 기억하실 겁니다. ResultPath 필드를 사용하여 상태의 출력을 수정할 수 있습니다. 예를 들어 상태 입력을 상태 입력이 생성하는 결과로 바꿀 수 있습니다(예: 태스크 상태의 Lambda 함수에서 나온 출력).

상태의 입력을 해당 결과와 결합하려면 행 7 뒤에 새 행을 추가하고 다음을 입력합니다.

"ResultPath": "$.taskresult",

이렇게 하면 상태 시스템 실행을 호출한 CloudWatch Event의 세부 정보가 Pass 상태의 출력과 결합되며, 이 경우에는 “Work complete!”입니다. 자세한 내용은 Step Functions에서 입력 및 출력 처리를 참조하십시오.

(확대하려면 클릭)


c. [저장]을 클릭합니다.

(확대하려면 클릭)


5단계. 워크플로가 정상적으로 작동하는지 확인

이제 CloudWatch Events 규칙을 활성화했으므로, CloudWatch가 상태 시스템 워크플로를 1분 간격으로 실행하는 작업을 트리거합니다. 이 단계에서는 이러한 실행을 관찰하고 Step Functions가 CloudWatch Events의 세부 정보를 캡처하는지 확인합니다.


a. Step Functions 콘솔로 돌아가 페이지 상단의 이동 경로에서 ScheduledWorkflow를 클릭합니다.

(확대하려면 클릭)


b. [실행] 아래에서 CloudWatch Events가 실행한 실행 작업을 관찰할 수 있습니다. 새로 고침 버튼을 클릭해 창을 업데이트하여 표시되는 상태 시스템의 실행을 관찰할 수 있습니다. 워크플로의 인스턴스가 두 개 이상 트리거될 때까지 몇 분 정도 기다립니다.

(확대하려면 클릭)


c. 실행 작업 중 하나를 마우스 오른쪽 버튼으로 클릭하고 새 브라우저 탭에서 링크를 엽니다. 상태 시스템의 다른 실행에도 반복합니다.

각 탭에서 시각적 워크플로 창의 “Do Something” 상태를 클릭하여 오른쪽의 [단계 세부 정보 창]을 채웁니다.

[입력]을 클릭하면 CloudWatch에서 일치된 이벤트의 세부 정보를 볼 수 있습니다. “id” 및 “time” 필드 같은 이벤트의 차이점에 주의하십시오.

(확대하려면 클릭)


d. 각 탭에서 [단계 세부 정보 창] 아래의 [출력]을 확장합니다. 입력이 "Do Something" 상태의 출력과 결합된 걸 볼 수 있습니다.

(확대하려면 클릭)


6단계. 리소스 종료

이 단계에서는 AWS Step Functions 및 AWS CloudWatch 리소스를 종료합니다.

중요: 현재 사용되지 않는 리소스를 종료하면 비용이 절감되므로 권장됩니다. 리소스를 종료하지 않으면 요금이 부과될 수 있습니다.


a. 개별 상태 시스템 실행을 위한 탭을 닫습니다. Step Functions 창의 상단에서 [상태 시스템]을 클릭합니다.

(확대하려면 클릭)


b. [상태 시스템] 창에서 이 자습서를 위해 생성한 상태 시스템을 클릭하고 [삭제]를 선택합니다. 대화 상자에서 [상태 시스템 삭제]를 선택하여 작업을 확인합니다. Step Functions가 진행 중인 실행이 완료되었음을 확인하고 나면 1~2분 안에 상태 시스템이 삭제됩니다.

( 확대하려면 클릭 )


c. 다음 단계에서는 Amazon CloudWatch Events 규칙을 삭제해보겠습니다. CloudWatch 콘솔에서 [작업]을 클릭하고 [삭제]를 클릭합니다. [삭제]를 다시 클릭하여 삭제를 확인합니다.

(확대하려면 클릭)


d. [서비스]를 클릭한 다음 검색 창에 IAM을 입력하여 IAM 콘솔로 이동합니다.

(확대하려면 클릭)


e. [역할]을 클릭합니다.

(확대하려면 클릭)


f. 이 자습서용으로 생성한 IAM 역할 2개를 모두 선택한 후 [역할 삭제]를 클릭합니다. 대화 상자에서 [예, 삭제합니다]를 클릭하여 삭제를 확인합니다.

이제 AWS Management Console에서 로그아웃해도 됩니다.

( 확대하려면 클릭 )


축하합니다!

서버리스 워크플로를 1분마다 실행하도록 예약했습니다.
AWS Step Functions를 사용하면 반복 태스크의 실행을 검사 및 감사하여 해당 태스크가 일관성 있게 실행되는지 확인할 수 있습니다. AWS Step Functions를 Amazon CloudWatch Events와 결합하여 특정 조건이 충족되면 일일, 주별, 월별 태스크를 자동화하거나 Step Functions 워크플로의 실행을 트리거할 수 있습니다.