
示例工程教程后端【免费下载链接】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点击查看免费下载本文基于 Weathertop 多语言集成测试运行器文档 讲解 aws-doc-sdk-examples 仓库内置的自动化测试基础设施它通过三个 AWS CDK 堆叠Images、Admin、Plugin将镜像构建 → 定时事件触发 → 跨账户分发测试串成一条无状态、无流水线的事件链。读完本篇你将理解该系统的整体架构、三个 CDK 堆叠的分工与依赖关系并掌握 deploy.py 的部署命令、配置参数含义以及测试结果的验证方法。背景11 种 SDK 语言的示例代码如何保证长期正确本仓库包含 11 种 AWS 官方 SDK 支持语言 的示例代码Go、Python、Java、JavaScript v3、Ruby、C、.NET、Rust、Kotlin、PHP、SAP ABAP 等目录。这些示例代码是 AWS 文档与 SDK 开发者指南的引用来源必须持续测试以保证正确性。但原始文档指出了两个痛点虽然仓库测试覆盖全面但每个测试都需要手动触发单个语言的完整测试集耗时可达数小时。因此该方案的目标是提供集中式触发 语言无关的测试编排代价是对测试提出两个前置要求测试需自动化友好automation-friendly必须部署文档所述的 AWS CDK 堆叠。整套源码位于 .tools/test/ 目录下包含堆叠定义、部署脚本、配置与验证截图。设计原则Serverless、无流水线、全代码化文档明确列出了三个设计特征这也是该系统区别于传统 CI/CD 流水线方案的关键特征含义对应实现Serverless不依赖任何有状态基础设施Lambda、Batch on Fargate、EventBridge 规则无长驻计算节点No pipeline不依赖流水线靠事件而非人工交互驱动EventBridge cron 定时事件 → SNS 扇出All code整个解决方案均可通过 AWS CDK 部署三个堆叠全部为 CDK 应用stacks/images、stacks/admin、stacks/plugin三个 CDK 堆叠分工与依赖该方案由以下 CDK 堆叠构成完整继承自原文档的架构表并补充源码证据堆叠功能目的目录Images持有各语言专用 Docker 镜像的版本仓库ECR 私有仓库为每个受支持 SDK 事件化地产出开箱即跑的 Docker 镜像stacks/imagesAdmin向一个 Amazon SNS 主题发布定时消息基于 cron 的集中式集成测试触发stacks/adminPlugin消费消息并在 AWS Batch on Fargate 上触发集成测试在每个受支持 SDK 对应的账户中执行联邦式测试stacks/plugin关键依赖关系Admin 与 Plugin 堆叠都依赖 Images 堆叠在 ECR 仓库中已存在对应语言的镜像。这一约束在 Plugin 堆叠源码中体现得很直接——任务定义直接引用 Admin 账户 ECR 仓库中的镜像// .tools/test/stacks/plugin/typescript/plugin_stack.ts const containerImageUri ${this.adminAccountId}.dkr.ecr.us-east-1.amazonaws.com/${toolName}:latest;也就是说Batch 作业拉取的镜像 URI 由resources.yaml中的admin_acct与目标语言名动态拼接而成镜像必须先由 GitHub Workflow 推送到该仓库见下文镜像生产。工作流程三段式事件链文档将系统运行机制概括为三段下面逐段展开并给出源码佐证。1. 镜像生产Image production镜像仓库在已部署 Images 堆叠的 AWS 账户中管理。通过一次安全集成GitHub Workflow参考本仓库 .github/workflows/docker-push.yml 风格的配置会构建包含预编译 SDK 代码的 Docker 镜像并推送到私有 ECR 仓库。各语言的 Dockerfile 就存放在 .tools/docker-images/ 目录下cpp、dotnet、go、java、javascript、kotlin、php、python、ruby、rust、swift 各有独立 Dockerfile其中 run-in-container.sh 用于在容器内执行测试。2. 集中式事件Centralized eventing事件从已部署 Admin 堆叠的 AWS 账户发出。从 admin_stack.ts 可以看到其核心是一个基于 cron 的 EventBridge 规则每天 00:00 向 SNS 主题发布一条消息const rule new events.Rule(this, trigger-rule, { schedule: events.Schedule.cron({ minute: 0, hour: 0 }), }); rule.addTarget(new targets.SnsTopic(topic));通过跨账户集成不同 AWS 账户中的 SQS 队列可以订阅这个 SNS 主题。Admin 堆叠通过三段 IAM 资源策略实现这一点见 admin_stack.tssnsPermissions允许任意主体在AWS:SourceOwner等于 Admin 账户 ID 的条件下管理该主题initSubscribePermissions为targets.yaml中每个目标账户的root主体授予SNS:SubscribeinitPublishPermissions为目标账户与events.amazonaws.com服务主体授予SNS:Publish。此外 Admin 堆叠还创建一个 S3 日志桶bucket_name默认aws-weathertop-admin-log-bucket并给每个启用账户的CloudWatchExecutionRole角色授予跨账户写日志的权限用于各语言测试日志的统一导出。3. 分布式测试Distributed testing测试在已部署 Plugin 堆叠的 AWS 账户中执行。Plugin 堆叠plugin_stack.ts在每个目标账户中创建一个命名BatchJobQueue-{toolName}的 SQS 队列并订阅 Admin 的跨账户 SNS 主题raw message delivery一个 Fargate 托管计算环境MANAGED类型maxvCpus: 256默认 VPC安全组batch-sg与一个 Batch 作业定义/队列一个名为SubmitBatchJob-{toolName}的 Lambda 函数handler 为submit_job.handler源码见 lambda/submit_job.py其执行角色仅有batch:SubmitJob与batch:DescribeJobs权限——它监听 SQS 队列并在收到消息时向 Batch 队列提交作业一个日志导出 Lambdaexport_logs.py将测试日志导出到 Admin 账户的 S3 桶。作业定义的容器资源来自targets.yaml中该语言条目的vcpus、memory、storage字段并带默认值见 plugin_stack.tsconst snsTopic this.initGetTopic(adminTopicName); const sqsQueue new sqs.Queue(this, BatchJobQueue-${toolName}); if (acctConfig[${toolName}].status enabled) { this.initSubscribeSns(sqsQueue, snsTopic); this.batchMemory acctConfig[${toolName}]?.memory ?? 16384; // MiB this.batchVcpus acctConfig[${toolName}]?.vcpus ?? 4; // CPUs this.batchStorage acctConfig[${toolName}]?.storage ?? 30; // GiB }值得注意的启用开关只有当targets.yaml中对应语言的status为enabled时Plugin 才会真正完成 SNS 订阅与日志导出配置。因此启用一个新语言需要修改targets.yaml并重新部署 Admin 堆叠因为 Admin 的 IAM 策略也是根据该文件生成的。TOOL_NAME环境变量决定每次部署针对哪门语言——部署脚本在调用cdk deploy时注入该变量见 deploy.py 的deploy_resources函数。配置文件resources.yaml 与 targets.yaml两个 YAML 文件是整个系统的单一事实来源CDK 代码在 synth 阶段通过 config 模块 读取。resources.yaml系统级参数resources.yaml 当前内容topic_name: aws-weathertop-admin-sns-fanout-topic bucket_name: aws-weathertop-admin-log-bucket admin_acct: 808326389482 aws_region: us-east-1参数含义topic_nameAdmin 堆叠创建的 SNS 扇出主题名称Plugin 通过arn:aws:sns:{region}:{admin_acct}:{topic_name}跨账户引用bucket_name统一日志导出 S3 桶名称admin_acctAdmin 堆叠所在账户 ID同时是 ECR 镜像仓库所属账户aws_region部署区域硬编码为us-east-1deploy.py中AWS_DEFAULT_REGION常量同为该值targets.yaml每语言测试目标targetes.yaml 实为 targets.yaml 以语言名为键每个条目包含字段含义示例account_id该语言测试运行的 AWS 账户 IDpython: 664857444588statusenabled/disabled控制 SNS 订阅与日志导出是否生效enabledvcpusBatch 作业 vCPU 数可选默认4cpp: 4memoryBatch 作业内存 MiB可选默认16384cpp: 16384storageBatch 临时存储 GiB可选默认30rustv1: 60当前仓库的 targets.yaml 已配置 11 个语言账户cpp、dotnetv3、gov2、javascriptv3、javav2、kotlin、php、python、ruby、rustv1、sapabap、swift。注意 javav2 与 kotlin 共用同一account_id且留有备份账户注释说明账户复用是允许的。部署方式一deploy.py 脚本推荐DEPLOYMENT.md 指出 deploy.py 是主要部署入口其设计目标是向任意数量的 AWS 账户部署堆叠时无需为每次部署手动获取令牌或重设变量。三种部署类型Images Stackimages为 targets.yaml 中列出的所有工具创建空的 ECR 私有仓库。镜像版本化与推送机制需使用者自行实现文档推荐 GitHub Actions OIDC 方案。Admin Stackadmin部署事件发射基础设施并创建跨账户事件订阅所需的 IAM 策略。必须先于任何 Plugin 堆叠部署。账户取自resources.yaml的admin_acct从源码load_admin_config可确认其status固定为enabled见 deploy.py。Plugin Stackplugin向 targets.yaml 中的每个账户部署两个堆叠订阅 Admin 事件的 Plugin 堆叠用于清理测试残留资源的Account Nuker堆叠stacks/nuke含account_nuker.ts与 cleanup 架构说明。前置条件macOS 或 Linux 的 CLIzsh/bash 均可Python 3.11AWS CLI 与 CDK 已安装配置NodeJS 18所假设角色具备管理类 IAM 权限非生产测试环境可用AdministratorAccess配置文件 resources.yaml 与 targets.yaml 已就绪环境变量TOKEN_TOOL凭证管理工具的路径TOKEN_PROVIDERAWS 凭证的身份提供方。虚拟环境中安装依赖requirements.txt 仅包含PyYAML6.0.1python -m venv .venv source .venv/bin/activate pip install -r requirements.txt关于TOKEN_TOOL/TOKEN_PROVIDER文档说明这两个变量部分是为了遮蔽 AWS 内部工具链细节get_tokens函数deploy.py#L167按你使用的令牌工具可能需要额外改造。它实际执行的命令形如$TOKEN_TOOL credentials update --account account_id --provider $TOKEN_PROVIDER --role weathertop-cdk-deployments --once命令语法cd stacks ; python deploy.py stack-typestack-type取值admin部署 Admin 专属资源images部署镜像相关资源plugin部署 Plugin 资源。若只部署某一种语言追加--language languagelanguage为 targets.yaml 中的键如pythonpython deploy.py plugin --language python脚本为什么用 subprocess 调 CDK文档给出了明确理由CDK 虽有 Python 库但 1团队标准使用 TypeScript 版本编写堆叠2Python CDK 库不提供在 Python 脚本内调用应用自身的方式。因此脚本只能通过subprocess调用 CDK CLI这在跨账户部署灵活性上必要但带来一定脆弱性。源码中也能看到文档提到的怪癖deploy_resources在每次部署后time.sleep(15)以等待上一条 CDK 命令的后台线程结束避免冲突deploy.py#L224-L226。部署方式二直接调用 CDK也可以进入各堆叠目录images、admin、plugin手动执行 CDK 命令。各堆叠的 README 给出了统一的完整流程以 Admin 为例admin/README.mdnpm install -g aws-cdk # 安装 CDK 工具包 cdk --version # 检查版本 python3 -m venv .venv # 创建虚拟环境 source .venv/bin/activate pip install -r requirements.txt cdk synth # 合成 CloudFormation 模板 cdk bootstrap cdk deploy # 清理 cdk destroy该流程已通过 AWS CDK 2.70.0build c13a0f1验证。常用命令还有cdk ls、cdk diff等。plugin 类型的额外细节部署前须设置语言环境变量如export LANGUAGE_NAMEpythondeploy.py 路径下则注入的是TOOL_NAME两者分别服务于手工部署与脚本部署两条路径要让堆叠开始接收测试事件必须在 targets.yaml 中将该工具的status置为enabled然后重新部署 admin 堆叠因为跨账户 IAM 策略由 Admin 依据该文件生成手动触发测试运行的方式见下一节的提交测试作业。验证测试运行从控制台提交 Batch 作业部署 Plugin 堆叠后可以进入对应语言的 AWS 账户控制台手动触发测试完整步骤截图见 DEPLOYMENT.md登录该工具对应的 AWS 账户控制台如python导航到 Batch 的 Job Definitions点击 Submit Job填写名称、选择队列并点击 Next选择队列的界面如下继续点击 Next再点击 Create job 完成提交。查看测试结果在账户控制台中点击Jobs并选择唯一的作业队列打开Load all jobs点击Name字段中的超链接值查看作业详情当状态变为SUCCEEDED或FAILED时点击 Logging 标签页查看测试日志日常运维作业清理与资源清理清理排队作业Plugin 目录下的 cleanup.py 会删除 AWS Batch 中所有排队中的作业用于队列配置错误导致待运行作业积压的场景清理账户残留资源部署 Plugin 时自动附加的 Account Nuker 堆叠stacks/nuke负责删除测试执行留下的残余资源deploy.py 在插件部署成功后会依次执行创建账户别名weathertop-test、部署 nuke 堆叠、上传作业脚本三步见 deploy_stacks。小结Weathertop 测试运行器用GitHub 推镜像 EventBridge 定时事件 SNS 跨账户扇出 Lambda/Batch 执行的组合把 11 种语言的 SDK 示例测试从人工触发升级为定时、分布式、无状态的自动化验证。理解其落地要点只有三个先部署 Images 准备 ECR 仓库再部署 Admin 打开事件源最后按targets.yaml逐账户部署 Plugin记得status: enabled即可通过deploy.py一条命令完成全部跨账户编排。赞分享示例工程教程后端【免费下载链接】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点击查看免费下载相关推荐aws-doc-sdk-examples 测试基础设施部署指南基于 AWS CDK 的多账户集成测试编排aws doc sdk examples 测试基础设施部署指南基于 AWS CDK 的多账户集成测试编排 导读 本文面向需要在真实 AWS 环境中验证 SDK示例工程教程后端基于 AWS CDK TypeScript 构建插件栈在 aws-doc-sdk-examples 中用 AWS Batch 驱动跨账号集成测试基于 AWS CDK TypeScript 构建插件栈在 aws doc sdk examples 中用 AWS Batch 驱动跨账号集成测试 本文以 .t示例工程教程后端aws-doc-sdk-examples 测试自动化架构中的 Plugin Stack基于 AWS CDK 的 SNS→SQS→Lambda→AWS Batch 集成测试编排指南aws doc sdk examples 测试自动化架构中的 Plugin Stack基于 AWS CDK 的 SNS→SQS→Lambda→AWS Batc示例工程教程后端上一篇Penumbra 开源项目安装与使用指南下一篇OmniGet 文档下载指南SlideShare、Google Docs、Calameo 一键存为 PDF 的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考