使用 AWS CDK 來部署多堆疊應用程式 TypeScript - AWS 方案指引

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

使用 AWS CDK 來部署多堆疊應用程式 TypeScript

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

環境:生產

技術:現代化; 遷移; DevOps

工作負載:所有其他工作

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

Summary

此模 step-by-step 式為使用 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 應用程式會受到 CloudFormation 服務配額限制。如需詳細資訊,請參閱 AWS CloudFormation 配額

產品版本

此病毒碼已使用下列工具和版本建立並測試。

  • AWS CDK 工具包 1.83.0

  • Node.js 14.13.0

  • 故宮

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

架構

目標技術堆疊

  • AWS Amplify 控制台

  • Amazon API Gateway

  • AWS CDK

  • Amazon CloudFront

  • Amazon Cognito

  • Amazon DynamoDB

  • Amazon 數據 Firehose

  • Amazon Kinesis Data Streams

  • AWS Lambda

  • Amazon Simple Storage Service (Amazon S3)

目標架構

下圖顯示使用 AWS CDK 搭配使用的多堆疊應用程式部署。 TypeScript

VPC 中的堆疊架構。

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

該地區的應用程序體系結構。

工具

工具

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

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

  • AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。

  • AWS CDK 工具組是命令列雲端開發套件,可協助您與 AWS CDK 應用程式互動。cdkCLI 命令是與 AWS CDK 應用程式互動的主要工具。它會執行您的應用程式、詢問您定義的應用程式模型,以及產生和部署 AWS CDK 產生的 AWS CloudFormation 範本。

  • Amazon CloudFront 是一種網絡服務,可以加快靜態和動態網絡內容的分佈速度,例如 .html,.css,.js 和圖像文件。 CloudFront 透過稱為節點位置的全球資料中心網路傳遞您的內容,以降低延遲並提升效能。

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

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

  • Amazon 資料 Firehose 是一項全受管服務,可將即時串流資料交付到 Amazon S3、Amazon Redshift、亞馬遜服務、Splunk 等目的地,以及受支援的第三方 OpenSearch 服務供應商擁有的任何自訂 HTTP 端點或 HTTP 端點。

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

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

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

Code

此模式的代碼已附加。

史诗

任務描述所需技能

安裝 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 Data Streams 產生器 (KDG) 將資料傳送至 Kinesis 資料串流。如需詳細資訊,請參閱 Amazon Kinesis 資料產生器

DevOps

創建一個 Amazon Cognito 戶。

若要建立 Amazon Cognito 使用者,請從「Kinesis 資料產生器說明」頁面上的「建立 Amazon Cognito 使用者」區段下載認知設定 CloudFormation 範本。啟動範本,然後輸入您的 Amazon Cognito 使用者名稱密碼

輸出」標籤會列出 Kinesis 資料產生器 URL。

DevOps

登入 Kinesis 資料產生器

若要登入 KDG,請使用您提供的 Amazon Cognito 登入資料和 Kinesis 資料產生器 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— 此巢狀堆疊僅包含靜態 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 主控台上,使用GET方法測試 API Gateway。

附件

若要存取與此文件相關聯的其他內容,請解壓縮下列檔案:attachment.zip