亚马逊AWS官方博客

如何通过 ABAP 调用 Amazon S3 大幅降低 SAP 存储成本 — Amazon SDK for SAP ABAP 与 S3 无缝集成配置手册

一.前言

自 2008 年以来,越来越多的客户选择在 Amazon 上运行其 SAP 工作负载,其中许多 SAP 客户使用 ABAP 开发和增强其 SAP 业务流程。许多客户的业务流程依赖于自定义的 ABAP 代码,并在内部或通过合作伙伴拥有 ABAP 开发团队。然而,通过 ABAP 使用 Amazon 服务,进行机器学习或语言翻译等功能的创新是很麻烦的。而 Amazon SDK for SAP ABAP 使 ABAP 开发人员能够轻松地通过使用 ABAP 编程语言集成 Amazon 服务,实现基于 SAP 的业务流程的现代化和转换,而无需映射数据格式、创建和维护许多点对点连接,也无需集成 SAP 和 Amazon 安全模型。当导入 Amazon SDK 到基于 NetWeaver 的 ABAP 系统中时,Amazon SDK for SAP ABAP 为 SAP 系统引入了一组 SAP ABAP 类,以便使用 ABAP 编程语言构造 Amazon 各种服务的 API。ABAP 开发人员可以在报告和程序中使用这些基于 ABAP 的类来增强现有的 SAP 功能或开发新的应用程序。这些使用场景包括自动开票的智能文档处理、使用 Amazon Translate 的语言翻译,或使用 Amazon S3 在 SAP 和第三方应用程序之间交换文件。Amazon SDK for SAP ABAP 工作原理如下图所示,其部署在 SAP 系统后,通过 Rest API 调用 Amazon 多达 200 多个服务。

通过 Amazon SDK for SAP ABAP 可以访问 Amazon 的服务,包括 S3、SageMaker、Bedrock 等,使用 Amazon SDK for SAP ABAP 集成 Amazon 最新的服务,比如大语言模型等。本博文展示了如何为 SAP 系统配置 Amazon SDK 的详细过程,然后通过部署一个示例 ABAP 程序,该程序列出了存储桶(Amazon S3)中的对象的内容。此外,对于 ECC on HANA 以及 S/4HANA 的客户来说,不管是采用线下部署,还是云上部署,抑或是采购了 SAP RISE,都会面临大文件存储的困扰。一方面很多凭证和文档,是业务的重要参考和佐证;另外一方面,HANA 数据库的内存和存储都相当昂贵,把文件存储在 HANA 数据库中,占用了内存和存储,大幅增加了 SAP 的资源成本。此时,把文件存储到成本低廉的 S3 中,就成为了一个非常好的选项。

通过本文的介绍,希望读者通过对该工具包的使用能达到举一反三的效果,根据自家的 SAP 系统的业务场景去调用亚马逊云科技上的各种服务,满足其业务的创新需求。

二. 部署准备

1. SAP_BASIS 版本要求

Amazon SDK for SAP ABAP 需要部署在 SAP NetWeaver 7.4 及更高版本,该组件部署后不会改变 SAP 任何的表。需要的 SAP_BASIS 的组件版本必须满足大于 740 SP 0008 以上的版本。

2. Kernel 版本要求

Amazon SDK 使用 Internet Communication Manager (ICM) for HTTP 通讯协议,其加密、HTTP、XML 和 JSON 功能依赖于 SAP Kernel。推荐使用 SAP 系统 Kernel 的最新版本。对于 Kernel 版本的最低要求是 741。如果使用 Kernel 741 或者 742,其小版本最低要满足如下要求。

  • 741 patch 212
  • 742 patch 111

3. 需要调整的参数

SAP 系统必须支持 SAP Notes 中所述的服务器名称指示(SNI)。通过执行 T-code:RZ10,去维护 DEFAULT.PFL 文件,增加或修改如下参数。

icm/HTTPS/client_sni_enabled = TRUE

请参考下面的 notes 去设置该参数。

  • SAP Note 2124480 – ICM/Web Dispatcher: TLS Extension Server Name Indication (SNI) as client
  • SAP Note 2582368 – SapSSL update for client-side sending of TLS extension SNI by saphttp, sapkprotp, sldreg

4. 必须安装的 Notes

检查 note 1856171 和2619546 是否已经安装部署在 SAP 系统中。如果没有,需要从 SAP 官网 https://support.sap.com/en/index.html 下载此两个 notes,并安装此补丁程序到 SAP 系统中。

5. Outbound connectivity

Amazon SDK for SAP ABAP 使用 HTTPS 协议,SAP 系统向外发送 HTTPS 消息,不需要入站连接。

6. HTTPS connectivity 证书配置

所有 Amazon API 调用都使用加密的 HTTPS 通道进行,SAP 系统必须配置 Amazon 授信的证书以建立出站 HTTPS 连接。操作步骤如下:

  • 执行 T-code strust 导入刚下载的五个证书

通过点击上图左下角的导入按钮依次倒入如下图下载的 5 个证书。

导入成功后,其结果显示如下:

