- 示例工程
- 教程
- 后端
【免费下载链接】aws-doc-sdk-examples
Welcome 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.
resources/是 aws-doc-sdk-examples 仓库中一个语言无关(language-agnostic)的公共资源层,集中存放跨服务示例运行所需的基础设施模板、前端客户端与共享数据文件。阅读本文后,你将掌握该目录四大子目录(cdk、cfn、clients、sample_files)的职责划分、各 CDK 应用创建的资源清单、三种运行 CDK 应用的方式(CDK CLI / AWS CLI / CloudFormation 控制台),以及共享样例数据的实际用途。
一、目录结构总览:四个各司其职的子目录
根据 resources/README.md,resources目录专门承载跨服务示例运行所需的一切"配套设施",并按用途划分为四个子目录:
| 子目录 | 用途 |
|---|---|
| /cdk | 用于搭建跨服务示例所需资源的 AWS CDK 模板 |
| /cfn | 用于搭建跨服务示例所需资源的 AWS CloudFormation 模板 |
| /clients | 用于运行跨服务示例的前端客户端 |
| /sample_files | 供各类示例使用的共享样例数据文件 |
从设计意图看,这套目录结构把"示例代码"与"示例依赖的云资源"解耦:跨服务示例(如 JavaScript、Python、Go、Ruby 等各语言目录下的cross_service应用)只需按名称引用这里定义的资源,而具体的资源创建逻辑统一沉淀在cdk/cfn中,可被多种语言的示例复用。
二、cdk 子目录:面向十余个场景的 CDK 应用合集
resources/cdk/README.md 明确说明,该目录下的 AWS CDK 应用负责创建如下服务的资源:IAM、CloudWatch、Amazon Cognito、Amazon Comprehend、Amazon DynamoDB、Amazon Lex、Amazon SNS、Amazon SQS、Amazon S3、Amazon Translate。每个子目录都是一个独立的 CDK 应用,包含setup.ts(或同名.ts入口)、package.json、cdk.json、tsconfig.json等标准工程文件。
2.1 逐个盘点各 CDK 应用创建的资源
按 resources/cdk/README.md 的描述,各应用创建的资源清单如下:
- dynamodb_ruby_example_create_movies_table / dynamodb-ruby-example-create-users-table:各创建一个 DynamoDB 表,服务于 Ruby 示例的数据建模场景。
- iam-ruby-example-add-new-user:创建一个 IAM 用户。
- s3-ruby-example-create-bucket:创建一个 S3 存储桶。
- javascript_example_code_polly_aws_service:创建一个对 Amazon Polly 拥有完全访问权限的 IAM 未认证(unauthenticated)角色,以及一个挂接该角色的 Cognito 身份池。
- javascript_example_lambda_aws_service:创建公有读的 S3 存储桶、基于 AWS 身份的 IAM 未认证角色(具备建 DynamoDB 表、调用 Lambda 函数、创建移动分析事件的权限),以及挂接该角色的 Cognito 身份池。
- kinesis-example-create-stream:创建 Kinesis 数据流、Cognito 身份池和 IAM 角色。
- kinesis-iam-unauthenticated-role:创建 Cognito 身份池和 IAM 角色。
- lambda_using_api_gateway:创建 DynamoDB 表、可执行 Lambda 函数的 IAM 角色、托管 Lambda 函数的 S3 存储桶。
- lambda_using_scheduled_events:创建 S3 存储桶、IAM 角色和 DynamoDB 表。
- lex_bot_example_iam_unauth_role:创建对 Comprehend、Translate、Lex 具备权限的 IAM 未认证角色。
- messaging-app-unauthenticated-role-sqs-fifo-queue:创建具备 SQS 权限的 IAM 未认证角色,以及一个 SQS FIFO 队列。
- python_example_code_apigateway_aws_service:创建带
username分区键的 DynamoDB 表,以及允许 API Gateway 读写该表的 IAM 角色。 - python_example_code_apigateway_websocket:创建带
connection_id主键的 DynamoDB 表、授予 Lambda 访问 DynamoDB 权限并允许其运行函数的 IAM 角色与策略,以及一个基于 Python 3.7、通过环境变量注入表名的 Lambda 函数。 - python_example_code_stepfunctions_demo:创建带
username分区键的 DynamoDB 表,以及允许 API Gateway 读写该表的 IAM 角色。 - rekognition-sns-video-analyzer:创建对 SQS、S3、Rekognition 具备权限的 IAM 未认证角色、S3 存储桶和 SNS 主题。
- rekognition-unauthrole:创建 IAM 角色和 Cognito 身份池。
- submit-data-app-unauthenticated-role:创建 DynamoDB 表、Cognito 身份池和 IAM 角色。
- textract_example_s3_sns_sqs:创建授予 Textract 读写权限的 S3 存储桶、SNS 主题、可由 Textract 代入并向主题发布的 IAM 角色,以及订阅该主题的 SQS 队列。
- textract_example_s3_sns_sqs_cognito:在上一项基础上额外创建 Cognito 用户池、身份池和认证用户角色,授予认证用户访问 Textract、SQS 队列和 S3 存储桶的权限。
- transcribe-streaming-unauth-role:创建具备 Amazon SES
SendEmail、Amazon TranscribeStartStreamTranscriptionWebSocket、Amazon ComprehendDetectDominantLanguage、Amazon TranslateTranslateText权限的 IAM 未认证角色。 - go_example_lambda:创建 S3 存储桶、DynamoDB 表、SNS 主题、SQS 队列,以及监听这些资源变更并打印 CloudWatch 日志的 Go 语言 Lambda 处理器。
- go-apprunner:创建 Docker 容器,以及让 Go 应用在容器内运行所需的 IAM 角色。
- lambda_api_step_functions:创建 Cognito 身份池、IAM 角色和 Step Functions 实例。
- javascript_example_code_transcribe_demo:创建带认证用户角色的 Cognito 身份池、附着于该角色(含 S3 与 Transcribe 权限)的 IAM 策略、支持注册与登录的 Cognito 用户池,以及分别托管应用文件和转录结果的 S3 存储桶。
值得注意:README 中部分条目(如go_example_lambda、go-apprunner、lambda_api_step_functions、javascript_example_code_transcribe_demo等)在 cdk 目录下已无对应目录,说明该 README 记录了历史演进过程中的多代应用,当前实际保留的以 resources/cdk 中的目录清单为准。
2.2 从源码看资源定义:以三个典型应用为例
从源码结构看,多数 CDK 应用遵循"一个setup.ts定义栈、cdk.json指向入口"的统一模式。以下三个示例最能说明其资源定义细节。
示例一:Aurora Serverless 集群与 Secrets Manager 联动(resources/cdk/aurora_serverless_app/setup.ts)
该栈面向 Aurora 样例应用,依次完成三件事:
- 创建管理员凭据 Secret:使用
generateSecretString以username: docexampleadmin为模板、由 CloudFormation 自动生成password字段,并关闭标点符号(excludePunctuation: true)与空格(includeSpace: false),保证生成的密码兼容 Aurora MySQL 的凭据格式。 - 创建 Aurora 数据库集群:选用
AuroraPostgresEngineVersion.of('15.5','15')引擎,默认库名为auroraappdb,开启 Data API(enableDataApi: true),并将 Serverless v2 容量设置在 0.5 到 8 ACU 之间;写入实例通过ClusterInstance.serverlessV2('writer')声明,并直接复用第一步的 Secret 作为数据库凭据。 - 输出三个关键值:
SecretArn、ClusterArn、DbName——README 注释明确说明,这些值正是 Amazon RDS Data Service 对该集群执行 SQL 语句所必需的。
该栈的package.json声明了aws-cdk-lib(^2.80.0 / ^2.189.1)、constructs(^10.0.38)等依赖,与仓库中其他 CDK 应用保持一致。
示例二:带 MFA 的 Cognito 用户池(resources/cdk/cognito_scenario_user_pool_with_mfa/setup.ts)
该栈专为 Cognito 场景设计,通过UserPool构造器集中配置:
- 允许自助注册(
selfSignUpEnabled: true)、邮件自动验证(autoVerify: { email: true })、强制邮箱属性(required: true且不可变); - 强制 MFA(
mfa: Mfa.REQUIRED),且仅启用 TOTP 动态令牌(otp: true, sms: false); - 启用设备追踪,新设备要求挑战验证(
challengeRequiredOnNewDevice: true); - 通过
addClient注册应用客户端,开放管理员密码与用户密码两类认证流程,并在输出中提供UserPoolId与ClientId供示例程序调用。
示例三:DynamoDB 工作项追踪表(resources/cdk/dynamodb-item-tracker/setup.ts)
该栈仅创建一张 DynamoDB 表doc-example-work-item-tracker,分区键为字符串类型iditem,并设置removalPolicy: RemovalPolicy.DESTROY以便演示后随栈销毁;其cdk.json将应用入口指向npx ts-node --prefer-ts-exts setup.ts,与仓库中其他应用的启动方式一致。
三、cfn 子目录:纯 YAML 的 CloudFormation 模板
resources/cfn 存放不依赖 CDK 的纯 CloudFormation 模板,当前包含三个场景:
- entity-resolution-basics:
entity-resolution-basics-template.yml,服务于实体解析基础示例; - iotsitewise_basics:
SitewiseRoles-template.yml,为 IoT SiteWise 示例创建角色; - s3_express_basics:
s3_express_template.yml,为 S3 Express 示例创建用户与权限。
以 s3_express_basics/s3_express_template.yml 为例,模板创建两个 IAM 用户(RegularUser、ExpressUser),并为ExpressUser挂载名为AllowExpressOperations的策略,仅授予s3express:CreateBucket与s3express:CreateSession两个动作,最后通过Outputs暴露两个用户名。这是一个典型的"最小权限、按示例场景隔离"的模板设计。
四、clients 子目录:供前端演示使用的 React 客户端
resources/clients 收录了运行跨服务示例所需的前端客户端,当前包括三套 React 应用:
- item-tracker:工作项追踪前端,含
App.js、RestService.js、WorkItem.js、WorkItems.js及 Jest 单元测试,其config.json用于配置后端服务地址; - elros(resources/clients/react/elros):基于 Vite + TypeScript 的工程模板,内含可插拔插件体系(
src/plugins、src/plugin-creator),并预置了 item-tracker 与 sqs-message 两个示例插件; - elros-pam:Photo Asset Manager 示例的 React 客户端,
src下包含文件上传、下载、登录导航等组件,并自带运行截图。
从源码结构看,elwing中的item-tracker插件以WorkItemService(含 Mock 测试)封装后端调用、以RestService.ts处理 HTTP 通信,并与后端示例中的表结构(iditem分区键)一一对应,体现了前端客户端与cdk中资源定义之间的强耦合关系。
五、sample_files 子目录:跨语言共享的样例数据
resources/sample_files/README.md 将这里定义为"供仓库内各类示例共享的样例数据文件",当前包括:
| 文件 | 用途 |
|---|---|
| movies.json | 使用通用电影数据模型的示例数据集 |
| chat_sfn_state_machine.json | 简易聊天模拟的 Step Functions 状态机定义 |
| sample_saml_metadata.xml | 创建 SAML 提供商用的样例 SAML 元数据 |
以 chat_sfn_state_machine.json 为例,它定义了一个"非 AI 的简易聊天模拟器"状态机:从Greeting(Pass 状态,用States.Format拼接问候语)进入GetInput(Task 状态,通过占位符{{DOC_EXAMPLE_ACTIVITY_ARN}}引用外部活动,超时 300 秒),再经Choice状态按song/poem/story等动作分流。文件中的{{DOC_EXAMPLE_ACTIVITY_ARN}}占位符说明了样例文件的典型用法:由示例代码在部署时替换为真实资源 ARN。
六、CDK 应用的三种运行方式
resources/cdk/README.md 给出了任意 CDK 应用通用的运行步骤,核心输入变量为:
CLOUDFORMATION_TEMPLATE_NAME:合成出的 CloudFormation 模板文件名(例如setup.yaml);STACK_NAME:CloudFormation 栈名(例如myDynamoDBStack)。
方式一:直接使用 AWS CDK CLI
在应用目录(含package.json与cdk.json的目录)执行:
npm install && cdk synth && cdk deployCDK 会在输出中显示其创建的资源名。使用完毕如需清理,执行:
cdk destroy方式二:使用 AWS CLI
先合成模板,再用aws cloudformation创建栈:
npm install && cdk synth > CLOUDFORMATION_TEMPLATE_NAME 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清理资源:
aws cloudformation delete-stack --stack-name STACK_NAME方式三:使用 AWS CloudFormation 控制台
- 先合成模板:
npm install && cdk synth > CLOUDFORMATION_TEMPLATE_NAME; - 登录 CloudFormation 控制台,选择Create stack,按页面指引上传模板并创建栈;
- 栈状态变为
CREATE_COMPLETE后,在栈的Outputs选项卡中查看生成的资源名; - 清理时在控制台选中该栈并选择Delete。
使用注意:在部分情况下 CDK 无法销毁资源——例如 S3 存储桶非空时,需要先手动清空桶内对象,再执行销毁操作。
- 示例工程
- 教程
- 后端
【免费下载链接】aws-doc-sdk-examples
Welcome 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.
相关推荐
Terraform AWS Provider 官方示例仓库全解析:从 examples 目录快速上手 AWS 资源编排
Terraform AWS Provider 官方示例仓库全解析:从 examples 目录快速上手 AWS 资源编排 examples/ 是 terrafor
IaC云原生基础设施BAML playground-server:IDE Playground 的共享服务基础设施
BAML playground server:IDE Playground 的共享服务基础设施 本篇基于 engine/playground server/RE
编程语言AI Agent编译器CLI人工智能ExoPlayer database 模块解析:媒体组件共享 SQLite 数据库基础设施
ExoPlayer database 模块解析:媒体组件共享 SQLite 数据库基础设施 导读 本文围绕 ExoPlayer 仓库中 library/data
音视频移动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考