适用于 SAP ABAP 的 Amazon SDK features - Amazon 适用于 SAP 的 SDK ABA
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 SAP ABAP 的 Amazon SDK features

适用于 SAP ABAP 的 Amazon SDK 提供以下功能。

编程配置

使用适用于 SAP ABAP 的 Amazon SDK 的 /n/AWS1/IMG IMG 交易,使用适用于 SAP ABAP 的 Amazon SDK 的自定义业务配置应用程序——BTP 版本进行编程配置。

如需开始进行编程配置,请先使用 get_config( ) 命令检索配置对象。

data(lo_config) = lo_s3->get_config( ).

所有配置对象均使用 /AWS1/IF_RT_CONFIG 接口,其中包括与 IMG 对应的 GETter 和 SETter。例如,您可以覆盖默认区域。请参阅以下示例命令。

lo_s3->get_config( )->/aws1/if_rt_config~set_region( 'us-east-1' ).

有些配置对象(如最大重试次数)没有 IMG 表示,只能以编程方式进行设置。请参阅以下示例命令。

lo_s3->get_config( )->/aws1/if_rt_config~set_max_attempts( 10 ).

的配置对象 Amazon Web Services 还可以包括中未表示的特定于服务的方法/aws1/if_rt_config。例如,Amazon S3 可以使用 foobucket.s3.region.amazonaws.com 虚拟端点或 s3.region.amazonaws.com/foobucket 路径样式,对 foobucket 存储桶进行寻址。您可以使用以下示例命令,强制使用路径样式。

lo_s3->get_config( )->set_forcepathstyle( abap_true ).

有关服务配置的更多信息,请参阅 适用于 SAP ABAP 的 Amazon SDK — API 参考指南

Waiter

使用异步 Amazon API 时,您需要等待特定资源可用后再采取进一步的操作。例如,的 CREATETABLE() API Amazon DynamoDB 会立即使用表格状态进行响应CREATING。只有当表状态更改为 ACTIVE 后,才能启动读取或写入操作。服务员使您能够在对 Amazon 资源执行操作之前确认资源是否处于特定状态。

服务员使用服务操作来轮询 Amazon 资源的状态,直到资源达到预期状态或确定资源未达到所需状态。通过编写代码来持续轮询 Amazon 资源的操作可能既耗时又容易出错。Waiter 负责代表您执行轮询,有助于简化流程。

查看以下使用 Waiter 的 Amazon S3 示例。

DATA(lo_session) = /aws1/cl_rt_session_aws=>create( cv_pfl ). DATA(lo_s3) = /aws1/cl_s3_factory=>create( lo_session ). “ Create a bucket - initiates the process of creating an S3 bucket and might return before the bucket exists lo_s3→createbucket( iv_bucket = |example-bucket| ). “ Wait until the newly created bucket becomes available lo_s3->get_waiter( )->bucketexists( iv_max_wait_time = 200 iv_bucket = |example-bucket| ).
  • 本示例使用 Amazon S3 客户端创建存储桶。执行 get_waiter() 命令以指定 bucketexists 的时机。

  • 请务必为每个 Waiter 指定 iv_max_wait_time 参数。此参数表示 Waiter 在完成指定操作前的等待总时长。在上述示例中,Waiter 可运行 200 秒。

  • 必填参数中需要输入其他信息。在上述示例中,必须为 iv_bucket 参数输入 Amazon S3 存储桶名称。

  • /AWS1/CX_RT_WAITER_FAILURE 异常表示 Waiter 的等待时长已超出 iv_max_wait_time 参数指定的最大时长。

  • /AWS1/CX_RT_WAITER_TIMEOUT 异常表示 Waiter 因未达到所需状态而停止运行。

分页器

有些 Amazon Web Service 操作会提供分页响应。分页后,这些操作会在每次响应时返回固定数量的数据。您需要使用令牌或标记发送后续请求,才能检索整组结果。例如,Amazon S3 ListObjectsV2 操作每次最多只能返回 1000 个对象。您必须使用相应令牌发送后续请求,才能获得下一页的结果。

分页流程会连续发送请求,以从上次请求中断的地方继续操作。分页器是一种结果型迭代器,由适用于 SAP ABAP 的 SDK 提供。即使不了解使用分页令牌的 API 底层机制,也能轻松使用分页 API。

分页器应用

您可以使用会返回分页器对象的 get_paginator() 方法创建分页器。分页器对象会调用正在进行的分页操作。分页器对象会接受需要提供给底层 API 的参数。分页流程会返回迭代器对象,可使用 has_next()get_next() 方法迭代分页结果。

  • has_next() 会返回布尔值,指示调用操作是否还有更多可用响应或页面。

  • get_next() 会返回操作响应。

以下示例列出了使用分页器检索到的 S3 存储桶中的所有对象。

DATA(lo_session) = /aws1/cl_rt_session_aws=>create( 'DEMO' ). DATA(lo_s3) = /aws1/cl_s3_factory=>create( lo_session ). TRY. DATA(lo_paginator) = lo_s3->get_paginator( ). DATA(lo_iterator) = lo_paginator->listobjectsv2( iv_bucket = 'example_bucket' ). WHILE lo_iterator->has_next( ). DATA(lo_output) = lo_iterator->get_next( ). LOOP AT lo_output->get_contents( ) INTO DATA(lo_object). WRITE: / lo_object->get_key( ), lo_object->get_size( ). ENDLOOP. ENDWHILE. CATCH /aws1/cx_rt_generic INTO DATA(lo_ex). MESSAGE lo_ex->if_message~get_text( ) TYPE 'I'. ENDTRY.

重试行为

利用适用于 SAP ABAP 的 SDK,您可以为针对 Amazon Web Services 发出的由于节流或暂时错误而失败的请求配置最大重试次数。服务客户端级别允许的重试次数(即 SDK 在失败并引发异常之前重试操作的次数)由服务配置对象中的 AV_MAX_ATTEMPTS 属性指定。创建服务客户端对象时,SDK 会将 AV_MAX_ATTEMPTS 属性配置为默认值 3。服务配置对象可用于以编程方式将最大重试尝试次数设置为所需值。有关更多详细信息,请参阅以下示例。

“ Retrieve configuration object using Amazon S3 service’s get_config( ) method DATA(lo_config) = lo_s3->get_config( ). “ Set the maximum number of retries to 5 lo_config->/aws1/if_rt_config~set_max_attempts( 5 ). “ Get the value of the maximum retry attempt. DATA(lv_max_retry_attempts) = lo_config->/aws1/if_rt_config~get_max_attempts( ).
注意

尽管配置对象 ABAP SDK 允许使用 /AWS1/IF_RT_CONFIG~SET_RETRY_MODE() 方法设置重试模式,但 SDK 仅支持 standard 重试模式。有关更多信息,请参阅 Amazon SDK 和工具参考指南中的重试行为