

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

# 高级连接场景
<a name="connectivity-scenarios"></a>

适用于 SAP ABAP 的 AWS SDK AWS 服务 通过对 AWS 端点进行 HTTPS 调用来消耗。通常可通过互联网访问 AWS 端点。SAP 系统必须联网才能建立出站连接。适用于 SAP ABAP 的 SDK 从不需要在互联网和 SAP 系统之间建立入站连接。

以下场景提供了不同的出站连接建立方法。

**Topics**
+ [通过代理服务器连接](#proxy-server)
+ [通过数据包检查防火墙连接](#packet-firewall)
+ [网关端点](#gateway-endpoints)
+ [自定义接口端点](#interface-endpoints)
+ [高级路由](#advanced-routing)
+ [多区域端点访问](#multiple-regions)

## 通过代理服务器连接
<a name="proxy-server"></a>

如需通过代理服务器建立连接，请遵循以下步骤。

1. 进入 SDK，转到 **`SICF`** 事务。

1. 选择**执行**。

1. 进入菜单，选择**客户端** > **代理服务器**。

1. 将**代理设置**设为**活动**状态。

1. 在**以下地址无代理**字段中，用分号列出所有异常。

1. 在 **HTTP 协议**和**HTTPs 协议**字段中，指定代理服务器的连接详细信息。

SDK 虽然不知道代理服务器的存在，但无需任何设置就能使用 SAP 系统的代理服务器配置。

**注意**  
如果您使用 [Amazon EC2 实例元数据身份验证](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/system-authentication.html#metadata-authentication)，那么 SAP 系统将无法使用代理服务器访问位于的本地实例元数据`http://169.254.169.254`。请务必在*以下地址无代理*字段中加入 `169.254.169.254`。

## 通过数据包检查防火墙连接
<a name="packet-firewall"></a>

您可以配置数据包检查防火墙，用于建立出站连接。这些防火墙可解密并重新加密 SSL 流量，然后将其传递到端点。此配置通常要求防火墙向使用 AWS 服务的 SAP 系统签发自己的证书。必须将防火墙的 CA 证书安装在 `STRUST` 中。有关更多信息，请参阅 [HTTPS 连接](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/prerequisites.html#https-connectivity)。

## 网关端点
<a name="gateway-endpoints"></a>

有些 AWS 服务 提供网关终端节点，以便在没有互联网的情况下为 VPC 提供高性能访问。这些端点对适用于 SAP ABAP 的 SDK 透明，无需进行任何配置。

有关更多信息，请参阅[网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html)。

## 自定义接口端点
<a name="interface-endpoints"></a>

如需使用自定义端点覆盖默认端点解析，则可以使用接口端点为 VPC 提供无需联网的高性能访问权限。有关更多信息，请参阅[配置接口端点](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html)。

这些端点不使用私有 DNS 时，会使用专有的 DNS 地址，同时 ABAP 程序必须显式覆盖常用的端点解析逻辑。有关更多信息，请参阅 AWS re:Post — [为什么我无法解析接口 VPC 终端节点的服务域名？](https://repost.aws/knowledge-center/vpc-interface-configure-dns)

在以下示例中，为 AWS STS 和创建了一个接口终端节点 Amazon Translate。SAP 系统没有使用私有 DNS，而是使用自定义端点调用服务。`/AWS1/IMG` 中定义的逻辑资源表示的是物理接口端点地址，如 `vpce-0123456789abcdef-hd52vxz.translate.us-west-2.vpce.amazonaws.com`。这样可避免在代码中对 DNS 进行硬编码。

在以下代码中，首先将 `/AWS1/IMG` 中的逻辑资源解析为物理端点名称。然后将它们提供给 AWS 会话类（用于 AWS STS 担任 IAM 角色）和翻译 API 类的工厂方法。

```
" This example assumes we have defined our logical endpoints in /AWS1/IMG
" as logical resources so that we don't hardcode our endpoints in code.
" The endpoints may be different in Dev, QA and Prod environments.
DATA(lo_config) = /aws1/cl_rt_config=>create( 'DEMO' ).
DATA(lo_resolver) = /aws1/cl_rt_lresource_resolver=>create( lo_config ).

" logical resource STS_ENDPOINT should resolve to the interface endpoint
" for example vpce-0123456789-abcdefg.sts.us-west-2.vpce.amazonaws.com
DATA(lv_sts_endpoint) = lo_resolver->resolve_lresource( 'STS_ENDPOINT' ).

" logical resource XL8_ENDPOINT should resolve to the interface endpoint
" e.g. vpce-0123456789abcdefg-12345567.translate.us-west-2.vpce.amazonaws.com
DATA(lv_xl8_endpoint) = lo_resolver->resolve_lresource( 'XL8_ENDPOINT' ).

" the session itself uses the sts service to assume a role, so the
" session creation process requires a custom endpoint, specified here
DATA(lo_session) = /aws1/cl_rt_session_aws=>create(
  iv_profile_id = 'DEMO'
  iv_custom_sts_endpoint = |https://{ lv_sts_endpoint }|
).

" now we create an API object, and override the default endpoint with 
" the custom endpoint
DATA(lo_xl8)     = /aws1/cl_xl8_factory=>create(
  io_session = lo_session
  iv_custom_endpoint = |https://{ lv_xl8_endpoint }| " provide custom endpoint
).
" now calls to lo_xl8 go to custom endpoint...
```

如示例所示，所有调用 `go_xl8` 的方法都会转到端点 `https://vpce-0123456789abcdefg-12345567.translate.us-west-2.vpce.amazonaws.com`。也可以在IMG配置中而不是在代码中定义路由自定义端点，如下一节所示。

## 高级路由
<a name="advanced-routing"></a>

 在上一节中，我们展示了如何在 SDK 模块的出厂方法的`iv_custom_endpoint`参数中指定自定义端点。随着使用 SDK 的 ABAP 程序数量的增加，这可能会变得难以管理。可以在 SDK 配置文件中配置从 AWS 服务 到自定义终端节点的映射。对于每个 SID、客户端和方案，可以将服务三字母缩写 (TLA) 映射到端点 URL：


|  TLA  |  自定义终端节点 URL  | 
| --- | --- | 
| BDR | https://vpce-23456789abcdef012-3c4d5e6f.bedrock-runtime.us-east-1.vpce.amazonaws.com | 
| LMD | https://vpce-123456789abcdef01-2b3c4d5e.lambda.us-east-1.vpce.amazonaws.com | 
| S3 | https://vpce-0123456789abcdef0-1a2b3c4d.s3.us-east-1.vpce.amazonaws.com | 

 使用此配置，您无需在出厂方法调用`iv_custom_endpoint`中指定。自定义终端节点是从配置表中自动选择的。该配置特定于 SDK 配置文件，因此您可以创建具有不同路由的多个配置文件以满足您的需求。与其他 SDK 配置文件配置一样，路由是特定于 SID 和客户端的，因此可以为不同的系统定义单独的路由。

## 多区域端点访问
<a name="multiple-regions"></a>

AWS 终端节点是根据您在 SDK 配置文件中定义的默认值 AWS 区域 自动确定的。您也能以编程方式指定区域以覆盖默认区域。可使用 `CREATE()` 工厂方法或者之后使用 SDK 配置对象来覆盖此默认区域。有关更多信息，请参阅[编程配置](https://docs.aws.amazon.com/sdk-for-sapabap/latest/developer-guide/features.html#programmatic-configuration)。

以下示例使用 `CREATE()` 工厂方法设置区域，并在 `us-east-1` 和 `us-west-2` 区域中列出 Amazon SQS 队列。

```
REPORT zdemo_sqs_queue_list.
parameters: profile type /AWS1/RT_PROFILE_ID OBLIGATORY.

START-OF-SELECTION.
DATA(go_session) = /aws1/cl_rt_session_aws=>create( profile ).
data(lt_region) = VALUE stringtab(
  ( |us-east-1| )
  ( |us-west-2| )
).

LOOP AT lt_region INTO DATA(lv_region).
  DATA(go_sqs)  = /aws1/cl_sqs_factory=>create(
    io_session = go_session
    iv_region = conv /AWS1/RT_REGION_ID( lv_region )
  ).
  WRITE: / lv_region COLOR COL_HEADING.
  LOOP AT go_sqs->listqueues( )->get_queueurls( ) INTO DATA(lo_url).
    WRITE: / lo_url->get_value( ).
  ENDLOOP.
ENDLOOP.
```