티스토리 뷰

728x90

요즘 회사에서 많이 사용하고 있는

AWS 서비스중 하나이다

그것은 AWS Step Function

 

 

옆에 직원이 이거 좋아보인다고해서

어떤서비스지 하면서 알아보다가 알게된 서비스인데

사용성, 생산성, 직관성

개인적으로 괜찮은 서비스 인거 같아서

입문편으로 정리 해볼까해요!!!

 

 

출처 : https://aws.amazon.com/ko/step-functions/?step-functions.sort-by=item.additionalFields.postDateTime&step-functions.sort-order=desc

 

뭐 AWS 서비스 설명엔 이렇다고 합니다.

 

쉽게 설명하면 AWS 다양한 서비스를 역어서

쉽게 파이프라인을 구축하고 서비스 생성을 할수있는

서비스라고 보면될꺼 같아요

 

 

오늘 필자는 AWS Step Function을 이용하여

AWS Lambda 서비스를 Step 별로 실행할수 있는

간단한 파이프라인을 구축해보겠습니다.

 

우선 AWS 계정이 필수적으로 필요하니

계정이 있다는 기준으로 글을 써볼께요

 

AWS Console에 로그인을 합니다.

그러면 여기서 검색창에 Step Function 검색해서

서비스 들어가기

 

 

 

들어가면 이제 이런화면이 나올꺼에요

여기서 상태 머신 생성 클릭

여기서 바로 다음 버튼 클릭

(필자는 시각적으로 워크플로 설계로 만들었어요)

 

2단계로 워크플로 설계를 할수있는 기본 화면이 나옵니다

여기서 장점은 AWS 다양한 서비스를 드레그엔 드랍으로

쉽게 만들수 있다는거죠

 

저희는 Lmabda 서비스를 활용 할꺼니까

먼저 람다가 필요하겠죠??

 

새로운 브라우져를 뛰워서 Lmabda를 만들어보독 하겠습니다.

기본 람다로 생성하고

언어는 Python 3.8

함수 이름은 : test_step_function_001

 

그리고 '함수생성'

 

생성하면 이런 화면이 나옵니다.

람다 코드는 저기 lambda_function에다가 작성을 하면됩니다.

 

저희는 Step별로 동작할수 있는 람다를 만들기 위해

여러 함수를 만들어 보도록할께요.

 

* 참고 여러개 람다를 만들어서 Step Function으로 만들수도 있으니 참고 하시면 좋습니다.

 

import json

def step_001(result_val):
    print("This is Step 1")
    result_val = result_val + 10
    return result_val

def step_002(result_val):
    print("This is Step 2")
    result_val = result_val + 20
    return result_val

def step_003(result_val):
    print("This is Step 3")
    result_val = result_val + 30
    return result_val

def lambda_handler(event, context):
    # TODO implement
    print(event)
    state = event['state']
    result_val = event['result_val']
    
    if state == 'step_001':
        event['state'] = 'step_002'
        event['result_val'] = step_001(result_val)
        return event
    elif  state == 'step_002':
        event['state'] = 'step_003'
        event['result_val'] = step_002(result_val)
        return event
    elif  state == 'step_003':
        event['state'] = 'end'
        event['result_val'] = step_003(result_val)
        return event

    return "[Error] No state Find"

 

코드는 다음과 같이 람다 함수에 복퉅해서 실습해볼께요.

 

자 그럼 여기까지 하셨으면 다시 아까 Step Function 으로 넘어가서

Lambda fucntion을 Step 별로 호출하는 파이프라인을

만들어보도록 하겠습니다.

 

이런식으로

Lambda Invoke 함수를 매칭하여

각각 다른 변수들을 콜하도록 만들어볼께요

 

Step Function 의 Lmabda 블록을 클릭하면

오른쪽에 API 파라미터로 원하는 Lambda 서비스를 매칭 할수 있습니다.

이렇게

아까 만든 람다와 전부 연결해 줍니다.

(저희는 람다 하나에서 Step으로 구분 지었으니 3개모두 동일하게 해야겠죠?)

 

매칭해주고 저는 각 블럭별 이름을 새로 지정하였습니다.

작성 완료 다음을 누르면

다음과 같은 화면으로 넘어갑니다.

 

잘 생성되었는지 확인하고

다시 다음 버튼 클릭!!!

 

 

그러면 생성할 Step Function의 상태 머신 이름을 지정하라고 나옵니다.

저는 : Test_Lmabda_Step_Resul_Val

라는 상태 머신으로 생성 해보도록할께요

 

정상적으로 생성이 완료되면

다음과 같은 화면이 나옵니다

 

자여기서 이제 상태 머신이 Step별로 잘 돌아가는지 Test 하기위해

위에 '실행시작' 버튼을 클릭합니다.

 

{
  "state": "step_001",
  "result_val": 10
}

 

다음과 같이 값을 입력하고.

'실행 시작'

 

 

실행을 하면 다음과 같은 권한 에러문제로

에러가 납니다.

 

자그럼 다음으로 해당 상태머신이 Lambda에 접근이 가능하게

IAM 정책을 추가해볼께요

 

여기서 권한 추가

+

정책 연결

 

실습 기준에 빨르게 하기 위해

Lmabda 전체 권한을 부여하겠습니다.

 

권한 부여하고 아까와 같이 다시 실행 하면

정상적으로 호출된 모습이 보입니다.

 

출력된 결과를 보면

Lambda에 Step별로 보낸 값을 개속 증가하여 보낸것을 확인이 가능하죠

 

물론 Lmabda하나에서 다짜면 되지 않냐라는 의문이 들수 있지만

코드가 복잡해지고

다양한 AWS 서비스를 역어서 만들때

Step Function은 활용도 좋을꺼 같다는 생각이 듭니다.

 

 

무엇보다 시각적으로 표현해주는게 너무 맘에 듬!!!!

 

 

오늘 실습은 여기까지고

궁금하거나

원하는 실습 요청이 있으시면 비밀글로 남겨주시면

시간 될때 남겨드릴께요 :)

728x90
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함