를 사용하여 중첩된 애플리케이션 배포 자동화 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 서버리스 애플리케이션 리포지토리

요약

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

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

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

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

사전 조건 및 제한 사항

사전 조건 

  • 활성 AWS 계정

  • 기존 가상 프라이빗 클라우드(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

  • AWS Lambda

  • Amazon Simple Queue Service(AmazonSQS) 대기열

대상 아키텍처 

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

DynamoDB에서 항목이 추가, 삭제 또는 업데이트되면 이벤트가 DynamoDB Stream에 전달되면 Lambda 함수가 시작됩니다. 동기 워크플로의 일부로 이전 항목이 즉시 삭제되지 않도록 하기 위해 메시지가 SQS 대기열에 배치되어 작업자 함수를 시작하여 메시지를 삭제합니다.

POST Gateway에서 Lambda 함수API, DynamoDB 및 Product Service에 이르는 PUT 작업을 수행할 수 있습니다.

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

를 상위 스택과 3개의 하위 CloudFormation 스택과 AWS SAM CLI 함께 사용하는 4단계 프로세스입니다.
  1. 스택을 빌드하여 배포합니다.

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

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

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

도구

도구

  • Amazon API Gateway는 모든 규모의 , 및 WebSocket APIs REST를 생성, 게시, 유지 관리HTTP, 모니터링 및 보호하는 데 도움이 됩니다.

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

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

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

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

  • AWS 서버리스 애플리케이션 모델(AWS SAM)은 AWS 클라우드에서 서버리스 애플리케이션을 구축하는 데 도움이 되는 오픈 소스 프레임워크입니다.

  • Amazon Simple Queue Service(Amazon SQS)는 분산 소프트웨어 시스템 및 구성 요소를 통합하고 분리하는 데 도움이 되는 안전하고 내구성이 뛰어나며 사용 가능한 호스팅 대기열을 제공합니다.

code

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

에픽

작업설명필요한 기술

AWS SAM 를 설치합니다CLI.

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

DevOps 엔지니어

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

가 사용자를 대신하여 AWS 서비스에 전화를 걸 AWS SAM CLI 수 있도록 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 파라미터 스토어와 같은 인증 관련 리소스를 설정합니다.

  • 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 함수 및 파일이 포함되어 있습니다.