7. Access to Amazon EC2 instance metadata

ABAP 系统对本机 localhost(http://169.254.169.254)进行未加密的 HTTP 连接,以启用 Amazon EC2 实例元数据。HTTP 通道仅用于从本地服务器检索 Amazon 凭据。HTTP 流量仅在主机内进行,元数据允许 Amazon 中的 SAP 系统安全地验证自身,而无需在 SAP Secure Store 中存储密钥。此功能仅适用于 Amazon EC2 SAP 系统。

SAP 系统能够进行未加密的出站 HTTP 连接,通过执行 T-code RZ10 修改  default.pfl,而后重启实例生效。

icm/server_port_<xx> = PROT=HTTP,PORT=8000,TIMEOUT=60,PROCTIMEOUT=600

使用以下参数可以在不启用入站连接的情况下启用出站 HTTP 连接

icm/server_port_<xx> = PROT=HTTP,PORT=0,TIMEOUT=60,PROCTIMEOUT=600

执行 T-code smicm 去判断该服务是否生效,其示例如下:

三. 安装 Amazon SDK for SAP ABAP

1. 下载安装包

通过下面的网址下载 Amazon SDK for SAP ABAP 安装软件。

https://sdk-for-sapabap.thinkwithwp.com/awsSdkSapabapV1/release/abapsdk-LATEST.zip

2. 下面的步骤验证该安装包是否被篡改(可选)

  • 拷贝下面 public key 的内容,存到一个名称为 abapsdk-signing-key.pem 的文件
    -----BEGIN PUBLIC KEY-----
    MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmS3oN3wKBh4HJOGaOtye
    15RR5909nuw0JxOvEDCT7O9wUrXS3mjgEw6b6hvr2dLdoFr+eH4ewT5bVl6U3gDv
    051sTdEJJpfLEWJJZZNK3v9fGWKyXgYe+ifmsPmf4lhNd2auzpvIy2UrlSYijCRB
    BWZFW+Ux0OkILz+8vCFSXMZ6Z0qtLIlZFbGrn6A5adbwwzfOqkg9BUEZK0wB6TAi
    ZTnkMdBZGCBM9K2MRKKMxtrxUn+TFcAYyh5pM9tUAb2q4XE5m7092UnZG7ur/QYl
    1FSZwAhQmk8hUPgUaqOOQRC6z3TRzIGKOA/DI0cUPJMzFR4LCxEJkgh4rkRaU9V2
    O7DthUpj8b7QcQaiOpnMpBf3zWLgbjNmX0hB0Eprg8/nVRHspf3zuiscJ2lMPkz0
    cHOR3lMNsMLzm+d/gVkLt31R/JwAcFCkXTWvR8/VOWNGZZXdVUbefrfI/k7fP60B
    bzUrIlN4poq16rc4Tk5Derg+wQ7rOWjXkXop2kiCMjbYo0ol0kS/At64PLjpz8dH
    Zg25o79U9EJln+lpqZ297Ks+HoctOv2GPbeeh0s7+N0fRTyOr81EZIURLPKLVQUw
    otVRzNDgLOA7eA667NrmegZfHCmqEwK9tXakZUHAcMzRPyhALc/HtmovxdStN9h1
    JC4exOGqstAv1fX5QaTbMSECAwEAAQ==
    -----END PUBLIC KEY-----
    
  • 通过执行下面的命令,校验 SDK ZIP 文件是否被篡改
    # openssl dgst -sha256 -verify abapsdk-signing-key.pem -keyform PEM -signature abapsdk-LATEST.sig abapsdk-LATEST.zip
  • 如果没被篡改,输出结果显示“OK”

3. 解压安装包

解压该 “abapsdk-LATEST.zip”后,会发现其目录中包含众多的针对 Amazon 服务相关的子目录,每个子目录对应不同的 Amazon 服务,其目录对应关系,请参考如下 link 的说明。

https://docs.thinkwithwp.com/sdk-for-sap-abap/v1/api/latest/tla.html

transports 文件夹包含一个 core 子文件夹,该文件夹是 Amazon SDK 的核心文件夹,必须首先导入,其他的文件夹对应不同 Amazon 服务。建议首先导入该目录下的传输请求文件,再根据需要导入需要的其他文件。

4. 上传安装包

上传 K9A4TQ0.AWS 与 R9A4TQ0.AWS 至 SAP 系统传输相关如下目录中:/usr/sap/trans/cofiles 和/usr/sap/trans/data

其示例如下:

5. 导入安装包

在 SAP 系统中执行 T-code: stms,通过导入传输请求的方式导入需要的 Amazon SDK for ABAP 服务。其示例如下:

导入成功后其状态显示如下图所示:

验证该包是否导入成功,执行 T-code:/n/AWS1/img 进行确认,示例如下:

四. 配置 Amazon SDK for SAP ABAP 访问 S3

1. 设置 ssf 访问(可选项)

如果 SAP 系统在 Amazon 以外的位置运行,则需要以下附加设置,以使用 SAP 的安全存储转发(SSF)机制,加密 Amazon 身份和访问管理用户的凭据(访问密钥 ID 和秘密访问密钥)。通过在 SAP GUI 窗口中执行事务代码 SE16 来定义 SSF 应用程序,输入表名 SSFAPPLIC。配置信息如下:

通过执行t-code: /n/aw1/img,设置 ssf 参数,执行该行,设置 ssf 相关的参数。如下图所示:

按照下图输入 ssf 相关的参数,而后保存。

通过执行 t-code: /n/aw1/img,创建一个“PSE for SSF Application”,如下图所示:

按照下图所示输入关联的参数,而后点击保存。

创建后的效果,可见该状态变为了绿色,如下图所示:

最后执行“Assign an SSF application to the AWS SDK for SAP ABAP”, 制定 SSF application,如下图所示:

2. Global 设置

执行 t-code: /n/aw1/img,展开 IMG 配置,选择“Global Settings”然后选择执行“Configure Scenarios”。对于正常操作,请创建一个名为 DEFAULT 的场景,本示例选用 scen3。

接下来选择“Active Scenario”激活该场景,如下图所示。

点击 “commit scenario change”按钮,激活该场景。

3. Technical Setting

通过展开 IMG 节点“Global settings”并选择执行“Technical settings”来配置 Amazon SDK 全局配置。

点击“save”按钮,保留缺省配置。

4. 创建 SDK Profile

Application Configuration 包括创建“SDK Profile”和“logical resource resolver”配置两部分。在 SDK Profile 中,定义 SAP 相关的参数。如 SAP 系统(SID)和 client、前面步骤中配置的场景、要使用的 Amazon 区域和身份验证方法。执行 t-code: /n/aw1/img,配置示例如下所示。

首先新增一个 “sdk” 条目如下所示:

而后点击“new entries”进入配置界面。

点击“set credentials”设置用户的 AKSK 的信息。

输入 AKSK 相关的信息,而后点击保存。

设置后的效果如下图所示,可以看到“Credentials stored”状态变绿了。

5. 配置 Logical Resource Resolver

单击“new entries”,先添加一个 logical resource,如下图所示。

提前准备好接下来需要用到的 S3 bucket,本示例用到的 S3 名称是“abapsdk-workshop-jw0229”。

在 logical resource resolver 配置系统的[sid], 需要用哪个 SAP 的 client,输入前面定义的 scenario id,在 physical resource 处输入需要用到的 S3 bucket 的名称。

五. 测试

1. 下载测试文件到 S3

下载如下 link 的文件 movie_data.json 放到 S3 的存储桶,本示例用了 abapsdk-workshop-jw0229。如下图所示:

https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/example_code/dynamodb/.movie_data.json

2. 创建 ABAP 测试程序

  • 运行 t-code: SE38 在 SAPGUI
  • 定义该程序名为 ZDEMO_S3_TO_TABLE
  • 而后点击“create”按钮

定义该程序相关的参数如下:

  • Title:输入 ZDEMO_S3_TO_TABLE
  • Type:选择 Executable Program
  • Status:选择 Test Program
  • 最后点击 “Save”按钮

保存该程序为 “Local Object”,如下图所示。

从下面的 link 拷贝该程序代码,而后粘贴该代码到该程序,如下所示。

https://catalog.workshops.aws/abapsdk/en-US/lab02/lab02-01

选择“save”和 “active”按钮保存和激活该程序。

点击 “Direct Processing” 按钮准备执行该程序。

3. 测试结果

输入该 ABAP 程序的执行参数,而后运行该程序如下图所示。

执行结果如下:

Movie_data.json 文件内容如下:

查看 movie_data.json,其内容和该 ABAP 程序读取的结果一致。其结果充分验证了 Amazon SDK 通过 REST API 为 SAP 与 Amazon 各种服务提供了很好的集成,为 SAP 系统在亚马逊云科技进行各种业务场景的创新提供了便捷的接口和技术基座。

六.总结

通过本博文的例子演示了安装 Amazon SDK for SAP ABAP 需要做哪些部署准备,如何进行安装配置,最后构建了一个 ABAP 程序去读取 Amazon S3 存储桶里的一个文件的信息。从本例可以看出,使用 Amazon SDK for SAP ABAP 可以和 Amazon 的 200 多个服务快速地进行集成,无需投入很多的工作即可完成,大大减少了开发的工作量。用好 Amazon SDK for SAP ABAP 可以帮助亚马逊云科技的客户带来更多的业务创新,更多的收益。

七.参考文献

本博文从以下 link 引用或参考了部分内容。

https://catalog.workshops.aws/abapsdk/en-US/lab02/lab02-01

https://thinkwithwp.com/blogs/awsforsap/getting-started-with-aws-sdk-for-sap-abap/

https://docs.thinkwithwp.com/sdk-for-sapabap/latest/developer-guide/getting-started.html

本篇作者

江伟

亚马逊云科技迁移团队 SAP on Amazon 架构师,具有多年的 SAP 从业经历和丰富的项目经验,主要为客户提供 SAP 云上系统架构设计,SAP 上云迁移等咨询服务。