AWS CDK를 사용하여 다중 스택 애플리케이션을 배포할 수 있습니다. TypeScript - 권장 가이드

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

AWS CDK를 사용하여 다중 스택 애플리케이션을 배포할 수 있습니다. TypeScript

작성자: Dr. Rahul Sharad Gaikwad(AWS)

환경: 프로덕션

기술: 현대화, 마이그레이션, DevOps

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

AWS 서비스: Amazon API Gateway; AWS Lambda; Amazon Kinesis

요약

이 패턴은 AWS Cloud Development Kit (AWS CDK) 와 함께 TypeScript 사용하여 Amazon Web Services (AWS) 에 애플리케이션을 배포하기 위한 step-by-step 접근 방식을 제공합니다. 예를 들어, 이 패턴은 서버리스 실시간 분석 애플리케이션을 배포합니다.

이 패턴은 중첩된 스택 애플리케이션을 빌드하고 배포합니다. 상위 AWS CloudFormation 스택은 하위 또는 중첩된 스택을 호출합니다.  각 하위 스택은 CloudFormation 스택에 정의된 AWS 리소스를 빌드하고 배포합니다. 명령줄 인터페이스 (CLI) cdk 명령인 AWS CDK Toolkit은 스택의 기본 인터페이스입니다. CloudFormation

사전 조건 및 제한 사항

사전 조건 

  • 활성 상태의 AWS 계정

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

  • AWS CDK Toolkit이 설치 및 구성됨

  • 관리자 권한이 있는 사용자 및 액세스 키 세트.

  • Node.js

  • AWS Command Line Interface(AWS CLI)

제한 사항

  • AWS CDK는 AWS를 CloudFormation 사용하기 때문에 AWS CDK 애플리케이션에는 CloudFormation 서비스 할당량이 적용됩니다. 자세한 내용은 AWS CloudFormation 할당량을 참조하십시오.

제품 버전

이 패턴은 다음 도구 및 버전을 사용하여 구축 및 테스트되었습니다.

  • AWS CDK Toolkit 1.83.0

  • Node.js 14.13.0

  • npm 7.0.14

이 패턴은 모든 버전의 AWS CDK 또는 npm에서 작동해야 합니다. 참고로 Node.js 버전 13.0.0부터 13.6.0까지는 AWS CDK와 호환되지 않습니다.

아키텍처

대상 기술 스택  

  • AWS Amplify Console

  • Amazon API Gateway

  • AWS CDK

  • 아마존 CloudFront

  • Amazon Cognito

  • Amazon DynamoDB

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • Lambda

  • Amazon Simple Storage Service (S3)

대상 아키텍처 

다음 다이어그램은 AWS CDK를 사용한 다중 스택 애플리케이션 배포를 보여줍니다. TypeScript

VPC의 스택 아키텍처, 상위 스택 하나와 리소스가 포함된 두 개의 하위 스택

다음 다이어그램은 예제 서버리스 실시간 애플리케이션의 아키텍처를 나타냅니다.

리전의 애플리케이션 아키텍처

도구

