本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用和部署多堆栈应用程序 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
下图显示了示例无服务器实时应用程序架构。
工具
工具
AWSAmplify Console 是中全栈网络和移动应用程序部署的控制中心。AWSAmplify Console hosting 提供了基于 Git 的工作流程,用于托管持续部署的全栈无服务器 Web 应用程序。管理员用户界面是一个可视化界面,供前端 Web 和移动开发人员在控制台之外创建和管理应用程序后端。AWS
Amazon API Gateway 是一项用于创建、发布、维护RESTHTTP、监控和保护的AWS服务,而且 WebSocket APIs规模不限。
AWSCloud Development Kit (AWSCDK) 是一个软件开发框架,可帮助您在代码中定义和配置AWS云基础架构。
AWSCDKToolkit 是一个命令行云开发套件,可帮助您与AWSCDK应用程序进行交互。该
cdk
CLI命令是与您的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,请运行以下命令。
| DevOps |
验证 版本。 | 要验证 AWS CDK Toolkit 版本,请运行以下命令。
| DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
设置凭证。 | 若要设置凭证,请运行
| DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
下载随附的项目代码。 | 有关目录和文件结构的更多信息,请参阅其他信息部分。 | DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
引导环境。 | 要将AWS CloudFormation 模板部署到您要使用的账户和AWS区域,请运行以下命令。
有关更多信息,请参阅 AWS 文档。 | DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
构建 项目。 | 若要构建项目代码,请运行 | DevOps |
部署项目。 | 若要部署项目代码,请运行 |
任务 | 描述 | 所需技能 |
---|---|---|
验证堆栈创建。 | 在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 模板。 输出选项卡列出了 Kinesis 数据生成器。URL | DevOps |
登录至 Kinesis Data Generator | 要登录KDG,请使用您提供的亚马逊 Cognito 凭证和 Kinesis 数据生成器。URL | DevOps |
测试应用程序。 | 在 KDG “记录模板,模板 1” 中,粘贴 “其他信息” 部分的测试代码,然后选择 “发送数据”。 | DevOps |
测试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 维护;包括项目的依赖项。
父堆栈中的下一部分代码将子应用程序调用为嵌套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网关。
附件
要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip