本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
進階連線案例
適用於 SAP ABAP 的 AWS SDK 透過對 AWS 端點進行 HTTPS 呼叫 AWS 服務 來使用 。一般而言, AWS 端點可透過網際網路存取。SAP 系統必須能夠連線到網際網路,以建立這些傳出連線。適用於 SAP ABAP 的 SDK 永遠不需要從網際網路到 SAP 系統的傳入連線。
下列案例提供建立傳出連線的不同方式。
透過代理伺服器的連線
若要透過代理伺服器建立連線,請使用下列步驟。
-
在 SDK 中,前往交易
SICF。 -
選擇 Execute (執行)。
-
在功能表中,選擇用戶端 > Proxy 伺服器。
-
將 Proxy 設定設為作用中。
-
在下列地址的無代理欄位中,列出以分號分隔的任何例外狀況。
-
在 HTTP 通訊協定和 HTTPs 通訊協定欄位中,指定代理伺服器的連線詳細資訊。
SDK 不知道代理伺服器,且不需要任何設定即可使用 SAP 系統的代理伺服器組態。
注意
如果您使用 Amazon EC2 執行個體中繼資料身分驗證,則 SAP 系統無法使用代理伺服器存取位於 的本機執行個體中繼資料http://169.254.169.254。您必須在下列地址的無代理169.254.169.254欄位中包含 。
透過封包檢查防火牆的連線
您可以設定封包檢查防火牆以進行傳出連線。這些防火牆會解密 SSL 流量,然後在將其傳遞至端點之前重新加密。此組態通常需要防火牆向使用 的 SAP 系統發行自己的憑證 AWS 服務。您必須在 中安裝防火牆的 CA 憑證STRUST。如需詳細資訊,請參閱 HTTPS 連線。
閘道端點
有些 AWS 服務 提供閘道端點,為 VPC 提供無需網際網路的高效能存取。這些端點對適用於 SAP ABAP 的 SDK 來說是透明的,不需要任何組態。
如需詳細資訊,請參閱閘道端點。
自訂界面端點
如果您需要使用自訂端點覆寫預設端點解析度,您可以使用介面端點來提供 VPC 無需網際網路的高效能存取。如需詳細資訊,請參閱設定介面端點。
不使用私有 DNS 時,這些端點有自己的 DNS 地址,而且 ABAP 程式必須明確覆寫一般的端點解析邏輯。如需詳細資訊,請參閱 AWS re:Post – 為什麼我無法解析介面 VPC 端點的服務網域名稱?
在下列範例中,會為 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 組態中定義路由自訂端點,而不是在程式碼中,如下一節所示。
進階路由
在上一節中,我們示範如何在 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 和用戶端特定,因此可以為不同的系統定義個別路由。
存取多個區域中的端點
AWS 端點會自動從您的 SDK AWS 區域 設定檔中定義的預設值決定。您也可以透過程式設計方式指定區域,覆寫預設區域。這可以在原廠CREATE()方法中覆寫,或在稍後使用 SDK 的組態物件覆寫。如需詳細資訊,請參閱程式設計組態。
在下列範例中,原廠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.