首页/新闻资讯/正文详情

使用 AWS SDK for Kotlin 操作 Amazon EC2 Auto Scaling:完整场景示例与测试指南

发布时间:2026/9/26 15:56:51 来源:云帆数科 栏目:资讯中心
使用 AWS SDK for Kotlin 操作 Amazon EC2 Auto Scaling:完整场景示例与测试指南
示例工程教程后端【免费下载链接】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仓库中的 kotlin/services/autoscale/README.md 及其配套源码系统讲解如何使用 AWS SDK for Kotlin 完成 Amazon EC2 Auto Scaling 的核心生命周期管理。读者将掌握如何创建 Auto Scaling 组、通过 Waiter 轮询等待组就绪、查询实例与组状态、启停指标采集、动态调整期望容量与最大容量、查看扩缩容活动、终止实例以及强制删除组的完整实战流程并了解基于 JUnit 5 与 AWS Secrets Manager 的自动化测试方案。Amazon EC2 Auto Scaling 用于根据你定义的条件自动增加或移除 EC2 实例从而维持应用可用性。本仓库中的 Kotlin 示例以一个端到端 Scenario 为主线把 12 个常用 API 操作串联起来覆盖了一个 Auto Scaling 组从创建到销毁的完整生命周期。代码示例概览与前置说明示例所在位置与运行形态仓库中与本文对应的核心代码位于场景主程序AutoScalingScenario.kt自动化测试AutoScalingTest.kt构建脚本build.gradle.kts其中AutoScalingScenario.kt以suspend fun main作为入口通过命令行参数接收 4 个必需配置属于单场景多命令Scenario型示例——这正是 README 中分类为ScenarioMultiple commands的原因。凭据与开发环境README 明确指出所有示例统一使用ProfileCredentialsProvider作为凭据提供方即从本地 AWS 配置文件~/.aws/credentials读取访问密钥。运行前需要先完成 SDK for Kotlin 开发环境搭建与凭据配置仓库源码的 KDoc 注释也指向同一份环境准备文档。需要特别强调两点示例会在你的 AWS 账户和指定 Region 上执行真实操作可能产生费用具体收费参见 AWS Pricing部分操作是破坏性的如删除 Auto Scaling 组、终止实例README 明确警告Be very careful建议在实验时创建独立的测试专用资源并遵循最小权限least privilege原则只授予完成任务所需的最低 IAM 权限。从 AutoScalingScenario.kt 的源码看所有客户端都显式指定了region us-east-1这也是示例的默认测试区域。命令行参数运行场景程序需要传入 4 个参数格式与含义如下groupName launchTemplateName serviceLinkedRoleARN vpcZoneId参数说明groupNameAuto Scaling 组的名称launchTemplateName启动模板Launch Template的名称serviceLinkedRoleARNAuto Scaling 组所使用的服务相关角色service-linked role的 ARNvpcZoneId一个 VPC 子网 IDAuto Scaling 组中的实例将创建在该子网内若参数个数不为 4程序会打印上述用法说明并调用exitProcess(1)退出见 AutoScalingScenario.kt。场景流程Auto Scaling 组的完整生命周期AutoScalingScenario.kt的 KDoc 注释清楚列出了 12 个操作步骤构成了整个 Scenario 的执行主线使用AutoScalingWaiter创建 Auto Scaling 组获取指定 Auto Scaling 组并返回实例 ID用实例 ID 描述该实例启用指标采集Metrics Collection描述 Auto Scaling 组描述账户限额Account Limits更新 Auto Scaling 组以增加实例数量获取指定 Auto Scaling 组并取得实例数量列出组内发生的扩缩容活动Scaling Activities终止组内某个实例停止指标采集删除 Auto Scaling 组。主程序在步骤间穿插了两个delay(60000)等待 1 分钟源码注释解释了原因Wait 1 min for the resources, including the instance. Otherwise, an empty instance Id is returned——即 EC2 实例启动需要时间若不等待步骤 2 可能拿到空实例 ID此时程序会打印错误并退出见 AutoScalingScenario.kt。关键 API 操作详解与源码印证下面按场景执行顺序逐一解读每个操作对应的 Kotlin 实现。所有操作均通过AutoScalingClient完成客户端通过AutoScalingClient { region us-east-1 }构造并以.use { }自动释放资源。1. 创建 Auto Scaling 组 Waiter 等待就绪createAutoScalingGroup函数AutoScalingScenario.kt是场景的第一步val request CreateAutoScalingGroupRequest { autoScalingGroupName groupName availabilityZones listOf(us-east-1a) launchTemplate templateSpecification maxSize 1 minSize 1 vpcZoneIdentifier vpcZoneIdVal serviceLinkedRoleArn serviceLinkedRoleARNVal } // 该对象为 Waiter 调用所需 val groupsRequestWaiter DescribeAutoScalingGroupsRequest { autoScalingGroupNames listOf(groupName) } AutoScalingClient { region us-east-1 }.use { autoScalingClient - autoScalingClient.createAutoScalingGroup(request) autoScalingClient.waitUntilGroupExists(groupsRequestWaiter) println($groupName was created!) }关键点组名、可用区us-east-1a、启动模板、minSize/maxSize均为 1、VPC 子网 ID、service-linked role ARN 一起作为创建请求的核心参数LaunchTemplateSpecification { launchTemplateName ... }通过名称引用启动模板模板内部定义了 AMI、实例类型等实例规格创建完成后立即调用waitUntilGroupExistsWaiter以轮询方式等待组真实存在而不是发出请求即返回这保证后续getSpecificAutoScaling能取到组信息。Waiter 来自aws.sdk.kotlin.services.autoscaling.waiters.waitUntilGroupExists包见文件头部的 import。2. 获取指定组与实例 IDgetSpecificAutoScalingAutoScalingScenario.kt调用describeAutoScalingGroups遍历返回组内实例并回传第一个实例的 IDresponse.autoScalingGroups?.forEach { group - println(The group name is ${group.autoScalingGroupName}) println(The group ARN is ${group.autoScalingGroupArn}) group.instances?.forEach { instance - instanceId instance.instanceId.toString() } }3. 描述指定实例describeAutoScalingInstanceAutoScalingScenario.kt使用上一步拿到的实例 ID 调用describeAutoScalingInstances打印该实例的lifecycleState生命周期状态如Pending、InService、Terminating等。4. 启用指标采集enableMetricsCollectionAutoScalingScenario.ktval collectionRequest EnableMetricsCollectionRequest { autoScalingGroupName groupName metrics listOf(GroupMaxSize) granularity 1Minute }metrics指定要采集的指标示例使用GroupMaxSize组最大实例数granularity 1Minute表示以 1 分钟为粒度聚合指标这是 Auto Scaling 指标采集的常用粒度。5. 更新 Auto Scaling 组updateAutoScalingGroupAutoScalingScenario.kt将组最大容量更新为 3并再次使用 Waiter 等待更新生效val groupRequest UpdateAutoScalingGroupRequest { maxSize 3 serviceLinkedRoleArn serviceLinkedRoleARNVal autoScalingGroupName groupName launchTemplate templateSpecification }注意更新请求同样携带启动模板与 service-linked role ARN——更新操作是按请求中的字段覆盖配置的因此必须完整传入希望保留的配置项。6. 设置期望容量setDesiredCapacityAutoScalingScenario.ktval capacityRequest SetDesiredCapacityRequest { autoScalingGroupName groupName desiredCapacity 2 }将组的期望实例数设为 2。结合第 5 步maxSize 3与初始minSize 1组现在允许在 13 之间弹性伸缩期望容量为 2即组会保持 2 个在运行实例。7. 列出扩缩容活动describeScalingActivitiesAutoScalingScenario.kt调用describeScalingActivities打印每条活动的activityId与details用于审计组内每一次扩容/缩容事件。8. 终止组内实例terminateInstanceInAutoScalingGroupAutoScalingScenario.ktval request TerminateInstanceInAutoScalingGroupRequest { instanceId instanceIdVal shouldDecrementDesiredCapacity false }shouldDecrementDesiredCapacity false表示终止实例后不减少期望容量组会按策略再启动新实例补位这一参数直接决定终止后组的补位行为。9. 停止指标采集disableMetricsCollectionAutoScalingScenario.kt与启用操作对称通过metrics listOf(GroupMaxSize)关闭对应指标的采集。10. 强制删除 Auto Scaling 组deleteSpecificAutoScalingGroupAutoScalingScenario.ktval deleteAutoScalingGroupRequest DeleteAutoScalingGroupRequest { autoScalingGroupName groupName forceDelete true }forceDelete true表示即使组内仍有实例也强制删除。这是典型的破坏性操作README 特别强调运行删除/修改类操作时要格外小心。其他常用 API查询组列表与账户限额场景中还包含了另外两个查询类操作可独立使用describeAutoScalingGroups(groupName)AutoScalingScenario.kt按组名查询并打印组的healthCheckType请求中还可通过maxRecords 10限制返回数量getAutoScalingGroups(groupName)AutoScalingScenario.kt打印组的名称、ARN以及组内每个实例的 ID 与lifecycleStatedescribeAccountLimits()AutoScalingScenario.kt调用describeAccountLimits打印当前账户在 Auto Scaling 方面的限额信息——maxNumberOfAutoScalingGroups最大组数配额与numberOfAutoScalingGroups当前实际组数可用于在创建资源前检查配额余量。构建与运行方式项目的构建配置位于 build.gradle.kts核心要点使用 Kotlin JVM 插件Kotlin 版本2.1.0Java 目标版本为 17通过 AWS SDK for Kotlin BOM版本1.5.63统一管理依赖引入aws.sdk.kotlin:autoscaling与aws.sdk.kotlin:secretsmanager使用 okhttp 与 CRT 两种 HTTP 客户端引擎满足常规与高性能场景测试框架为 JUnit 5org.junit.jupiter:junit-jupiter:5.9.2测试任务启用useJUnitPlatform()并输出 passed/skipped/failed 事件集成 ktlint 插件org.jlleitschuh.gradle:ktlint-gradle:10.3.0用于代码风格检查。在本地依次执行gradle build与gradle run或从 IDE 直接运行main并在运行main时传入 4 个命令行参数即可启动场景。自动化测试AutoScalingTest 与配置准备README 的 Testing 一节说明Kotlin 示例对应一个名为AutoScaleTest的测试类使用 JUnit 5 运行位于src/test/java目录。在当前仓库中Kotlin 版本的测试实现位于 AutoScalingTest.kt源码目录为src/test/kotlin整体结构与该说明一致。测试执行形态测试类通过TestInstance(TestInstance.Lifecycle.PER_CLASS)与TestMethodOrder(OrderAnnotation::class)保证实例复用与执行顺序唯一的Order(1)测试testScenario以runBlocking包裹逐条复刻主场景的 12 步流程创建 → 等待 → 获取实例 ID → 描述 → 启用指标 → 更新组 → 描述组 → 账户限额 → 设期望容量 → 获取组 → 扩缩容活动 → 终止实例 → 停指标 → 删组每次运行时测试会通过Random生成随机数字追加到groupName与groupNameSc之后避免与已有资源冲突测试从 IDE如 IntelliJ或命令行均可运行运行过程中会打印成功/失败消息例如Test 3 passed这类提示。WARNING运行 JUnit 测试会操作真实 AWS 资源并可能产生费用请务必使用测试专用账户或资源。测试配置值的两种来源README 说明测试运行前必须在config.properties位于resources文件夹中定义以下值缺失任何一项都会导致测试失败配置键说明groupNameAuto Scaling 组名称groupNameSc场景中使用的 Auto Scaling 组名称launchTemplateName启动模板名称serviceLinkedRoleARN组使用的服务相关角色 ARNvpcZoneIdVPC 子网 ID实例将创建在该子网需要说明的是README 中的属性文件描述沿用了 Java 版本示例javav2/example_code/autoscale的说明文字而在当前 Kotlin 测试实现中读取方式已升级为从 AWS Secrets Manager 读取。从 AutoScalingTest.kt 的源码可以看到测试在setUp()中通过getSecretValues()读取名为test/autoscale的 SecretSecret 的 JSON 结构由内部类SecretValues定义包含groupName、groupNameSc、launchTemplateName、vpcZoneId、serviceLinkedRoleARN五个字段与 README 的属性键一一对应读取过程使用SecretsManagerClientregion us-east-1调用getSecretValue再由 Gson 反序列化为SecretValues对象源码中还保留了如果你更倾向于用 config.properties 文件获取测试所需 AWS 值请取消注释该代码块的注释说明两种配置来源均可。因此无论走哪种方式你都需要提前准备上述 5 个真实值建议把敏感配置存入 Secrets Manager 的test/autoscale中。与 Java 版本的关系README 明确指出Kotlin 示例源自 Java 版本场景文档中给出的参考链接指向 javav2 的 AutoScalingScenario.java。对比两份实现可以发现Kotlin 版本在 API 调用、参数结构与场景步骤上与 Java 版本保持一致区别主要体现在Kotlin 使用 DSL 风格的请求构造Request { field value }而非 Java 的withXxx()setter 链Kotlin 客户端通过AutoScalingClient { region ... }构造Java 则使用 BuilderKotlin 场景中的delay(60000)直接对应 Java 版本的线程等待逻辑Java 版本的场景还借助CloudFormationHelper创建启动模板等前置资源而 Kotlin 版本将launchTemplateName等作为命令行/测试参数直接传入。附其他 Auto Scaling 操作示例除场景外javav2/example_code/autoscale 目录还提供若干独立的单操作示例Kotlin 场景中的各个函数均可独立复用原理相同CreateAutoScalingGroup.java—— 单独创建 Auto Scaling 组DeleteAutoScalingGroup.java—— 删除 Auto Scaling 组DescribeAutoScalingGroups.java/DescribeAutoScalingInstances.java—— 查询组与实例DetachInstances.java—— 从组中分离实例。小结本文围绕 kotlin/services/autoscale/README.md 及其配套源码完整还原了 AWS SDK for Kotlin 操作 Amazon EC2 Auto Scaling 的场景化实践从参数准备、Waiter 等待、核心 API 调用链到基于 JUnit 5 与 Secrets Manager 的自动化测试配置。掌握这套流程后你既可以把AutoScalingScenario.kt当作可运行的端到端演示也可以将其中的 12 个函数拆解为生产代码的参考实现。运行这些示例前请始终记住它们操作真实 AWS 资源并可能产生费用请使用最小权限的 IAM 角色并在测试专用资源上实验。赞分享示例工程教程后端【免费下载链接】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 SDK for C 管理 Amazon EC2 Auto Scaling 组与实例完整场景示例详解使用 AWS SDK for C 管理 Amazon EC2 Auto Scaling 组与实例完整场景示例详解 导读 本文基于 AWS 官方文档示例仓库示例工程教程后端使用 AWS SDK for .NET (v4) 操作 Amazon EC2 Auto Scaling从入门示例到基础场景实战使用 AWS SDK for .NET v4 操作 Amazon EC2 Auto Scaling从入门示例到基础场景实战 导读 本文基于 dotnetv4/示例工程教程后端使用 AWS SDK for PHP 操作 Amazon EC2 Auto Scaling从基础 API 到完整场景的实战指南使用 AWS SDK for PHP 操作 Amazon EC2 Auto Scaling从基础 API 到完整场景的实战指南 Amazon EC2 Auto示例工程教程后端上一篇使用 Meshery 部署 Prometheus OpenCost ExporterKubernetes 成本监控的可观测性设计模式实战下一篇Apache Arrow C 中编写 Flight RPC 服务服务端、客户端、认证与最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

