ARTICLE DETAIL

资讯详情

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

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

使用 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),仅供参考
返回列表