使用 AWS CDK 部署多堆栈应用程序 TypeScript - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS CDK 部署多堆栈应用程序 TypeScript

由 Rahul Sharad Gaikwad 博士 (AWS) 编写

环境:生产

技术:现代化;迁移; DevOps

工作负载:所有其他工作负载

Amazon Web Services: Amazon API Gateway;AWS Lambda;Amazon Kinesis

Summary

此模式提供了 step-by-step 一种使用 AWS Cloud Development Kit (AWS CDK) 在亚马逊网络服务 (AWS) 上部署应用程序的方法。 TypeScript例如,该模式部署无服务器实时分析应用程序。

此模式可构建和部署嵌套堆栈应用程序。父 AWS CloudFormation 堆栈调用子堆栈或嵌套堆栈。 每个子堆栈都构建和部署堆 CloudFormation 栈中定义的 AWS 资源。AWS CDK Toolkit,即命令行界面 (CLI) 命令cdk,是 CloudFormation 堆栈的主要接口。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 现有虚拟私有云(VPC)和子网

  • AWS CDK Toolkit 已安装并配置

  • 具有管理员权限且配备一组访问密钥的用户。

  • Node.js

  • AWS 命令行界面(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。请注意,13.0.0 至 13.6.0 版本的 Node.js 与 AWS CDK 不兼容。

架构

目标技术堆栈

  • AWS Amplify Console

  • 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)

目标架构

下图显示了使用带有 AWS CDK 的多堆栈应用程序部署。 TypeScript

VPC 中的堆栈架构,包含一个父堆栈和两个包含资源的子堆栈。

下图显示了示例无服务器实时应用程序架构。

该区域的应用程序架构。

工具

工具

  • AWS Amplify Console 是在 AWS 中部署全栈网络和移动应用程序的控制中心。Amplify Console hosting 提供了基于 Git 的工作流程,用于托管持续部署的全栈无服务器 Web 应用程序。管理用户界面是一个为前端 Web 和移动开发人员提供的可视化界面,使其可以在 Amazon Web Services Console 外部创建和管理应用程序后端。

  • A@@ mazon API Gateway 是一项 AWS 服务,用于创建、发布、维护、监控和保护任何规模的 REST、HTTP 和 WebSocket API。

  • AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义和预调配 Amazon Web Services Cloud 基础设施。

  • AWS CDK Toolkit 是一个命令行云开发套件,可帮助您与 AWS CDK 应用程序进行交互。cdkCLI 命令是与 AWS CDK 应用程序交互的主要工具。它运行您的应用程序,查询您定义的应用程序模型,并生成和部署由 AWS CDK 生成的 AWS CloudFormation 模板。

  • 亚马逊 CloudFront是一项网络服务,可加快静态和动态网页内容(例如.html、.css、.js 和图像文件)的分发。 CloudFront 通过名为边缘位置的全球数据中心网络提供内容,以降低延迟并提高性能。

  • Amazon Cognito 为您的 Web 和移动应用程序提供身份验证、授权和用户管理。您的用户可以直接登录,也可通过第三方登录。

  • Amazon DynamoDB 是一种全托管 NoSQL 数据库服务,提供快速而可预测的性能,能够实现无缝扩展。

  • Amazon Data Firehose 是一项完全托管的服务,用于向亚马逊 S3、亚马逊 Redshift、 OpenSearch 亚马逊服务、Splunk 等目的地以及受支持的第三方服务提供商拥有的任何自定义 HTTP 终端节点或 HTTP 终端节点提供实时流式传输数据

  • Amazon Kinesis Data Streams 是一项实时收集和处理大型数据记录流的服务。

  • AWS Lambda 是一项计算服务,支持无需预置或管理服务器即可运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩缩,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 - 代码未运行时不产生费用。

  • Amazon Simple Storage Service (Amazon 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 CloudFormation 模板部署到您要使用的账户和 AWS 区域,请运行以下命令。

cdk bootstrap <account>/<Region>

有关更多信息,请参阅 AWS 文档

DevOps
任务描述所需技能

构建 项目。

若要构建项目代码,请运行 npm run build 命令。

DevOps

部署项目。

若要部署项目代码,请运行 cdk deploy 命令。

任务描述所需技能

验证堆栈创建。

在 AWS 管理控制台上,选择CloudFormation。在项目的堆栈中,验证是否已创建了一个父堆栈和两个子堆栈。

DevOps
任务描述所需技能

将数据发送至 Kinesis 数据流。

配置您的 Amazon Web Services account,以使用 Amazon Kinesis Data Generator (KDG) 将数据发送至 Kinesis Data Streams。有关更多信息,请参阅 Amazon Kinesis Data Generator

DevOps

创建 Amazon Cognito 用户。

要创建 Amazon Cognito 用户,请从 Kinesis 数据生成器帮助页面的 “创建亚马逊 Cognito 用户” 部分下载 cognito-setup.j CloudFormation son 模板。初始化模板,然后输入 Amazon Cognito 用户名密码

输出选项卡列出了 Kinesis Data Generator URL。

DevOps

登录至 Kinesis Data Generator

若要登录 KDG,请使用您提供的 Amazon Cognito 凭证和 Kinesis Data Generator URL。

DevOps

测试应用程序。

在 KDG 的记录模板模板 1 中,粘贴其他信息部分中的测试代码,然后选择发送数据

DevOps

测试 API 网关。

提取数据后,使用 GET 方法检索数据,以测试 API 网关。

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 网关

在 API Gateway 控制台上,使用 GET 方法测试 API Gateway。

API Gateway 控制台,在 “选项” 下选择 GET。

附件

要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip