BLOG

AWS SAM의 AWS Step Functions 지원으로 더욱 간소화된 애플리케이션 오케스트레이션
작성일: 2020-06-29

최신 소프트웨어 응용 프로그램은 여러 서비스에 분산된 여러 구성 요소들로 구성됩니다. AWS Step Functions를 사용하면 서버리스 워크 플로우를 정의하여 이러한 서비스를 조정함으로써 앱을 신속하게 구축하고 업데이트할 수 있습니다. Step Functions는 자체 상태를 관리하고 오류가 있을 때 재 시도하므로 사용자가 비즈니스 로직에 집중할 수 있습니다. 이제 AWS SAM(AWS Serverless Application Model) 의 Step Functions 지원에 따라 서버리스 애플리케이션 을 쉽게 생성, 배포 및 유지 관리할 수 ​​있습니다.

 

최신 AWS SAM 업데이트에는 애플리케이션의 워크 플로우 정의를 간소화하는 AWS::Serverless::StateMachine 구성 요소가 도입되었습니다. 이는 상태머신이 AWS SAM 구성 요소이므로 AWS SAM 정책 템플릿을 적용해 워크 플로우의 권한을 검토할 수 있습니다. AWS SAM은 이벤트 또는 지정한 일정에 따라 워크 플로우를 호출하기 위한 구성 옵션도 제공합니다.

 

 

간단한 상태 머신 정의

Step Functions 및 AWS SAM을 사용하여 애플리케이션을 오케스트레이션하는 가장 간단한 방법은 최신 버전의 AWS SAM CLI를 설치하는 것 입니다.

 

AWS SAM CLI를 사용하여 상태 머신 생성

AWS SAM CLI를 사용하여 상태 머신을 생성하려면 다음 단계를 수행하세요.

 

  1. 명령 행 프롬프트에서 sam init 입력
  2. AWS 빠른 시작 템플릿 선택
  3. 런타임으로 nodejs12.x 를 선택
  4. 프로젝트 이름을 지정
  5. Hello World Example 빠른 시작 응용 프로그램 템플릿을 선택

 

AWS SAM CLI는 빠른 시작 애플리케이션 템플릿을 다운로드하고 샘플 코드로 새 디렉토리를 생성합니다. sam-app 디렉토리로 변경하고 template.yaml 의 내용을 다음 코드로 바꿉니다.

 # Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.

# SPDX-License-Identifier: Apache-2.0

AWSTemplateFormatVersion: ‘2010-09-09’

Transform: AWS::Serverless2016-10-31

 

 Resources:

  SimpleStateMachine:

    Type: AWS::Serverless::StateMachine

    Properties:

      Definition:

        StartAt: Single State

        States:

          Single State:

            Type: Pass

            End: true

      Policies:

        CloudWatchPutMetricPolicy: {}

 

 

이것은 단일 Pass state로 Step Function 표준 워크 플로우를 정의하는 단순하지만 완전한 템플릿입니다. Transform: AWS::Serverless-2016-10-31 라인이 이는 AWS SAM 템플릿이 아닌 기본 AWS CloudFormation 템플릿임을 나타냅니다. 이를 통해 마지막 라인에서 AWS :: Serverless 구성 요소 및 CloudWatchPutMetricPolicy 와 같은 정책 템플릿을 활성화하여 지표를 Amazon CloudWatch에 게시할 수 있습니다.

 

 

AWS SAM CLI를 사용하여 상태 머신 배포

AWS SAM CLI를 사용하여 상태 머신을 배포하려면

 

  1. template.yaml 파일을 저장하세요.
  2. hello-world 와 같은 디렉토리에서 함수 코드를 삭제하세요.
  3. 터미널에 sam deploy –guided를 입력하고, 명령을 따르세요.
  4. 스택 이름으로 simple-state-machine을 입력하세요.
  5. 나머지 명령의 기본값을 선택하세요.

 

워크 플로우 시각화, 실행 및 모니터링에 대한 자세한 내용은 AWS SAM을 사용하여 단계 함수 상태 머신 생성 자습서를 참고하세요.

 

 

워크 플로우 개선

머신 (StateMachine) 구성 요소는 워크 플로우의 작성을 간소화할 뿐 아니라 방법 워크 플로우가 실행을 통해 강력한 제어 기능을 제공합니다. 사용 가능한 모든 ASL(Amazon States Language)상태에서 복잡한 워크 플로우를 구성할 수 있으며 Definition Substitution를 통해 자원을 참고할 수 있습니다. 마지막으로 AWS Identity and Access Management (IAM) 정책 및 역할을 사용하여 액세스 권한을 관리할 수 ​​있습니다.

 

 

서비스 통합

