- 示例工程
- 教程
- 后端
【免费下载链接】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.
本指南基于 AWS 官方示例仓库aws-doc-sdk-examples中 sap-abap/services/asc/README.md 展开,系统讲解如何通过 AWS SDK for SAP ABAP 与 Amazon EC2 Auto Scaling 集成。Auto Scaling 能够通过扩缩策略或定时扩缩自动调整 EC2 实例数量,本文将从环境准备、10 个单操作(Single Actions)示例、单元测试与清理流程四个层面,带你掌握在 SAP ABAP 环境中管理 Auto Scaling 组的完整实战方案。
概述:Auto Scaling 与 SAP ABAP SDK
Amazon EC2 Auto Scaling会自动扩展 EC2 实例,既可通过扩缩策略(scaling policies)触发,也可按计划执行定时扩缩(scheduled scaling)。在 SAP 系统中,借助 AWS SDK for SAP ABAP,你可以通过 ABAP 类直接调用 Auto Scaling 的 API,实现对实例组的创建、更新、删除、容量调整与监控等全生命周期管理。
本示例的核心实现位于 sap-abap/services/asc/#awsex#cl_asc_actions.clas.abap,该类将所有操作封装为对/aws1/if_asc接口(Auto Scaling 服务客户端)的调用,并配套了完整的本地 ABAP 单元测试类 sap-abap/services/asc/#awsex#cl_asc_actions.clas.testclasses.abap。
⚠ 重要提示(费用与安全)
运行本示例代码可能产生 AWS 账户费用,务必注意以下几点:
- 费用风险:创建 Auto Scaling 组、启动 EC2 实例均会产生费用;运行测试同样可能产生费用。建议先评估 AWS 定价 与 免费套餐。
- 最低权限原则:建议为代码授予最低权限(least privilege),只授予完成任务所需的最小权限集,详见 AWS IAM 用户指南中的 "Grant least privilege" 最佳实践。
- 区域可用性:本代码未经所有 AWS 区域测试,部分服务仅在特定区域可用。
- 危险测试:配套单元测试被标记为
DANGEROUS(危险级别),会真实创建和删除 AWS 资源,仅应在合适的测试 AWS 账户中运行。
环境准备(Prerequisites)
运行示例前需要满足以下条件:
- AWS 账户:拥有有效的 AWS 账户。
- 默认凭证与区域配置:按 AWS SDK for SAP ABAP 的"Configuring Global Settings"指南配置默认凭证和默认 AWS 区域。
- 测试凭证配置文件:本示例的单元测试使用名为
ZCODE_DEMO的 profile(见测试类第 10 行cv_pfl常量),可通过/aws1/cl_rt_session_aws=>create( iv_profile_id = 'ZCODE_DEMO' )创建会话。
完整的仓库级准备说明见 sap-abap/README.md,其中明确了示例布局:services目录下每个子目录对应一个 AWS 服务,示例可通过 SE24(ABAP 类构建器)执行。
核心类结构:/awsex/cl_asc_actions
示例实现集中在类 sap-abap/services/asc/#awsex#cl_asc_actions.clas.abap。类的设计要点如下:
- 构造方式:构造函数接收可选的
/aws1/cl_rt_session_base会话对象,并通过工厂类/aws1/cl_asc_factory=>create( io_session )创建 Auto Scaling 服务客户端ao_asc。若传入会话则创建客户端,未绑定会话时客户端保持为空。 - 数据类型约定:所有方法参数均使用 AWS SDK 生成的数据类型,如
iv_group_name使用/aws1/ascxmlstringmaxlen255(最长 255 字符)、iv_min_size使用/aws1/ascautoscgroupminsize、iv_max_size使用/aws1/ascautoscgroupmaxsize等。 - 异常处理:每个方法都使用
TRY...CATCH捕获/aws1/cx_rt_generic及 Auto Scaling 专属异常(如cx_ascalreadyexistsfault、cx_asclimitexceededfault、cx_ascresrccontionfault、cx_ascscaactivityinprg00、cx_ascresourceinusefault等),并重新抛出以便调用方统一处理。
单操作(Single Actions)示例详解
以下 10 个操作覆盖了 Auto Scaling 组管理的核心 API 调用。每个操作在源码中均以snippet-start:[asc.abapv1.xxx]/snippet-end注释标记,便于文档抽取。
1. CreateAutoScalingGroup:创建 Auto Scaling 组
对应方法create_group(源码 L131-L178)。核心流程为:
- 创建启动模板规格对象
lo_launch_template,指定启动模板名称与版本'$Default'; - 根据是否提供 VPC 子网标识(
iv_vpc_zone_identifier)选择部署方式:- VPC 部署:调用
createautoscalinggroup时传iv_vpczoneidentifier(子网 ID 列表,如'subnet-12345,subnet-67890'); - EC2-Classic 或默认 VPC:传
it_availabilityzones(可用区列表);
- VPC 部署:调用
- 同时设置
iv_minsize(最小实例数)与iv_maxsize(最大实例数); - 创建成功后
WAIT UP TO 10 SECONDS等待组就绪,并弹出信息消息。
参数示例:
" Example: iv_group_name = 'my-auto-scaling-group' " Example: iv_launch_template_name = 'my-launch-template' " Example: iv_min_size = 1 " Example: iv_max_size = 3 " Example: iv_vpc_zone_identifier = 'subnet-12345,subnet-67890' (for VPC)2. UpdateAutoScalingGroup:更新 Auto Scaling 组
对应方法update_group(源码 L183-L202)。通过updateautoscalinggroup更新组的iv_maxsize与iv_minsize,两者均为可选参数。例如将最大实例数从 3 调整为 5:
ao_asc->updateautoscalinggroup( iv_autoscalinggroupname = iv_group_name iv_maxsize = iv_max_size iv_minsize = iv_min_size ).3. DeleteAutoScalingGroup:删除 Auto Scaling 组
对应方法delete_group(源码 L206-L227)。调用deleteautoscalinggroup后等待 10 秒。注意删除前需保证组内实例已全部终止,否则会抛出cx_ascresourceinusefault(资源占用)异常;若组正在扩缩活动进行中,则抛出cx_ascscaactivityinprg00。
4. DescribeAutoScalingGroups:查询组信息
对应方法describe_group(源码 L230-L263)。流程为:
- 将组名包装为
/aws1/cl_ascautoscgroupnames_w对象并追加到内部表lt_group_names; - 调用
describeautoscalinggroups传入组名列表; - 通过
get_autoscalinggroups( )取回结果,返回第一个(也是唯一一个)组的引用/aws1/cl_ascautoscalinggroup。
DATA(lo_output) = ao_asc->describeautoscalinggroups( it_autoscalinggroupnames = lt_group_names ). DATA(lt_groups) = lo_output->get_autoscalinggroups( ).5. TerminateInstanceInAutoScalingGroup:终止组内实例
对应方法terminate_instance(源码 L266-L288)。调用terminateinstinautoscgroup,需要两个关键参数:
iv_instanceid:实例 ID,如'i-1234567890abcdef0';iv_shoulddecrementdesiredcap:是否在终止的同时减少期望容量,示例中传abap_true。
返回值通过get_activity( )取出/aws1/cl_ascactivity活动对象,可用于后续扩缩活动的追踪。
6. SetDesiredCapacity:设置期望容量
对应方法set_desired_capacity(源码 L291-L310)。调用setdesiredcapacity,除组名与期望容量外,还显式传入iv_honorcooldown = abap_false,即立即执行扩缩而不等待冷却时间(cooldown):
ao_asc->setdesiredcapacity( iv_autoscalinggroupname = iv_group_name iv_desiredcapacity = iv_capacity iv_honorcooldown = abap_false ).例如iv_capacity = 2表示将实例数调整为 2。
7. DescribeAutoScalingInstances:查询组内实例详情
对应方法describe_instances(源码 L313-L331)。接收实例 ID 列表it_instance_ids(类型tt_instanceids),调用describeautoscalinginstances并通过get_autoscalinginstances( )返回实例详情内部表。即使实例列表为空,该调用也不会失败——这是测试用例特意验证的行为。
8. DescribeScalingActivities:查询扩缩活动
对应方法describe_scaling_activities(源码 L334-L352)。调用describescalingactivities并传入组名,通过get_activities( )返回扩缩活动列表。扩缩活动是 Auto Scaling 执行扩容/缩容操作的审计记录,可用于排查实例数变化原因。
9. EnableMetricsCollection:启用 CloudWatch 指标采集
对应方法enable_metrics(源码 L355-L374)。调用enablemetricscollection时需传入:
iv_group_name:Auto Scaling 组名;it_metrics:要启用的指标列表,如'GroupMinSize'、'GroupMaxSize'、'GroupInServiceInstances'等;iv_granularity:指标粒度,示例固定为'1Minute'。
ao_asc->enablemetricscollection( iv_autoscalinggroupname = iv_group_name it_metrics = it_metrics iv_granularity = '1Minute' ).启用后,组级指标可上报到 CloudWatch 用于告警与自动扩缩决策。
10. DisableMetricsCollection:停用 CloudWatch 指标采集
对应方法disable_metrics(源码 L377-L393)。调用disablemetricscollection只需组名,即可停止该组所有指标的 CloudWatch 上报。
辅助方法:get_group_instances
除上述 API 操作外,类还提供了私有辅助方法get_group_instances(源码 L396-L411)。它通过describeautoscalinggroups查询组后调用get_instances( )直接返回组内实例列表,是测试与清理流程中频繁复用的工具方法。
单元测试:DANGEROUS 级别的真实资源测试
测试类 sap-abap/services/asc/#awsex#cl_asc_actions.clas.testclasses.abap 声明为FOR TESTING DURATION LONG RISK LEVEL DANGEROUS,意味着它会在真实 AWS 账户中创建和销毁资源。运行测试请遵循 sap-abap/README.md#Tests 中的指引,并仅在隔离的测试账户中执行。
测试脚手架(class_setup / class_teardown)
测试类的class_setup(L200-L248)完成以下准备工作:
- 使用 profile
ZCODE_DEMO创建会话,并初始化 Auto Scaling 客户端、EC2 客户端与待测的/awsex/cl_asc_actions实例; - 调用
find_default_vpc定位默认 VPC 及其子网——找不到默认 VPC 时直接fail; - 通过
/awsex/cl_utils=>get_random_string( )生成唯一资源名(如asc-test-<uuid>、asc-tmpl-<uuid>); - 调用
create_launch_template创建两个启动模板(主测试与终止测试各一)。启动模板使用 t2.micro 实例类型,并按区域选择 AMI(如us-west-2使用ami-0a38c1c38a15fed74、us-east-1使用ami-0aa7d40eeae50c9a9、eu-west-1使用ami-0d940f23d527c3ab1),模板资源打上convert_test=true标签便于手工清理。
class_teardown(L250-L337)负责彻底清理:先将 min size 与 desired capacity 置 0,逐一终止组内实例,等待 30 秒后删除组,最后删除两个启动模板。
轮询等待机制:wait_for_group_ready
由于 EC2 实例从启动到InService状态存在延迟,测试类实现了轮询方法wait_for_group_ready(L85-L133):
- 最多重试 60 次,每次间隔 5 秒;
- 每次轮询调用
describeautoscalinggroups获取组内实例,检查每个实例的get_lifecyclestate( )是否等于期望状态(默认'InService'); - 若
desired capacity为 0,则视为无实例可等、直接就绪; - 超时未就绪则断言失败。
10 个测试方法对应关系
| 测试方法 | 验证的操作 | 关键断言 |
|---|---|---|
createautoscalinggroup | CreateAutoScalingGroup | 组被创建且名称匹配 |
describeautoscalinggroups | DescribeAutoScalingGroups | 返回组的名称一致 |
updateautoscalinggroup | UpdateAutoScalingGroup | max size 更新为 3 |
setdesiredcapacity | SetDesiredCapacity | desired capacity 更新为 0 |
describeautoscalinginsts | DescribeAutoScalingInstances | 空列表调用不报错 |
describescalactivities | DescribeScalingActivities | 调用不失败 |
enablemetricscollection | EnableMetricsCollection | get_enabledmetrics( )非空 |
disablemetricscollection | DisableMetricsCollection | get_enabledmetrics( )为空 |
terminateinstinautoscgroup | TerminateInstanceInAutoScalingGroup | 返回 activity 且描述包含实例 ID |
deleteautoscalinggroup | DeleteAutoScalingGroup | 组被删除(describe 返回空) |
其中terminateinstinautoscgroup测试会先把独立测试组的 desired capacity 调到 2,等待实例就绪后终止第一个实例,并断言返回的get_description( )中包含实例 ID;deleteautoscalinggroup则单独创建asc-del-<uuid>组验证删除流程,避免影响其他测试。
运行示例的方法
每个示例都是可通过 SE24 执行的 ABAP 类。在 SAP 系统中,按以下步骤操作:
- 在 SE24(Class Builder)中打开类
/AWSEX/CL_ASC_ACTIONS; - 直接实例化类并调用对应方法,例如:
DATA(lo_asc_actions) = NEW /awsex/cl_asc_actions( ). " 依赖默认凭证配置 lo_asc_actions->create_group( iv_group_name = 'my-auto-scaling-group' iv_launch_template_name = 'my-launch-template' iv_vpc_zone_identifier = 'subnet-12345' iv_min_size = 1 iv_max_size = 3 ).- 运行单元测试时,在 SE24 中进入测试类
ltc_awsex_cl_asc_actions,以 ABAP 单元测试(RISK LEVEL DANGEROUS、长时运行)方式执行。
详细的环境配置(默认凭证与区域)说明见 sap-abap/README.md 中引用的 AWS SDK for SAP ABAP 开发者指南。
实践建议与常见异常
结合源码的异常捕获与测试场景,实践中需注意:
- 先清理再删除:删除 Auto Scaling 组前必须将实例数归零并等待实例终止,否则触发
cx_ascresourceinusefault。测试的 teardown 流程是标准范式:置零 → 终止实例 → 等待 → 删除组。 - 处理资源已存在:创建组时若同名组已存在会抛出
cx_ascalreadyexistsfault;创建启动模板失败时,可回退查询同名模板复用其 ID(测试的create_launch_template已演示该容错模式)。 - 等待状态收敛:扩缩是异步过程,生产代码应使用轮询(参考
wait_for_group_ready)而非固定WAIT UP TO语句;示例中的固定等待仅用于简化演示。 - 冷却时间语义:
setdesiredcapacity传入honorcooldown = abap_false表示绕过冷却立即执行,在测试或紧急扩缩场景中很有用。
其他资源
- Auto Scaling 用户指南与 API 参考(Amazon EC2 Auto Scaling 官方文档)
- AWS SDK for SAP ABAP Auto Scaling 参考
- 仓库总览:sap-abap/README.md
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
- 示例工程
- 教程
- 后端
【免费下载链接】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.
相关推荐
使用 AWS SDK for Kotlin 操作 Amazon EC2 Auto Scaling:完整场景示例与测试指南
使用 AWS SDK for Kotlin 操作 Amazon EC2 Auto Scaling:完整场景示例与测试指南 导读 本文基于 aws doc sdk
示例工程教程后端使用 AWS SDK for Ruby 操作 Amazon EC2 Auto Scaling:Hello Auto Scaling 入门示例解析
使用 AWS SDK for Ruby 操作 Amazon EC2 Auto Scaling:Hello Auto Scaling 入门示例解析 本篇指南基于当
示例工程教程后端ComfyUI-WanVideoWrapper:8GB 显卡跑 14B AI 视频模型的完整部署与实操指南
ComfyUI WanVideoWrapper:8GB 显卡跑 14B AI 视频模型的完整部署与实操指南 ComfyUI WanVideoWrapper 是面
示例工程教程后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考