도구

  • AWS Amplify 콘솔은 AWS에서의 풀스택 웹 및 모바일 애플리케이션 배포를 위한 제어 센터입니다. Amplify Console 호스팅은 지속적인 배포로 풀스택 서버리스 웹 앱을 호스팅하기 위한 Git 기반 워크플로를 제공합니다. 관리 UI는 프런트엔드 웹 및 모바일 개발자가 AWS Console 외부에서 앱 백엔드를 만들고 관리할 수 있는 시각적 인터페이스입니다.

  • Amazon API Gateway는 모든 규모에서 REST, HTTP 및 WebSocket API를 생성, 게시, 유지 관리, 모니터링 및 보호하는 AWS 서비스입니다.

  • AWS Cloud Development Kit(AWS CDK)는 AWS 클라우드 인프라를 코드로 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.

  • AWS CDK 툴킷은 AWS CDK 앱과 상호 작용하는 데 도움이 되는 명령줄 클라우드 개발 키트입니다. cdk CLI 명령은 AWS CDK 앱과 상호 작용하는 기본 도구입니다. 앱을 실행하고, 정의한 애플리케이션 모델을 조사하고, AWS CDK에서 생성된 AWS CloudFormation 템플릿을 생성 및 배포합니다.

  • CloudFrontAmazon은 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠의 배포 속도를 높이는 웹 서비스입니다. CloudFront 지연 시간을 줄이고 성능을 향상시키기 위해 엣지 로케이션이라고 하는 전 세계 데이터 센터 네트워크를 통해 콘텐츠를 전송합니다.

  • Amazon Cognito는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다. 사용자가 직접 로그인하거나 타사를 통해 로그인할 수 있습니다.

  • Amazon DynamoDB는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다.

  • Amazon Data Firehose는 Amazon S3, Amazon Redshift, Amazon 서비스, Splunk 및 지원되는 타사 서비스 공급자가 소유한 사용자 지정 HTTP 엔드포인트 또는 HTTP 엔드포인트와 같은 대상에 실시간 스트리밍 데이터를 전송하는 완전 관리형 서비스입니다. OpenSearch

  • Amazon Kinesis Data Streams는 대규모 데이터 레코드 스트림을 실시간으로 수집하고 처리하는 서비스입니다.

  • AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

코드

이 패턴의 코드가 첨부되어 있습니다.

에픽

작업설명필요한 기술

AWS CDK Toolkit을 설치합니다.

AWS CDK Toolkit을 전역적으로 설치하려면 다음 명령을 실행합니다.

npm install -g aws-cdk

DevOps

버전을 확인합니다.

AWS CDK Toolkit 버전을 확인하려면 다음 명령을 실행하세요. 

cdk --version

DevOps
작업설명필요한 기술

보안 인증을 설정합니다.

보안 인증 정보를 설정하려면 aws configure 명령을 실행하고 프롬프트를 따르세요.

$aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:
DevOps
작업설명필요한 기술

첨부된 프로젝트 코드를 다운로드합니다.

디렉토리 및 파일 구조에 대한 자세한 내용은 추가 정보 섹션을 참고하십시오.

DevOps
작업설명필요한 기술

환경을 부트스트랩합니다.

사용하려는 계정 및 AWS 지역에 AWS CloudFormation 템플릿을 배포하려면 다음 명령을 실행합니다.

cdk bootstrap <account>/<Region>

자세한 내용은 설명서를 참조하십시오.

DevOps
작업설명필요한 기술

프로젝트를 빌드합니다.

프로젝트 코드를 빌드하려면 npm run build 명령을 실행하세요.

DevOps

프로젝트를 배포합니다.

프로젝트 코드를 배포하려면 cdk deploy 명령을 실행하세요.

작업설명필요한 기술

스택 생성을 확인합니다.

AWS 관리 콘솔에서 을 선택합니다 CloudFormation. 프로젝트의 스택에서 상위 스택과 두 개의 하위 스택이 생성되었는지 확인합니다.

DevOps
작업설명필요한 기술

Kinesis Data Streams로 데이터를 전송합니다.

Amazon Kinesis Data Generator(KDG)를 사용하여 Kinesis Data Streams으로 데이터를 전송하도록 AWS 계정을 구성합니다. 자세한 내용은 Amazon Kinesis Data Generator를 참조하세요.

DevOps

Amazon Cognito 사용자를 생성합니다.

Amazon Cognito 사용자를 생성하려면 Kinesis 데이터 생성기 도움말 페이지의 Amazon Cognito 사용자 생성 섹션에서 cognito-setup.json CloudFormation 템플릿을 다운로드하십시오. 템플릿을 시작한 다음 Amazon Cognito 사용자 이름암호를 입력합니다.

출력 탭에는 Kinesis Data Generator URL이 나열됩니다.

DevOps

