使用具有 TypeScript 的 AWS CDK 部署多堆疊應用程式 - AWS Prescriptive Guidance

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用具有 TypeScript 的 AWS CDK 部署多堆疊應用程式

由拉胡爾·沙拉德·蓋克瓦德(AWS)創建

環境:生產

技術:現代化;移轉;DevOps 作業

工作負載:所有其他工作負載

AWS 服務:Amazon API Gateway; AWS Lambda; Amazon Kinesis

Summary

此模式為使用 AWS Cloud Development Kit (AWS CDK) 搭配 TypeScript,在 Amazon Web Services (AWS) 上部署應用程式提供逐步的方法。例如,病毒碼會部署無伺服器即時分析應用程式。

模式會建置和部署巢狀堆疊應用程式。父項 AWS CloudFormation 式堆疊會呼叫子項或巢狀堆疊。 每個子堆疊都會建置和部署 CloudFormation 堆疊中定義的 AWS 資源。AWS CDK 工具組,命令列界面 (CLI) 命令cdk,是 CloudFormation 形成堆棧的主要接口。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 現有虛擬私有雲端 (VPC) 和子網路

  • 安裝和設定 AWS CDK 工具組

  • 具有管理員權限和一組存取金鑰的使用者。

  • Node.js

  • AWS 命令列界面 (AWS CLI)

限制

  • 由於 AWS CDK 使用 AWS CloudFormation,因此 AWS CDK 應用程式會受到雲端形成服務配額的限制。如需詳細資訊,請參閱 AWS CloudFormation 配額

產品版本

這種模式已經使用以下工具和版本來構建和測試。

  • AWS 光碟測試工具組

  • Node.js 14.13.0

  • npm 7.0.14

該模式應該適用於任何版本的 AWS CDK 或 npm。請注意,Node.js 版本為 13.0.0 到 13.6.0 AWS 相容。

Architecture

目標技術堆疊

  • AWS Amplify 主控台

  • Amazon API Gateway

  • AWS CDK

  • Amazon CloudFront

  • Amazon Cognito

  • Amazon DynamoDB

  • Amazon Kinesis Data Firehose

  • Amazon Kinesis Data Streams

  • AWS Lambda

  • Amazon Simple Storage Service (Amazon S3)

目標架構

下圖顯示了使用 AWS CDK TypeScript 的多堆棧應用程序部署。

下圖顯示範例無伺服器即時應用程式的架構。

Tools

工具

  • AWS Amplify 主控台— AWS Amplify 主控台是 AWS 中全堆疊 Web 和行動應用程式部署的控制中心。Amplify 控制台託管提供了一個基於 git 的工作流程,用於託管全堆棧無服務器的 Web 應用程序並持續部署。管理員 UI 是前端 Web 和行動開發人員可在 AWS 主控台外建立和管理應用程式後端的視覺化介面。

  • Amazon API Gateway— Amazon API Gateway 是一種 AWS 服務,可讓您建立、發佈、維護、監控和保護任何規模的 REST、HTTP 和 WebSocket API。

  • AWS CDK— AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可在程式碼中定義雲端基礎設施並透過 AWS CloudFormation 佈建。

  • AWS CDK 工具組— AWS CDK 工具組、CLI 命令cdk是 AWS CDK 應用程式互動的主要工具。它會執行您的應用程式、詢問您定義的應用程式模型,以及產生和部署 AWS CDK 所產生的 AWS CloudFormation 範本。

  • Amazon CloudFront— Amazon CloudFront 是一種 Web 服務,可更快速發佈靜態與動態內容供使用者閱覽,例如 .html、.css、.js 和影像檔案。CloudFront 透過稱為節點的全球資料中心網路提供您的內容,以減少延遲並提高效能。

  • Amazon Cognito— Amazon Cognito 為您的 Web 和行動應用程式提供身分驗證、授權和使用者管理。您的使用者可透過使用者名稱和密碼直接登入,或透過第三方登入。

  • Amazon DynamoDB— Amazon DynamoDB 是全受管 NoSQL 資料庫服務,可提供快速且可預期的效能,以及無縫的可擴展性。

  • Amazon Kinesis Data Firehose— Amazon Kinesis Data Firehose 是一種全受管服務,可提供即時交付串流資料至 Amazon S3、Amazon Redshift、Amazon OpenSearch 服務、Splunk 和任何由支援第三方服務提供者所擁有的自訂 HTTP 端點或 HTTP 端點。

  • Amazon Kinesis Data Streams— Amazon Kinesis Data Streams 是一種服務,可即時收集並處理大型的資料記錄串流。

  • AWS Lambda— AWS Lambda 是一項運算服務,可支援執行程式碼,無需佈建或管理伺服器。Lambda 只有在需要時才會執行程式碼,可自動從每天數項請求擴展成每秒數千項請求。只需為使用的運算時間支付費用,一旦未執行程式碼,就會停止計費。

  • Amazon S3— Amazon Simple Storage Service (Amazon S3) 是網際網路儲存服務。此服務旨在降低開發人員進行網路規模運算的難度。

