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

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

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

由 Rahul Sharad Gaikwad 博士创作 () AWS

摘要

此模式提供了 step-by-step一种使用 C AWS loud Development Kit (AWS) 在 Amazon Web Services (AWSCDK) 上部署应用程序的方法 TypeScript。例如,该模式部署无服务器实时分析应用程序。

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

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

  • AWSCDK已安装并配置工具包

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

  • Node.js

  • AWS命令行界面 (AWSCLI)

限制

  • 由于AWSCDK使用 AWS CloudFormation,因此AWSCDK应用程序受 CloudFormation 服务配额的约束。有关更多信息,请参阅 AWS CloudFormation 配额

产品版本

此模式已使用以下工具和版本构建和测试。

  • AWSCDK工具包 1.83.0

  • Node.js 14.13.0

  • npm 7.0.14

该模式应适用于AWSCDK或 npm 的任何版本。请注意,Node.js 13.0.0 到 13.6.0 版本与... 不兼容。AWS CDK

架构

目标技术堆栈

  • AWSAmplify 控制台

  • 亚马逊API网关

  • 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 with进行多堆栈应用程序部署。 TypeScript

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

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

该区域的应用程序架构。

工具

工具

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

  • Amazon API Gateway 是一项用于创建、发布、维护RESTHTTP、监控和保护的AWS服务,而且 WebSocket APIs规模不限。

  • AWSCloud Development Kit (AWSCDK) 是一个软件开发框架,可帮助您在代码中定义和配置AWS云基础架构。

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

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

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

  • Amazon DynamoDB 是一项完全托管的SQL无数据库服务,可提供快速、可预测的性能和无缝扩展。

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

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

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

  • Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。

代码

此模式代码已随附。

操作说明

任务描述所需技能

安装AWSCDK工具包。

要全局安装 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 数据流。

将您的AWS账户配置为使用 Amazon Kinesis 数据生成器 () 向 Kinesis Data Streams 发送数据KDG。有关更多信息,请参阅 Amazon Kinesis Data Generator

DevOps

创建 Amazon Cognito 用户。

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

输出选项卡列出了 Kinesis 数据生成器。URL

DevOps

登录至 Kinesis Data Generator

要登录KDG,请使用您提供的亚马逊 Cognito 凭证和 Kinesis 数据生成器。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