

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 進階連線案例
<a name="connectivity-scenarios"></a>

適用於 SAP ABAP 的 AWS SDK 透過對 AWS 端點進行 HTTPS 呼叫 AWS 服務 來使用 。一般而言， 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. 選擇 **Execute (執行)**。

1. 在功能表中，選擇**用戶端** > **Proxy 伺服器**。

1. 將 **Proxy 設定**設為**作用中**。

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 流量，然後在將其傳遞至端點之前重新加密。此組態通常需要防火牆向使用 的 SAP 系統發行自己的憑證 AWS 服務。您必須在 中安裝防火牆的 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.
```