Kinesis Data Generator에 로그인

KDG에 로그인하려면 제공한 Amazon Cognito 보안 인증 정보와 Kinesis Data Generator URL을 사용하십시오.

DevOps

애플리케이션을 테스트합니다.

KDG의 레코드 템플릿, 템플릿 1에서 추가 정보 섹션의 테스트 코드를 붙여넣고 데이터 보내기를 선택합니다.

DevOps

API Gateway를 테스트합니다.

데이터를 수집한 후에는 GET 메서드를 사용하여 데이터를 검색하여 API Gateway를 테스트합니다.

DevOps

관련 리소스

참조

추가 정보

디렉터리 및 파일 세부 정보

이 패턴은 다음 세 개의 스택을 설정합니다.

  • parent-cdk-stack.ts - 이 스택은 상위 스택 역할을 하며 두 하위 애플리케이션을 중첩된 스택으로 호출합니다. 

  • real-time-analytics-poc-stack.ts - 이 중첩된 스택에는 인프라 및 애플리케이션 코드가 포함됩니다.

  • real-time-analytics-web-stack.ts - 이 중첩된 스택에는 정적 웹 애플리케이션 코드만 포함됩니다.

중요 파일 및 해당 기능

  • bin/real-time-analytics-poc.ts - AWS CDK 애플리케이션의 엔트리 포인트. lib/에서 정의된 모든 스택을 로드합니다.

  • lib/real-time-analytics-poc-stack.ts - AWS CDK 애플리케이션 스택의 정의(real-time-analytics-poc).

  • lib/real-time-analytics-web-stack.ts - AWS CDK 애플리케이션 스택의 정의(real-time-analytics-web-stack).

  • lib/parent-cdk-stack.ts - AWS CDK 애플리케이션 스택의 정의(parent-cdk).

  • package.json - 애플리케이션 이름, 버전 및 종속성을 포함하는 npm 모듈 매니페스트.

  • package-lock.json - npm에서 유지 관리합니다.

  • cdk.json - 애플리케이션 실행을 위한 툴킷.

  • tsconfig.json— 프로젝트 TypeScript 구성.

  • .gitignore - Git이 소스 제어에서 제외해야 하는 파일 목록입니다.

  • node_modules - npm에서 유지 관리합니다. 프로젝트의 종속성을 포함합니다.

상위 스택의 다음 코드 섹션은 하위 애플리케이션을 중첩된 AWS CDK 스택으로 호출합니다.

import * as cdk from '@aws-cdk/core'; import { Construct, Stack, StackProps } from '@aws-cdk/core'; import { RealTimeAnalyticsPocStack } from './real-time-analytics-poc-stack'; import { RealTimeAnalyticsWebStack } from './real-time-analytics-web-stack'; export class CdkParentStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new RealTimeAnalyticsPocStack(this, 'RealTimeAnalyticsPocStack'); new RealTimeAnalyticsWebStack(this, 'RealTimeAnalyticsWebStack'); } }

테스트용 코드

session={{date.now('YYYYMMDD')}}|sequence={{date.now('x')}}|reception={{date.now('x')}}|instrument={{random.number(9)}}|l={{random.number(20)}}|price_0={{random.number({"min":10000, "max":30000})}}|price_1={{random.number({"min":10000, "max":30000})}}|price_2={{random.number({"min":10000, "max":30000})}}|price_3={{random.number({"min":10000, "max":30000})}}|price_4={{random.number({"min":10000, "max":30000})}}|price_5={{random.number({"min":10000, "max":30000})}}|price_6={{random.number({"min":10000, "max":30000})}}|price_7={{random.number({"min":10000, "max":30000})}}|price_8={{random.number({"min":10000, "max":30000})}}|

API Gateway 테스트

API Gateway 콘솔에서 GET 메서드를 사용하여 API Gateway 콘솔을 테스트합니다.

옵션에서 GET을 선택한 API Gateway 콘솔

첨부

이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.