AWS SAM을 사용하여 중첩된 애플리케이션 자동 배포 - AWS 권장 가이드

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

AWS SAM을 사용하여 중첩된 애플리케이션 자동 배포

작성자: Dr. Rahul Sharad Gaikwad(AWS), Dmitry Gulin (AWS), Ishwar Chauthaiwale (AWS), 및 Tabby Ward (AWS)

코드 리포지토리: -샘플 aws-sam-nested-stack

환경: PoC 또는 파일럿

기술: 현대화, 서버리스, DevOps

워크로드: 기타 모든 워크로드

AWS 서비스: AWS Serverless Application Repository

요약

Amazon Web Services(AWS)에서 AWS Serverless Application Model(AWS SAM)은 함수, API, 데이터베이스 및 이벤트 소스 매핑을 표현하는 간편 구문을 제공하는 오픈 소스 프레임워크입니다. 각 리소스에 대해 단 몇 줄이면 원하는 애플리케이션을 정의하고 YAML을 사용하여 이를 모델링할 수 있습니다. 배포 중에 SAM은 SAM 구문을 서버리스 애플리케이션을 더 빠르게 구축하는 데 사용할 수 있는 AWS CloudFormation 구문으로 변환 및 확장합니다.

AWS SAM은 AWS 플랫폼에서 서버리스 애플리케이션의 개발, 배포 및 관리를 간소화합니다. 표준화된 프레임워크, 더 빠른 배포, 로컬 테스트 기능, 리소스 관리, 개발 도구와의 원활한 통합, 지원 커뮤니티를 제공합니다. 이러한 기능을 통해 서버리스 애플리케이션을 효율적이고 효과적으로 구축하는 데 유용한 도구가 됩니다.

이 패턴은 AWS SAM 템플릿을 사용하여 중첩된 애플리케이션 배포를 자동화합니다. 중첩 애플리케이션은 다른 애플리케이션 내에 있는 애플리케이션입니다. 상위 애플리케이션은 하위 애플리케이션을 호출합니다. 이들은 서버리스 아키텍처의 느슨하게 결합된 구성 요소입니다. 

중첩된 애플리케이션을 사용하면 독립적으로 작성 및 유지 관리되지만 AWS SAM과 Serverless Application Repository를 사용하여 구성된 서비스 또는 구성 요소를 재사용하여 매우 정교한 서버리스 아키텍처를 빠르게 구축할 수 있습니다. 중첩된 애플리케이션을 사용하면 더 강력한 애플리케이션을 구축하고, 중복 작업을 방지하고, 팀과 조직 전체에서 일관성과 모범 사례를 보장할 수 있습니다. 중첩된 애플리케이션을 시연하기 위해 패턴은 예제 AWS 서버리스 쇼핑 카트 애플리케이션을 배포합니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정

  • 기존 Virtual Private Cloud(VPC) 및 서브넷

  • AWS Cloud9 또는 Visual Studio Code와 같은 통합 개발 환경(자세한 내용은 AWS 기반 구축 도구 참조)

  • Pip 설치 휠을 사용하여 Python 휠 라이브러리 설치됨(아직 설치되지 않은 경우)

제한 사항

  • 서버리스 애플리케이션에 중첩될 수 있는 최대 애플리케이션 수는 200개입니다.

  • 중첩된 애플리케이션의 최대 파리미터 수는 60개일 수 있습니다.

제품 버전

  • 이 솔루션은 AWS SAM 명령줄 인터페이스(AWS SAM CLI) 버전 1.21.1을 기반으로 구축되었지만, 이 아키텍처는 이후 AWS SAM CLI 버전에서도 작동해야 합니다.

아키텍처

대상 기술 스택  

  • Amazon API Gateway

  • AWS SAM

  • Amazon Cognito

  • Amazon DynamoDB

  • Lambda

  • Amazon Simple Queue Service(Amazon SQS) 대기열

대상 아키텍처

다음 다이어그램은 API를 호출하여 쇼핑 서비스에 사용자 요청을 전송하는 방법을 보여줍니다. 필요한 모든 정보를 포함한 사용자 요청은 Amazon API Gateway와 Amazon Cognito 권한 부여자로 전송되며, 권한 부여자는 API에 대한 인증 및 권한 부여 메커니즘을 수행합니다.

DynamoDB에서 항목이 추가, 삭제 또는 업데이트되면 이벤트가 DynamoDB Stream에 전달되면 Lambda 함수가 시작됩니다. 동기식 워크플로우의 일부로 오래된 항목이 즉시 삭제되는 것을 방지하기 위해 메시지가 SQS 대기열로 전송됩니다. 이는 메시지를 삭제하는 워커 함수를 시작합니다.

API Gateway에서 Lambda 함수, DynamoDB 및 제품 서비스에 이르는 POST 및 PUT 작업

이 솔루션 설정에서 AWS SAM CLI는 AWS 스택의 인터페이스 역할을 합니다. CloudFormation AWS SAM 템플릿은 중첩된 애플리케이션을 자동으로 배포합니다. 상위 SAM 템플릿은 하위 템플릿을 호출하고 상위 CloudFormation 스택은 하위 스택을 배포합니다. 각 하위 스택은 AWS SAM CloudFormation 템플릿에 정의된 AWS 리소스를 구축합니다.

부모 스택과 세 개의 CloudFormation 하위 스택이 있는 AWS SAM CLI를 사용하는 4단계 프로세스.
  1. 스택을 빌드하여 배포합니다.

  2. 인증 CloudFormation 스택에는 Amazon Cognito가 포함되어 있습니다.

  3. 제품 CloudFormation 스택에는 Lambda 함수와 Amazon API Gateway가 포함되어 있습니다.

  4. 쇼핑 CloudFormation 스택에는 Lambda 함수, Amazon API Gateway, SQS 대기열, 아마존 DynamoDB 데이터베이스가 포함되어 있습니다.