Step Functions 서비스 통합을 통해 작업 상태에서 다른 AWS 서비스를 직접 호출할 수 있습니다. 다음 예제는 서비스 통합을 사용하여 워크 플로우 실행에 대한 정보를 Amazon DynamoDB 테이블에 직접 저장하는 방법을 보여줍니다. template.yaml 파일의 Resources 섹션을 다음 코드로 바꾸세요.

 

 Resources:

  SAMTable:

    Type: AWS::Serverless::SimpleTable

 

   SimpleStateMachine:    Type: AWS::Serverless::StateMachine

    Properties:

      Definition:

        StartAt: FirstState

        States:

          FirstState:

            Type: Pass

            Next: Write to DynamoDB

          Write to DynamoDB:

            Type: Task

            Resource: arn:aws:states:::dynamodb:putItem

            Parameters:

              TableName: !Ref SAMTable

              Item:

                id:

                  S.$: $$.Execution.Id

            ResultPath: $.DynamoDB

            End: true

      Policies:

        DynamoDBWritePolicy:

            TableName: !Ref SAMTable

 

 

AWS :: Serverless :: SimpleTable 주문형 용량과 합리적인 기본값으로 DynamoDB의 테이블을 생성하는 AWS SAM 구성 요소입니다. 자세한 내용은 SimpleTable 구성 요소 설명서를 참고하세요.

 

Write to DynamoDB state는 DynamoDB의 PutItem API call에 연동되는 서비스를 통한 업무입니다. 위의 코드는 현재 워크 플로우 실행의 컨텍스트 개체에서 가져온 실행 ID가 포함된 필드 ID를 가진 단일 항목을 저장합니다.

 

DynamoDBWritePolicy 이전 작업 흐름에서 CloudWatchPutMetricPolicy 정책을 대체한다는 점을 주목하세요. 이는 지정된 DynamoDB 테이블에만 쓰기 액세스를 제공하는 AWS SAM 정책 템플릿입니다.

 

 

정의 대체

AWS SAM은 상태머신 리소스를 정의할 때 definition substitutions를 지원합니다. definition substitutions는 템플리트 문자열 대체와 같이 작동합니다. 먼저 $ {dollar_sign_brace} 표기법에 지정된 변수가 포함된 상태머신의 Definition 또는 DefinitionUri 속성을 지정합니다. 그런 다음 DefinitionSubstitution 특성을 통해 해당 변수의 값을 맵으로 제공하세요.

 

AWS SAM CLI는 정의 대체를 보여주는 빠른 시작 템플릿을 제공합니다. 이 템플릿을 사용하여 워크 플로우를 만들려면 다음 단계를 수행하십시오.

  1. 빈 디렉토리의 명령 행 프롬프트에서 sam init 입력
  2. AWS Quick Start Templates선택
  3. 원하는 런타임을 선택
  4. 프로젝트 이름 입력
  5. Step Functions Sample App (Stock Trader)를 선택해 애플리케이션 빠른 시작

 

새로 작성된 디렉토리로 변경하고 원하는 텍스트 편집기로 template.yaml 파일을 여세요. 정의 속성은 파일의 경로가 아닌 이전 템플릿 같은 문자열이라는 점을 숙지하셔야 합니다. DefinitionSubstitutions 속성은 키 – 값 쌍의 맵입니다. 이 쌍은 DefinitionUri에서 참조된 statemachine / stockTrader.asl.json 파일의 변수와 일치해야 합니다.

 

DefinitionUri: statemachine/stockTrader.asl.json

      DefinitionSubstitutions:

        StockCheckerFunctionArn: !GetAtt StockCheckerFunction.Arn

        StockSellerFunctionArn: !GetAtt StockSellerFunction.Arn

        StockBuyerFunctionArn: !GetAtt StockBuyerFunction.Arn

        DDBPutItem: !Sub

arn:${AWS::Partition}:states:::dynamodb:putItem 

       DDBTable: !Ref TransactionTable

 

 

statemachine / stockTrader.asl.json 파일을 열고 첫 번째 상태 Check Stock Value 검색하세요. 이 상태의 Resource 속성은 Lambda 함수 ARN이 아닌 DefinitionSubstitutions “$ {StockCheckerFunctionArn}” 입니다.  StockCheckerFunction 리소스의 ARN 인 template.yaml 정의된 AWS :: Serverless :: Function 매핑되는 DefinitionSubstitutions 에서 확인할 수 있습니다 . AWS SAM CLI는 배포 시 이러한 구성 요소를 완전한 표준 CloudFormation 템플릿으로 변환합니다.

 