OpenCode 接内部 Wiki 第 3 天:审计日志裸奔,SSO 权限映射 5 个隐藏坑与 TaoToken 配置骨架
OpenCode 接内部 Wiki 第 3 天:审计日志裸奔,SSO 权限映射 5 个隐藏坑与 TaoToken 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 15:56:51

AI小说生成本地部署:零基础配置教程,5分钟快速跑通长篇小说流程
AI小说生成本地部署:零基础配置教程,5分钟快速跑通长篇小说流程

AI小说生成本地部署:零基础配置教程,5分钟快速跑通长篇小说流程 【免费下载链接】AI_NovelGenerator 使用ai生成多章节的长篇小说,自动衔接上下文、伏笔 项目地址: https://gitcode.com/GitHub_Trending/ai/AI_NovelGenerator 写小说写… · 2026/9/26 15:56:51

Atlas 300V 24G 部署 YOLO 全流程:AI推理加速卡实战指南
Atlas 300V 24G 部署 YOLO 全流程:AI推理加速卡实战指南

Atlas 300V 24G 是不是运算加速卡?这是我最近被问得最多的问题,而且通常后面还会紧跟一句:能不能拿来部署YOLO?把这两个问题放在一起看特别有意思——问的人真正想确认的是两件事:第一,这块插在服务器上、长… · 2026/9/26 15:56:33

