使用 AWSCDK搭配 部署多堆疊應用程式 TypeScript - AWS 方案指引

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

使用 AWSCDK搭配 部署多堆疊應用程式 TypeScript

由 Rahul Sharad Gaikwad 醫生建立 (AWS)

環境:生產

技術:現代化;遷移; DevOps

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

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

Summary

此模式提供使用 step-by-step AWS Cloud Development Kit ( AWS) 搭配 在 Amazon Web Services (AWSCDK) 上部署應用程式的方法 TypeScript。例如, 模式會部署無伺服器即時分析應用程式。

此模式會建置和部署巢狀堆疊應用程式。父AWS CloudFormation 堆疊會呼叫子堆疊或巢狀堆疊。 每個子堆疊都會建置和部署 CloudFormation 堆疊中定義的AWS資源。AWS CDK Toolkit 是命令列介面 (CLI) 命令 cdk, 是 CloudFormation 堆疊的主要介面。

先決條件和限制

先決條件

  • 作用中AWS帳戶

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

  • AWS CDK 已安裝和設定的工具組

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

  • Node.js

  • AWS 命令列介面 (AWS CLI)

限制

  • 由於 AWSCDK使用 AWS CloudFormation,AWSCDK應用程式受到 CloudFormation 服務配額的限制。如需詳細資訊,請參閱AWS CloudFormation 配額

產品版本

此模式已使用下列工具和版本建置和測試。

  • AWS CDK 工具組 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 主控台

  • Amazon API Gateway

  • AWS CDK

  • Amazon CloudFront

  • Amazon Cognito

  • Amazon DynamoDB

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • AWS Lambda

  • Amazon Simple Storage Service (Amazon S3)

目標架構

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

中的堆疊架構VPC,具有父堆疊和兩個包含 資源的子堆疊。

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

區域中的應用程式架構。

工具

工具

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

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

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

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

  • Amazon CloudFront 是一種 Web 服務,可加速靜態和動態 Web 內容的分發,例如 .html、.css、.js 和映像檔案。 透過稱為邊緣位置的全球資料中心網路 CloudFront 傳遞您的內容,以降低延遲並改善效能。

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

  • Amazon DynamoDB 是完全受管的無SQL資料庫服務,可提供快速且可預測的效能,並具有無縫的可擴展性。

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

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

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

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

Code

此模式的程式碼已連接。

史詩

任務描述所需的技能

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

cdk bootstrap <account>/<Region>

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

DevOps
任務描述所需的技能

建置專案。

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

DevOps

部署專案。

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

任務描述所需的技能

驗證堆疊建立。

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

DevOps
任務描述所需的技能

將資料傳送至 Kinesis Data Streams。

設定AWS您的帳戶,使用 Amazon Kinesis Data Generator () 將資料傳送至 Kinesis Data StreamsKDG。如需詳細資訊,請參閱 Amazon Kinesis Data Generator。

DevOps

建立 Amazon Cognito 使用者。

若要建立 Amazon Cognito 使用者,請從 Kinesis Data Generator 說明頁面建立 Amazon Cognito 使用者區段下載 cognito-setup.json CloudFormation 範本。啟動 範本,然後輸入您的 Amazon Cognito 使用者名稱和密碼

Outputs 索引標籤會列出 Kinesis Data Generator URL。

DevOps

登入 Kinesis Data Generator

若要登入 KDG,請使用您提供的 Amazon Cognito 憑證和 Kinesis Data Generator URL。

DevOps

測試應用程式。

在 KDG中,在記錄範本 範本 1 中,從其他資訊區段貼上測試碼,然後選擇傳送資料

DevOps

測試API閘道。

擷取資料後,請使用 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 維護;包括專案的相依性。

下一節的父堆疊程式碼會將子應用程式稱為巢狀AWSCDK堆疊。

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閘道

在API閘道主控台上,使用 GET方法測試API閘道。

API 在 下GET選擇的閘道主控台OPTIONS。

附件

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