상태 머신 정의를 자체 파일로 분리하면 AWS Toolkit for Visual Studio Code와의 통합을 활용할 수 있습니다. 상태 머신을 별도의 파일로 사용하면 AWS SAM 템플릿에서 참조하면서 IDE 내에서 워크 플로우를 변경하고 시각화할 수 있습니다.

 

 

 

 

권한 및 액세스 관리

AWS SAM 지원을 통해 상태 템플릿에 정책 템플릿을 적용할 수 있습니다. AWS SAM 정책 템플릿은 일반적인 시나리오에 대해 사전 정의된 IAM 정책을 제공합니다. 이러한 템플릿은 상태 머신의 권한 범위를 적절히 제한하면서 동시에 AWS SAM 템플릿을 단순화합니다. 상태 관리 시스템에 AWS 관리 형 정책 을 적용할 수도 있습니다.

 

AWS SAM 정책 템플릿 및 AWS 관리형 정책이 필요에 맞지 않으면 인라인 정책을 생성하거나 IAM 역할을 연결할 수도 있습니다. 이를 통해 상태 머신의 권한을 정확한 사용 사례에 맞출 수 있습니다.

 

 

추가 구성

AWS SAM은 이벤트 소스 구성 및 로깅을 위한 추가적인 간소화 기능을 제공합니다.

 

 

이벤트 소스

이벤트 소스에 따라 워크 플로우 실행을 시작할 수 있는 이벤트가 결정됩니다. 이러한 소스에는 Amazon API Gateway REST API 및 Amazon EventBridge 규칙에 대한 HTTP 요청이 포함될 수 있습니다. 예를 들어 아래 이벤트 블록은 API Gateway REST API를 만듭니다. 해당 API가 경로 / request 대한 HTTP POST 요청을 수신할 때마다 상태 머신의 실행이 시작됩니다.

       Events:

        HttpRequest:

          Type: Api

          Properties:

            Method: POST

            Path: /request

 

이벤트 소스는 지정한 일정에 따라 워크 플로우 실행을 시작할 수도 있습니다. 위에서 만든 빠른 시작 템플릿은 다음 예제를 제공합니다. 이 이벤트 소스가 사용 가능한 경우 워크 플로우는 1 시간마다 한 번씩 실행됩니다.

      Events:

        HourlyTradingSchedule:

          Type: Schedule

          Properties:

            Enabled: False

            Schedule: “rate(1 hour)”

 

 

 

이벤트 소스인 일정에 대한 자세한 내용은 GitHub 의 AWS SAM 설명서를 참고하세요.

 

 

로깅

Standard Workflows와 Express Workflows는 CloudWatch Logs에 로깅 실행을 지원합니다. 워크 플로우에 로깅을 활성화하려면 AWS :: Logs :: LogGroup 정의하고 상태머신 정의에 로깅 속성을 추가해야 합니다. 또한 로그를 생성하고 게시할 수 있는 충분한 권한을 제공하는 IAM 정책 또는 역할을 연결해야 합니다. 다음 코드는 기존 워크 플로우에 로깅을 추가하는 방법을 보여줍니다.

 

Resources:

  SAMLogs:

    Type: AWS::Logs::LogGroup

 

   SimpleStateMachine:

    Type: AWS::Serverless::StateMachine

    Properties:

      Definition: {}

      Logging:

        Destinations:

          CloudWatchLogsLogGroup:

              LogGroupArn: !GetAtt SAMLogs.Arn

        IncludeExecutionData: true

        Level: ALL

      Policies:

        CloudWatchLogsFullAccess

      Type: EXPRESS

 

 

결론

Step Functions 워크 플로우는 분산 서비스 오케스트레이션을 간소화하고 애플리케이션 개발을 가속화합니다. Step Functions에 대한 AWS SAM 지원은 워크 플로우를 보다 빠르고 정확하게 구축, 배포 및 모니터링할 수 있도록 함으로써 이러한 이점을 더욱 강화합니다. 이 게시물에서는 AWS SAM을 사용하여 서비스 통합과 함께 간단한 워크 플로우 및 보다 복잡한 워크 플로우를 정의하는 방법을 배웠습니다. Step Functions 워크 플로우에 대한 보안 권한, 이벤트 소스 및 로깅을 관리하는 방법도 배웠습니다.

 

Step Functions를 사용하여 빌드하는 방법에 대한 자세한 내용은 AWS Serverless YouTube 채널에서 AWS Step Functions 재생 목록을 참고하세요. Step Functions를 사용하여 최신 이벤트 중심 응용 프로그램을 조정하는 방법에 대한 자세한 내용은 App 2025 목록을 참고하세요.

 

 

원문URL: https://aws.amazon.com/ko/blogs/compute/simplifying-application-orchestration-with-aws-step-functions-and-aws-sam/

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.