Code

此模式的代碼已附加。

Epics

任務描述所需技能
安裝 AWS CDK 工具組。

若要全域安裝 AWS CDK 工具組,請執行以下命令。

npm install -g aws-cdk

DevOps 作業
驗證版本。

若要驗證 AWS CDK 工具組版本,請執行以下命令。 

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 CloudFormation 範本部署到您要使用的帳戶和 AWS 區域,請執行下列命令。

cdk bootstrap <account>/<Region>

如需詳細資訊,請參閱 AWS 文件

DevOps 作業
任務描述所需技能
建置專案。

若要建置專案程式碼,請執行npm run build命令。

DevOps 作業
部署專案。

若要部署專案程式碼,請執行cdk deploy命令。

任務描述所需技能
驗證堆疊建立。

在 AWS 管理主控台上,選擇CloudFormation。在專案的堆疊中,確認已建立父堆疊和兩個子堆疊。

DevOps 作業
任務描述所需技能
將資料傳送至 Kinesis Data Streams。

設定您的 AWS 帳戶,以便使用 Amazon Kinesis 資料產生器 (KDG) 將資料傳送到 Kinesis Data Streams。如需詳細資訊,請參閱「」Amazon Kinesis Data Ginesis Data 產生器

DevOps 作業
建立 Amazon Cognito 使用者。

要創建一個 Amazon Cognito 用戶,請從建立 Amazon Cognito 使用者的區段Kinesis 資料產生器說明頁面。啟動範本,然後輸入您的 Amazon Cognito使用者名稱Password (密碼)

所以此輸出索引標籤會列出 Kinesis 資料產生器 URL。

DevOps 作業
登入 Kinesis 資料產生器

若要登入 KDG,請使用您提供的 Amazon Cognito 登入資料和 Kinesis 資料產生器 URL。

DevOps 作業
測試應用程式。

在 KDG 中,在記錄範例Template 1,請將測試程式碼貼上其他資訊區段,然後選擇傳送資料

DevOps 作業
測試 API Gateway。

資料已內嵌之後,請使用GET方法來擷取資料。

DevOps 作業

相關資源

References

其他資訊

目錄和檔案詳細資訊

這種模式設置了以下三個堆棧。

  • parent-cdk-stack.ts— 此堆疊做為父堆疊,並呼叫兩個子應用程式做為巢狀堆疊。 

  • real-time-analytics-poc-stack.ts— 此巢狀堆疊包含基礎結構和應用程式程式碼。

  • real-time-analytics-web-stack.ts— 此巢狀堆疊只包含靜態 Web 應用程式程式碼。

重要檔案及其功能

  • 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 主控台上,測試 API Gateway 使用GET方法。

Attachments

attachment.zip