ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AWS 文档示例仓库 resources/cdk 目录详解:用 AWS CDK 一键预置跨服务示例资源

AWS 文档示例仓库 resources/cdk 目录详解:用 AWS CDK 一键预置跨服务示例资源 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文围绕 resources/cdk/README.md 展开系统梳理该目录下 21 个 AWS CDK 应用的用途与资源清单并结合仓库内每个应用的setup.ts/*.ts源码、package.json与cdk.json配置文件讲解如何用一条npm install cdk synth cdk deploy命令为跨语言示例Ruby、Go、JavaScript、Python 等预置 IAM、CloudWatch、Cognito、Comprehend、DynamoDB、Lex、SNS、SQS、S3、Translate 等 AWS 资源。读完本文你将掌握每个 CDK 应用建了什么资源、为什么这么建、CDK v1/v2 两种源码写法、以及通过 CDK CLI、AWS CLI 或 CloudFormation 控制台三种方式部署与销毁资源的完整流程。概览这些 CDK 应用服务的语言与 AWS 服务矩阵resources/cdk目录下的 CDK 应用并不属于某一种特定语言而是为仓库内多个语言的示例代码提供前置基础设施覆盖的服务包括AWS Identity and Access ManagementIAMAmazon CloudWatchCloudWatchAmazon CognitoAmazon ComprehendAmazon DynamoDBDynamoDBAmazon LexAmazon Simple Notification ServiceAmazon SNSAmazon Simple Queue ServiceAmazon SQSAmazon Simple Storage ServiceAmazon S3Amazon Translate从仓库目录结构看绝大多数应用采用统一的package.json cdk.json tsconfig.json setup.ts四件套布局如 dynamodb-item-tracker少部分早期 Ruby 示例应用直接以应用名命名入口文件如 dynamodb_ruby_example_create_movies_table/dynamodb_ruby_example_create_movies_table.ts。可以推断这是仓库为不同时期、不同语言的示例统一准备的环境搭建层让示例代码可以专注演示 SDK 调用而不必在文档中逐一手写控制台步骤。CDK 应用逐个解析每个应用创建了哪些资源下面按文档中的顺序逐条展开并补充对应的源码依据。每个应用的setup.ts或同名.ts即其核心定义文件。dynamodb_ruby_example_create_movies_table创建 DynamoDB 表创建一张 DynamoDB 表。对应源码dynamodb_ruby_example_create_movies_table.ts。源码中表的定义非常典型可以直接作为建表参考const table new dynamodb.Table(this, table, { tableName: Movies, partitionKey: { name: year, type: dynamodb.AttributeType.NUMBER, }, sortKey: { name: title, type: dynamodb.AttributeType.STRING, }, readCapacity: 10, writeCapacity: 10, removalPolicy: cdk.RemovalPolicy.DESTROY, });要点说明表名Movies分区键yearNUMBER、排序键titleSTRING对应 Ruby 示例 dynamodb_ruby_example_create_movies_table.rb 中的电影表结构readCapacity/writeCapacity固定为 10采用按量付费前的老式预置吞吐模式removalPolicy: cdk.RemovalPolicy.DESTROY表示销毁栈时连表一起删除适合示例环境栈通过new cdk.CfnOutput(this, TableName, ...)输出表名供后续脚本读取。dynamodb-ruby-example-create-users-table创建 DynamoDB 表创建一张 DynamoDB 表用户表入口文件为 dynamodb-ruby-example-create-users-table.ts。go_example_lambdaS3 DynamoDB SNS SQS Lambda 通知链路创建 Amazon S3 桶、DynamoDB 表、SNS 主题、SQS 队列额外创建指向这些资源的变更通知 Lambda 函数以及用 Go 编写的处理器把消息打印到 CloudWatch 日志。这是文档中少有的资源 函数 通知链路一体化应用S3、DynamoDB 的变化事件通过 SNS/SQS 进入 LambdaGo handler 消费后在 CloudWatch 输出日志可用于演示事件驱动架构。go-apprunnerDocker 容器 IAM 角色创建一个 Docker 容器创建 IAM 角色使 Go 应用能够在容器内运行AWS App Runner 场景。iam-ruby-example-add-new-user创建 IAM 用户创建一个 IAM 用户入口为 iam-ruby-example-add-new-user.ts。javascript_example_code_polly_aws_servicePolly 未认证角色 Cognito 身份池创建一个 IAM 未认证角色unauthenticated role拥有 Amazon Polly 的完全访问权限创建一个 Amazon Cognito 身份池并把该未认证角色绑定到身份池。对应源码 setup.ts 展示了身份池 联合主体角色的标准写法const myIdentityPool new cognito.CfnIdentityPool(this, ExampleIdentityPool, { allowUnauthenticatedIdentities: true, }); const unauthenticatedRole new iam.Role(this, CognitoDefaultUnauthenticatedRole, { assumedBy: new iam.FederatedPrincipal( cognito-identity.amazonaws.com, { StringEquals: { cognito-identity.amazonaws.com:aud: myIdentityPool.ref }, ForAnyValue:StringLike: { cognito-identity.amazonaws.com:amr: unauthenticated }, }, sts:AssumeRoleWithWebIdentity ), }); unauthenticatedRole.addToPolicy(new PolicyStatement({ effect: Effect.ALLOW, actions: [polly:SynthesizeSpeech], resources: [*], }));理解要点允许未认证身份allowUnauthenticatedIdentities: true即用户无需登录即可匿名使用语音合成角色通过FederatedPrincipal信任cognito-identity.amazonaws.com并限制amr为unauthenticated策略只放行polly:SynthesizeSpeech遵循最小权限原则这是示例环境的典型做法。javascript_example_code_transcribe_demo带认证用户的转写应用创建带认证用户角色的 Cognito 身份池创建 IAM 策略授予认证角色访问 Amazon S3 与 Amazon Transcribe 的权限创建 Cognito 用户池user pool支持用户注册和登录创建两个 S3 桶一个托管应用文件一个存放转写结果。javascript_example_lambda_aws_service公开 S3 Lambda 权限角色 身份池创建一个 S3 桶桶内对象允许公开访问创建一个基于 AWS 身份的 IAM 未认证角色拥有创建 DynamoDB 表、调用 Lambda 函数、上报移动分析事件的权限创建 Cognito 身份池并绑定该角色。对应源码 setup.ts用于 Tutorial: Creating and using Lambda functions 系列教程的前置环境。kinesis-example-create-streamKinesis 流 身份池 IAM 角色创建 Amazon Kinesis 数据流创建 Cognito 身份池创建 IAM 角色。kinesis-iam-unauthenticated-role身份池 IAM 角色创建 Cognito 身份池创建 IAM 角色。与上一个应用相比不创建 Kinesis 流本身适用于只需要身份授权的场景。lambda_api_step_functions身份池 IAM 角色 Step Functions创建 Cognito 身份池创建 IAM 角色创建一个 AWS Step Functions 状态机实例。lambda_using_api_gatewayDynamoDB Lambda 执行角色 S3 托管桶创建 DynamoDB 表创建 IAM 角色附带执行 Lambda 函数的权限创建 S3 桶用于托管 Lambda 函数。lambda_using_scheduled_eventsS3 IAM 角色 DynamoDB创建 S3 桶创建 IAM 角色创建 DynamoDB 表。对应源码 setup.ts 是 CDK v1 时代非常完整的示例创建了允许公开访问策略的mybucket桶、信任lambda.amazonaws.com的角色myLambdaRole策略覆盖 CloudWatch 日志、SNS、DynamoDB/DAX/自动扩缩容等大权限集以及一张名为Employees的表分区键idNUMBER、排序键firstNameSTRING并额外添加了全局二级索引FirstNameIndex读 5 / 写 10。栈最后输出TableName、Bucket name、IAM role三个 CfnOutput。lex_bot_example_iam_unauth_roleComprehend/Translate/Lex 未认证角色创建 IAM 未认证角色具备 Amazon Comprehend、Amazon Translate 和 Amazon Lex 的权限。messaging-app-unauthenticated-role-sqs-fifo-queueSQS 权限角色 FIFO 队列创建 IAM 未认证角色具备 Amazon SQS 权限创建一个 Amazon SQS FIFOFirst In First Out队列。python_example_code_apigateway_aws_service带 username 分区键的表 API Gateway 角色创建一张以username为分区键的 DynamoDB 表创建 IAM 角色使 Amazon API Gateway 能对表进行读写。对应源码 setup.ts服务于 python/example_code/apigateway/aws_service 示例。python_example_code_apigateway_websocketWebSocket 聊天后端全套创建一张以connection_id为主键的 DynamoDB 表创建 IAM 角色与策略授予 Lambda 访问该表并运行函数的基础权限创建运行于 Python 3.9 的 Lambda 函数其环境变量保存表名函数代码在示例部署阶段被替换。对应源码 setup.tsconst table new Table(this, doc-example-websocket-chat, { tableName: doc-example-websocket-chat, partitionKey: { name: connection_id, type: AttributeType.STRING }, removalPolicy: cdk.RemovalPolicy.DESTROY, }); const role new Role(this, doc-example-apigateway-websocket-chat, { roleName: doc-example-apigateway-websocket-chat, assumedBy: new ServicePrincipal(lambda.amazonaws.com), }); role.addToPolicy(new PolicyStatement({ effect: Effect.ALLOW, resources: [table.tableArn], actions: [dynamodb:DeleteItem, dynamodb:GetItem, dynamodb:PutItem, dynamodb:Scan], })); const fn new Function(this, doc-example-apigateway-websocket-connect, { runtime: Runtime.PYTHON_3_9, handler: lambda_chat.lambda_handler, code: Code.fromInline(# This placeholder is replaced during code example deployment.), environment: { table_name: table.tableName }, role: role, });注释中明确该栈服务于 python/example_code/apigateway/websocket 示例connection_id主键用于 WebSocket 连接管理Lambda 占位代码在示例部署时替换为真实聊天处理逻辑。python_example_code_secretsmanager_demoAurora Serverless 集群创建一个 Amazon Aurora Serverless 集群。对应源码 setup.ts该应用目录为aurora_serverless_app但服务于 secretsmanager 演示。值得展开的是它演示了Secrets Manager 密文 Aurora 集群的完整搭配在 Secrets Manager 中创建名为doc-example-aurora-app-secret的密钥secretStringTemplate写入{username: docexampleadmin}generateStringKey: password自动生成密码excludePunctuation: true排除标点、includeSpace: false不含空格使用默认 VPC创建 Aurora PostgreSQL 15.5 集群DatabaseClusterEngine.auroraPostgres数据库名auroraappdb开启 Data APIenableDataApi: true并配置 Serverless v2 容量最小 0.5、最大 8 ACU写入者节点使用ClusterInstance.serverlessV2凭证直接引用上述 SecretCredentials.fromSecret栈输出SecretArn、ClusterArn、DbName三个值供 RDS Data Service 执行 SQL 使用。python_example_code_stepfunctions_demousername 表 API Gateway 角色创建一张以username为分区键的 DynamoDB 表创建 IAM 角色使 API Gateway 能读写该表。rekognition-sns-video-analyzer视频分析三件套创建 IAM 未认证角色具备 Amazon SQS、Amazon S3、Amazon Rekognition 权限创建 S3 桶创建 SNS 主题。rekognition-unauthroleIAM 角色 身份池创建 IAM 角色创建 Cognito 身份池。s3-ruby-example-create-bucket创建 S3 桶创建一个 Amazon S3 桶入口文件为 s3-ruby-example-create-bucket.ts。submit-data-app-unauthenticated-role数据提交应用基础件创建 DynamoDB 表创建 Cognito 身份池创建 IAM 角色。textract_example_s3_sns_sqsTextract 异步文档处理管道创建 S3 桶授予 Amazon Textract 读写权限创建 SNS 主题创建 IAM 角色可被 Textract 代入assume并授予向主题发布的权限创建 SQS 队列订阅该主题以接收消息。textract_example_s3_sns_sqs_cognito管道 Cognito 认证版在上一个应用的基础上额外创建Cognito 用户池、身份池以及认证用户角色认证用户角色授予访问 Amazon Textract、SQS 队列和 S3 桶的权限。这是文档中资源最完整的应用对应源码 setup.ts 展示了异步 OCR 管道 Web 前端登录的完整基建值得细读S3 桶textract-cognito-demo-bucket强制 SSLenforceSSL: true配置 CORS 允许跨域 GET用bucket.grantReadWrite(textract)一句代码完成桶授予 Textract 读写SNS 主题textract-cognito-demo-topic使用alias/aws/sns默认 KMS 主密钥并通过SqsSubscription把 SQS 队列textract-cognito-demo-queue订阅进来角色textractRole信任textract.amazonaws.comtopic.grantPublish(textractRole)授予发布权限Cognito 用户池开启自助注册、邮箱自动验证客户端 OAuth 回调地址为http://localhost:3000托管 UI 域前缀textract-demo身份池allowUnauthenticatedIdentities: false只允许认证用户认证角色挂载AmazonTextractFullAccess托管策略并附加sqs:ReceiveMessage/DeleteMessage限定队列 ARN与s3:GetObject限定桶 ARN最小权限栈输出DeployRegion、DefaultBucketName、SNSTopicArn、RoleArn、QueueUrl、CognitoId、CognitoUserPoolId、CognitoIdentityPoolId、LoginUrl共 9 个值其中LoginUrl直接生成托管 UI 的完整登录链接含client_id、response_typetoken、scope 与回调地址。transcribe-streaming-unauth-role流式转写未认证角色创建 IAM 未认证角色权限如下Amazon SESSendEmailAmazon TranscribeStartStreamTranscriptionWebSocketAmazon ComprehendDetectDominantLanguageAmazon TranslateTranslateText对应源码 setup.ts 中角色通过addToPolicy依次加入四个PolicyStatement与文档列出的权限一一对应栈最后输出Identity pool id。该应用适合匿名用户实时语音转写 语种识别 翻译 邮件通知的前端演示。项目的统一工程结构每个 CDK 应用目录里有什么尽管各应用建的资源不同目录结构高度一致。以 dynamodb-item-tracker 为例setup.tsTypeScript 编写的栈定义声明式描述要创建的资源package.json声明依赖与脚本cdk: cdk提供npm run cdk快捷方式cdk.json告诉 CDK CLI 如何启动应用app: npx ts-node --prefer-ts-exts setup.ts并携带aws-cdk/core:enableStackNameDuplicates、aws-cdk:enableDiffNoFail等上下文开关tsconfig.jsonTypeScript 编译配置target ES2018、commonjs、strict 等部分应用额外提交了setup.yamlcdk synth生成的 CloudFormation 模板与package-lock.json。从依赖版本还可以看出仓库存在两代 CDK 写法CDK v1多数应用依赖aws-cdk/core、aws-cdk/aws-dynamodb等分模块包版本锁定在1.x如 dynamodb_ruby_example_create_movies_table/package.json 中aws-cdk: 1.87.1、aws-cdk/core: 1.87.1CDK v2较新应用如 dynamodb-item-tracker/package.json、aurora_serverless_app统一依赖aws-cdk-lib与constructs^2.8.0、^10.0.38源码从aws-cdk-lib导入App、Stack、Table等。两种写法只在导入与包管理上不同栈定义的语义一致。CDK v1 示例需按仓库内package.json锁定的版本安装CDK v2 示例则使用现代aws-cdk-lib单包。如何运行这些 CDK 应用三种部署路径文档的 Running a CDK app 部分给出了统一运行说明关键输入如下需在代码中替换CLOUDFORMATION_TEMPLATE_NAME例如setup.yamlSTACK_NAME例如myDynamoDBStack。无论哪种方式前提都是本机已配置好 AWS 凭证与默认 Region并在对应应用目录内执行命令。方式一直接用 AWS CDK 部署进入任一应用目录后执行npm install cdk synth cdk deploynpm install安装 CDK 及依赖模块版本以各应用package.json为准cdk synth将 TypeScript 栈定义合成为 CloudFormation 模板可先在本地检查不产生真实资源cdk deploy真正创建资源CDK 会在输出中显示所创建资源的名称。资源使用完毕执行销毁cdk destroy注意某些情况下 CDK 无法销毁资源例如 S3 桶非空时。示例中的桶通常显式设置了RemovalPolicy.DESTROY但桶内对象仍需自行清空。方式二借助 AWS CLI 走 CloudFormation如果不想安装/使用 CDK CLI可以把合成的模板交给 AWS CLI 管理生成 CloudFormation 模板npm install cdk synth CLOUDFORMATION_TEMPLATE_NAME基于模板创建堆栈此时才真正创建 AWS 资源aws cloudformation create-stack --template-body file:CLOUDFORMATION_TEMPLATE_NAME --stack-name STACK_NAME查看生成资源的名称aws cloudformation describe-stacks --stack-name STACK_NAME --query Stacks[0].Outputs --output text注意资源可能不会立刻可用可以重复执行该命令直到看到资源名。这正是栈中大量CfnOutput存在的意义——Outputs区域集中暴露表名、桶名、ARN、队列 URL、身份池 ID 等关键信息供示例脚本和后续查询使用。用完后销毁堆栈aws cloudformation delete-stack --stack-name STACK_NAME注意与 CDK 方式相同当 S3 桶非空等情况下无法删除资源。方式三通过 AWS CloudFormation 控制台适合希望可视化操作的用户同样先合成模板npm install cdk synth CLOUDFORMATION_TEMPLATE_NAME登录 AWS CloudFormation 控制台https://console.aws.amazon.com/cloudformation选择Create stack按屏幕指引以上述模板创建堆栈堆栈会创建对应的 AWS 资源堆栈状态变为CREATE_COMPLETE后资源名称显示在控制台的Outputs标签页用完后在控制台选中该堆栈选择Delete并按指引操作以销毁资源。注意与以上两种方式相同S3 桶非空等情况下堆栈无法被删除。三种方式怎么选方式核心命令适用场景CDK CLIcdk synth cdk deploy/cdk destroy开发者本地快速搭建与反复迭代AWS CLIaws cloudformation create-stack/delete-stackCI/CD 脚本化、无 CDK 环境的服务器CloudFormation 控制台界面操作 Create stack / Delete可视化审查资源、团队协作排障在仓库中的配套使用CDK 应用与示例代码的联动这些 CDK 应用在仓库中承担环境预置角色运行后产生的资源名表名、桶名、ARN、身份池 ID 等被后续语言示例直接消费。例如textract_example_s3_sns_sqs_cognito 栈明确注释服务于 javascriptv3/example_code/cross-services/textract-reactpython_example_code_apigateway_websocket 栈服务于 python/example_code/apigateway/websocketaurora_serverless_app 栈服务于 python/example_code/secretsmanager 演示Ruby 系列建表、建用户、建桶则直接对应 ruby/example_code 下的同名示例。工作流是先用 CDK 一次性把基础设施铺好再从控制台 Outputs / CLI 查询拿到资源标识最后运行语言示例代码完成业务演示——这也是文档标题 About these AWS CDK apps 的核心含义。若某次示例需要完全重置环境重新执行cdk deploy前先cdk destroy并确保清空桶内对象即可。小结与最佳实践以代码即基础设施IaC的方式准备示例环境21 个 CDK 应用覆盖从单表到Textract 管道 Cognito 认证的多种组合一次部署即可复现文档示例所需的全部 AWS 资源注意权限最小化与清理多数角色策略只放行示例所需 API桶与表均设RemovalPolicy.DESTROY由于存在桶非空无法销毁等限制建议演示结束后及时清理资源以避免持续计费两种 CDK 版本并存阅读源码时先看package.json判断是 v1aws-cdk/*还是 v2aws-cdk-lib再对照导入语句理解栈定义CfnOutput 是资源交接的桥梁每个应用都以CfnOutput输出资源标识部署后无论用 CDK 输出、CLI 查询还是控制台 Outputs 标签页都能快速取得后续示例所需的值。以上内容均可在仓库中逐一核对资源清单见 resources/cdk/README.md栈定义见各应用的setup.ts/ 同名.ts文件运行方式与依赖见各应用package.json、cdk.json合成产物见各应用的setup.yaml。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐10分钟上手AWS CDK从零开始的云基础设施代码化完整指南10分钟上手AWS CDK从零开始的云基础设施代码化完整指南 AWS CDKCloud Development Kit是AWS推出的基础设施即代码IaC用 AWS CDK 为 JavaScript (v3) Kinesis 示例搭建数据流资源kinesis-cdk 实战指南用 AWS CDK 为 JavaScript v3 Kinesis 示例搭建数据流资源kinesis cdk 实战指南 Amazon Kinesis 是 AW示例工程教程后端零基础入门mapgen2游戏开发者必学的地图生成工具零基础入门mapgen2游戏开发者必学的地图生成工具 mapgen2是一款专注于游戏地图生成的开源工具特别擅长创建包含山脉、河流和海岸线等自然地形特征的岛屿游戏开发上一篇终极跨浏览器Cookie解决方案jQuery-Cookie完全实战指南下一篇终极指南5款最佳macOS菜单栏管理工具对比分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表