从刷榜到落地:大模型真实场景应用开发实战与避坑指南
从刷榜到落地:大模型真实场景应用开发实战与避坑指南

1. 从“刷榜”到“落地”:为什么真实场景成了大模型的新战场过去两年,我身边做AI的朋友聊天的画风经历了三次明显转变。2023年上半年,大家见面第一句是“你那边卡够不够”;2023年下半年变成“你们微调用的什么数据集”&#xff1b… · 2026/9/26 18:37:07

从零手写小型编译程序:词法分析、语法分析与代码生成实战
从零手写小型编译程序:词法分析、语法分析与代码生成实战

简介:这份资源面向学习编译原理、需要完成课程设计的高校学生,围绕SLR(1)分析法实现一个小型编译程序,解决从高级语言源程序到四元式程序翻译的实践问题。资源包共14个文件,约22KB,以c源码、dat测试数据、asm汇编输出、… · 2026/9/26 18:37:07

手写小型编译程序:从词法分析到栈式虚拟机的完整实现指南
手写小型编译程序:从词法分析到栈式虚拟机的完整实现指南

简介:这份资源面向学习编译原理、需要完成课程设计的高校学生,围绕SLR(1)分析法实现一个小型编译程序,解决从高级语言源程序到四元式程序翻译的实践问题。资源包共14个文件,压缩后约22KB,以c源码、dat测试数据、asm汇编… · 2026/9/26 18:37:07