도구

도구

  • Amazon API Gateway를 사용하면 어떤 규모에서든 REST, HTTP 및 WebSocket API를 생성, 게시, 유지 관리, 모니터링 및 보호할 수 있습니다.

  • AWS는 AWS CloudFormation 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 지역 전반의 수명 주기 전반에 걸쳐 리소스를 관리할 수 있도록 지원합니다.

  • Amazon Cognito는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다.

  • Amazon DynamoDB는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

  • AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

  • AWS Serverless Application Model(AWS SAM)은 AWS 클라우드에서 서버리스 애플리케이션을 빌드하는 데 사용할 수 있는 오픈 소스 프레임워크입니다.

  • Amazon Simple Queue Service(Amazon SQS)는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.

code

이 패턴의 코드는 GitHub AWS SAM 중첩 스택 샘플 리포지토리에서 사용할 수 있습니다.

에픽

작업설명필요한 기술

AWS SAM CLI를 설치합니다.

AWS SAM CLI를 설치하려면 AWS SAM 설명서의 지침을 참조하세요.

DevOps 엔지니어

AWS 보안 인증을 설정합니다.

AWS SAM CLI가 사용자를 대신하여 AWS 서비스를 호출할 수 있도록 AWS 보안 인증을 설정하려면 aws configure 명령을 실행하고 프롬프트를 따릅니다.

$aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:

보안 인증 설정에 대한 자세한 내용은 인증 및 액세스 보안 인증을 참조하세요.

DevOps 엔지니어
작업설명필요한 기술

AWS SAM 코드 리포지토리를 복제합니다.

  1. 다음 명령을 입력하여 이 패턴의 aws sam 중첩 스택 샘플 리포지토리를 복제합니다.

    git clone https://github.com/aws-samples/aws-sam-nested-stack-sample.git
  2. 다음 명령을 입력하여 복제된 디렉터리로 이동합니다.

    cd aws-sam-nested-stack-sample
DevOps 엔지니어

템플릿을 배포하여 프로젝트를 초기화합니다.

프로젝트를 초기화하려면 SAM init 명령을 실행합니다. 템플릿 소스를 선택하라는 메시지가 표시되면 Custom Template Location을(를) 선택합니다.

DevOps 엔지니어
작업설명필요한 기술

AWS SAM 애플리케이션 템플릿을 검토합니다.

중첩된 애플리케이션의 템플릿을 검토합니다. 이 예제에서는 다음과 같은 중첩된 애플리케이션 템플릿을 사용합니다.

  • auth.yaml - 이 템플릿은 Amazon Cognito 및 AWS Systems Manager Parameter Store와 같은 인증 관련 리소스를 설정합니다.

  • product-mock.yaml - 이 템플릿은 Lambda 함수 및 Amazon API Gateway와 같은 제품 관련 리소스를 배포합니다.

  • shoppingcart-service.yaml - 이 템플릿은 AWS Identity and Access Management(IAM), DynamoDB 테이블 및 Lambda 함수와 같은 장바구니 관련 리소스 쇼핑을 설정합니다.

DevOps 엔지니어

상위 템플릿을 검토합니다.

중첩된 애플리케이션 템플릿을 호출할 템플릿을 검토합니다. 이 예제에서 상위 템플릿은 template.yml 입니다. 모든 개별 애플리케이션은 단일 상위 template.yml 템플릿에 중첩됩니다.

DevOps 엔지니어

AWS SAM 템플릿 코드를 컴파일 및 빌드합니다.

AWS SAM CLI를 사용하여 다음 명령을 실행합니다.

sam build
DevOps 엔지니어
작업설명필요한 기술

애플리케이션을 배포합니다.

중첩된 애플리케이션 CloudFormation 스택을 생성하고 AWS 환경에 코드를 배포하는 SAM 템플릿 코드를 실행하려면 다음 명령을 실행합니다.

sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

명령을 실행하면 몇 가지 질문이 표시됩니다. 모든 질문에 y(으)로 답변합니다.

DevOps 엔지니어
작업설명필요한 기술

스택을 확인합니다.

AWS SAM 템플릿에 정의된 AWS CloudFormation 스택과 AWS 리소스를 검토하려면 다음과 같이 하십시오.

  1. AWS 관리 콘솔에 로그인하고 콘솔로 이동합니다 CloudFormation.

  2. 상위 스택과 하위 스택이 나열되어 있는지 확인하세요.

    이 예제에서 sam-shopping-cart은(는) 중첩된 Auth, Product 및 Shopping 스택을 호출하는 상위 스택입니다.

    제품 스택은 Product API Gateway URL 링크를 출력으로 제공합니다.

DevOps 엔지니어

관련 리소스

참조

자습서 및 동영상

추가 정보

코드가 모두 준비되면 예제의 디렉터리 구조는 다음과 같습니다.

  • sam_stacks - 이 폴더에는 shared.py 계층이 포함되어 있습니다. 계층은 라이브러리, 사용자 지정 런타임 또는 기타 종속 항목을 포함하는 파일 아카이브입니다. 배포 패키지에 라이브러리를 포함시킬 필요 없이 계층을 통해 함수에서 라이브러리를 사용할 수 있습니다.

  • product-mock-service— 이 폴더에는 모든 제품 관련 Lambda 함수 및 파일이 들어 있습니다.

  • shopping-cart-service— 이 폴더에는 쇼핑과 관련된 모든 Lambda 함수 및 파일이 들어 있습니다.