서버리스 프레임워크가 포함된 Step Functions Workflow Studio

serverless-step-functions pluginserverless.yml 내에서 직접 단계 함수를 정의할 수 있는 멋진 Serverless Framework 확장입니다. 그러나 단계 함수에 대한 정의는 빠르게 복잡해지는 경향이 있으며 YAML을 보는 것만으로는 워크플로가 실제로 어떻게 보이고 흐르는지 시각화하기 어렵습니다. Step Functions Workflow Studio은 상태 시스템을 대화식으로 스케치할 수 있도록 하여 정확히 이를 지원합니다. 이 게시물에서는 Workflow Studio를 Step Functions 플러그인과 함께 사용하는 방법에 대한 간략한 설명을 제공합니다.

상태 머신 생성



시작하려면 AWS 콘솔에서 Step Functions 페이지로 이동하여 "Create state machine"을 누르십시오.



그런 다음 "작업 흐름을 시각적으로 디자인"을 선택한 후 다음으로 이동합니다.



여기에서 작업 및 흐름을 끌어서 놓고 디자인에 만족할 때까지 속성, 흐름 및 오류 처리를 수정할 수 있습니다.



결국 서버리스 앱에서 정의하려는 모든 리소스가 그 동안 구성된 값을 참조하도록 설정합니다. 예를 들어 Lambda 함수 이름을 문자열 이름으로 설정합니다. 완료되면 "다음"을 클릭합니다.



마침내 상태 시스템에 대한 생성된 JSON 스키마가 생겼습니다! 하지만 기다려. Serverless 템플릿은 JSON이 아닌 YAML입니다. 이를 실제로 사용할 수 있는 것으로 변환하려면 어떻게 해야 할까요?



결과적으로 YAML is just a superset of JSON 은 모든 JSON이 유효한 YAML임을 의미합니다. 생성된 JSON은 Amazon State Languages spec 형식이며 동일한 사양이 serverless-step-functions 플러그인에서 사용됩니다. 즉, Code Beatify 과 같은 온라인 도구 또는 yq 과 같은 CLI 도구를 사용하여 JSON 스니펫을 YAML로 변환할 수 있습니다.



이제 YAML에 정의된 상태 시스템이 있으므로 실제로 serverless.yml에서 사용하기만 하면 됩니다.

합치기



If you don't already have a serverless project set up, check out my or just run serverless in your terminal to choose from one of the boilerplates.



serverless-step-functions 플러그인은 루트serverless.yml 속성으로 stepFunctions 형식을 확장합니다. 이를 사용하여 YAML 스니펫을 상태 머신의 정의로 붙여넣어 단계 함수를 정의합니다.

// serverless.yml
[...]

stepFunctions:
  stateMachines:
    myStateMachine:
        name: MyStateMachine
        [your generated state machine goes here]


우리가 자리 표시자 참조를 사용한 Lambda 함수 또는 기타 서비스에 대한 모든 참조는 가리키기를 원하는 실제 리소스를 참조하도록 업데이트해야 합니다. 예를 들어 Lambda 정의는 생성될 때 다음과 같을 수 있습니다.

FirstFunction:
  Type: Task
  Resource: arn:aws:states:::lambda:invoke
  OutputPath: $.Payload
  Parameters:
    Payload.$: $
    FunctionName: firstFunction



대신 다음과 같이 변경하여 스택에 정의된 firstFunction Lambda를 참조하도록 변경할 수 있습니다.

FirstFunction:
  Type: Task
  Resource: !GetAtt firstFunction.Arn
  OutputPath: "$.Payload"
  Parameters:
        Payload.$: "$"


위 예의 워크플로에서 전체serverless.yml는 다음과 같습니다.

service: step-functions-demo

plugins:
  - serverless-step-functions

provider:
  name: aws
  runtime: nodejs14.x

stepFunctions:
  stateMachines:
    myStateMachine:
      name: MyStateMachine
      definition:
        Comment: This is your state machine
        StartAt: First function
        States:
          First function:
            Type: Task
            Resource: !GetAtt firstFunction.Arn
            OutputPath: "$.Payload"
            Parameters:
              Payload.$: "$"
            Retry:
            - ErrorEquals:
              - Lambda.ServiceException
              - Lambda.AWSLambdaException
              - Lambda.SdkClientException
              IntervalSeconds: 2
              MaxAttempts: 6
              BackoffRate: 2
            Next: Wait
          Wait:
            Type: Wait
            Seconds: 5
            Next: Second function
          Second function:
            Type: Task
            Resource: !GetAtt secondFunction.Arn
            OutputPath: "$.Payload"
            Parameters:
              Payload.$: "$"
            Retry:
            - ErrorEquals:
              - Lambda.ServiceException
              - Lambda.AWSLambdaException
              - Lambda.SdkClientException
              IntervalSeconds: 2
              MaxAttempts: 6
              BackoffRate: 2
            End: true

functions:
  firstFunction:
    handler: src/functions/first.handler
  secondFunction:
    handler: src/functions/second.handler



이 게시물이 마음에 들었고 더 많은 내용을 보려면 내가 서버리스 기술, AWS 및 개발자 생산성에 대해 자주 쓰는 Twitter에서 나를 팔로우하십시오! 👋

좋은 웹페이지 즐겨찾기