Flask搭配Django开发化妆预约系统:微信小程序全栈实践
Flask搭配Django开发化妆预约系统:微信小程序全栈实践

做化妆造预约系统,前后端技术栈怎么配才顺手?这个标题里同时出现了 Flask 和 Django,老实说第一次看到的时候我也愣了一下——这两个框架平时很少出现在同一个项目里。但实际做下来你会发现,这个组合不但不冲突,反而把… · 2026/9/26 18:37:07

Java GC核心知识点全梳理:GC Root、循环引用与三色标记法详解
Java GC核心知识点全梳理:GC Root、循环引用与三色标记法详解

Java GC核心知识点整合:从GC Root到三色标记法的一次彻底梳理每次排查线上OOM或者JVM频繁Full GC的时候,我总会习惯性地先打开堆转储文件,顺着引用链一路往上翻。翻到最顶端的某个"根"时,真相往往就藏在那条引用链上。这… · 2026/9/26 18:37:07

Jev决策模型与TypeSafe AI:从API Key到置信度路由的完整工程实践
Jev决策模型与TypeSafe AI:从API Key到置信度路由的完整工程实践

1. Jev 在 TypeSafe 决策体系里到底扮演什么角色1.1 Jev 与 TypeSafe AI 的关系先说个容易混淆的点:Jev 不是某个 JavaScript 工具库,也不是冷门框架的名字,它是 TypeSafe 决策体系里的一个模型服务。和常见的聊天模型不同,Jev 的… · 2026/9/26 18:37:00

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码