亚马逊AWS官方博客

使用 Amazon API Gateway 为 SAP 部署 API

本文由Amazon Web Services (AWS)的SAP数字顾问KK Ramamoorthy撰写。

您的客户,合作伙伴和员工希望通过各种渠道获得一种无缝,安全的用户体验。 例如,使用像亚马逊Alexa等支持语音功能的设备下订单的客户,也应该在移动设备上得到相同的体验。 或者使用移动APP访问培训手册的现场技术人员,也应能够在增强现实APP上访问这些手册并可以与其交互。

应用程序编程接口(API)在构建这种统一的用户体验方面发挥着至关重要的作用。 借助API和API管理平台,您可以以敏捷,灵活,安全和可扩展的方式把域驱动的服务发布给广大用户使用。

API管理平台提供以下关键功能:

  • 不受规模影响的性能
  • 安全性和灵活性
  • 能够对流量限速
  • 支持全球部署和边缘缓存
  • 生命周期管理和版本控制
  • 支持金丝雀部署
  • API密钥管理
  • 监控API活动
  • 用于多种编码语言的SDK生成
  • API的编目和文档

Amazon API Gateway是一个无服务器的全托管API管理平台,可在任何规模上实现以上这些功能。 API Gateway可以轻松连接到HTTP(S) Endpoint或调用AWS Lambda函数来执行自定义业务逻辑。 您还可以灵活地在API Gateway内缓存数据,而无需在每次服务呼叫时都访问您的后端系统。 这些只是API Gateway的部分功能。 有关更多信息,请参阅AWS网站上的API Gateway 

API Gateway 和SAP

SAP客户如何从API Gateway中受益呢? SAP提供的SAP Gateway可以利用开放数据协议(OData)发布基于REST的服务。 您可以在虚拟私有云(VPC)中的私有子网中快速拉起一个SAP Gateway Hub系统,然后通过网络负载均衡器(NLB)将其安全地暴露给API Gateway。 API资源通过API Gateway公开后,您可以根据自己的特定业务需求对其进行进一步微调。 例如,您可以选择对某些特定服务的响应内容进行丰富,而对于其他的服务,您可能只希望通过本地代理或缓存来作为响应。

对于Web和移动应用程序,您可以添加AWS AppSync来和API Gateway一起使用。 AWS AppSync是一项完全托管的服务,可以支持数据驱动的应用程序开发。 它也原生支持离线情况和冲突情况的解决方案。 查找有关AWS AppSync的更多信息 。

参考架构

此示例参考架构说明了所有这些组件是如何结合在一起的。

  • VPC中的私有子网中包含您的SAP应用程序,以及SAP Gateway。
  • 置于私有子网中的网络负载均衡器(NLB)将可以访问SAP Gateway的HTTP(S)端口,并将针对其的任何请求进行代理转发。 为了简化起见,SAP Gateway在此体系结构中显示为一个Amazon EC2实例。 但请注意,您需要实现多个应用程序服务器和Web  Dispatcher才能实现有效的负载平衡。
  • VPC  Link可安全地将API Gateway与网络负载均衡器(NLB)相连接。 这使您可以通过API Gateway安全地发布您的SAP服务,而无需将SAP系统公开发布到外网。 如果需要,您可以使用由API Gateway颁发,并被SAP系统信任的客户端证书来进一步保护您的服务。 这样可以确保只有API Gateway可以访问SAP Gateway,从而增加了额外的安全保护。
  • 对于复杂的业务逻辑,您可以使用API网关来触发部署在VPC中的Lambda函数。
  • API公开发布后,您可以使用AWS AppSync进一步抽象您的API来进行数据驱动的移动和Web应用程序开发。
  • 其他AWS服务(如Amazon Lex和AWS IoT)也可以与API Gateway集成,从而它们也使用API Gateway发布出来的服务。
  • 通过管理用户身份(包括用户池和联合身份),Amazon Cognito安全地把所有这些服务联系起来,并把所有AWS服务和SAP后端服务中已登录用户的上下文记录下来。

设置步骤

现在,我们开始实现这个架构。 我们将通过API Gateway发布一个SAP提供的示例服务。 请参阅这个SAP示例服务的文档 。 这个示例服务将业务伙伴,联系人,订单和产品等各种业务对象利用OData服务发布了出来。

1. 在私有子网中安装 SAP NetWeaver Gateway Advanced Business Application Programming (ABAP)系统。 开发者版本可以从SAP获取: SAP NetWeaver AS ABAP 7.51 SP02  SAP NetWeaver AS ABAP 7.51 SP02 on HANA (Cloud Appliance Library edition) 

2. SAP系统安装并配置完成后,打开Amazon EC2控制台https://console.aws.amazon.com/ec2/ 。 在导航面版的 负载均衡 下 ,选择 负载均衡器  , 创建负载均衡器 ,并创建一个内部网络负载均衡器(Internal NLB),并将SAP NetWeaver ABAP系统作为NLB的目标。 请注意网络负载均衡器的DNS名称; 我们稍后将需要这个信息来设置API Gateway。

3. 从API Gateway控制台https://console.aws.amazon.com/apigateway/创建VPC Link。 这将通过API Gateway为私有子网中的SAP系统提供一种安全的访问方法。

4. API Gateway支持透传方式的代理集成。 当您只是简单地希望API Gateway在客户端和服务器端(在这个例子里是SAP)之间传递请求和响应时,这会派上用场。 我们将创建一个路径为/sap/opu/odata/IWBEP/GWSAMPLE_BASIC/{proxy}的代理资源。

5. 我们将在{proxy}资源下添加一个ANY操作来解析各种HTTP方法(例如, GET , PUT , POST ),并通过VPC Link将其转发到SAP Gateway。 请记住您在步骤2中记下的DNS名称, 您将在此使用该DNS名称作为端点URL。

6. 现在,您可能想要在API Gateway层缓存一些资源,这样就不需要访问后端的SAP Gateway了。 缓存提高了API的性能。 在我们的示例中,我们缓存了产品数据,因为它作为主数据,在SAP系统中是不会经常更改的。 要缓存数据,请转至API Gateway控制台,选择/GWSAMPLE_BASIC资源,为ProductSet创建子资源,然后将GET操作添加到该资源。

7. 现在开始部署API。 我们将其部署到一个名为dev的阶段。

8. 在API Gateway控制台中,导航至dev阶段编辑器并选中 Cache Settings 下的 Enable API cache框。 将 Cache capacity 设置为0.5 GB,并将 Cache time-to-live (TTL) 设置为3600秒。 建立缓存需要4-5分钟。

9. 您只想缓存ProductSet资源。 为避免缓存{proxy+}资源,需要选择GET操作。 为此方法选择 Override  并取消 Enable Method Cache的选项  。 对所有其他方法也需要这样做。

10. 使用例如Postman的工具测试来API。 您会注意到,在第一次调用ProductSet API之后,后续调用将从缓存中检索。 您可以通过两种方式来验证它:

  • 检查Amazon CloudWatch日志以获取CacheHitCount和CacheMissCount指标。
  • 停止后端SAP Gateway,然后再调用API。

ProductSet API应该仍然可以工作,但是数据将从缓存中取出,而不是从后端SAP系统中获取。

注意:在这个测试中,我们使用基本身份验证(在授权标题字段中),这对测试目的而言是可以接受的。 但是,对于生产方案,您将使用OAuth 2.0流进行身份验证。 基于SAP ABAP的应用程序支持两种类型的OAuth 2.0流程:

    • Authorization code flow for OAuth 2.0 – 这是一个用户启动的流程,最适用于用户可以提供登录凭据的场景。 示例包括当用户可以进行登录操作的Web或移动应用程序。
    • SAML 2.0 Bearer Assertion Flow for OAuth 2.0 – 这是服务器到服务器的通信流程,其中在一个服务器中已经通过身份验证的用户的用户上下文信息,可以用于在没有用户参与的情况下登录到另一台服务器。 例如,API Gateway调用Lambda函数,该函数可以通过使用 OpenSAML2类的开源SAML SDK为AWS登录用户发出SAML 断言。 然后,使用SAML断言,您可以获得SAP中同一用户的访问令牌。

关于这两种流程类型还有很多内容,我们将在随后的博文中更详细地介绍它们。

下一步

我们只是在这里粗浅的介绍了AWS  API Gateway的各种能力。 我们在本博客中分享的内容可以帮助您快速开始集成Amazon API Gateway和SAP。 在使用API Gateway将SAP流程与AWS服务集成之后,您还可以执行以下操作:

  • 使用Amazon Lex利用chatbot(聊天机器人)功能丰富您的应用程序。
  • 使用Amazon Rekognition提高图像识别功能,提高生产力。
  • 使用Amazon Sumerian为增强现实应用带来增强的用户体验。
  • 使用AWS AppSync构建数据驱动的应用程序,该应用程序原生支持脱机状态下的用例。
  • 使用AWS Mobile Hub测试,部署和维护您的移动应用程序。
  • 还有很多其他选择……

可能性是无止境的,大多数AWS服务仅仅需要一个API调用就可以使用。 API Gateway提供完全托管,即用即付的服务,使您能够轻松创建和管理大规模API。 我们希望你觉得这篇文章有用。 请不要犹豫与我们联系,并提出您的意见或问题。

本篇译者

戴俊

AWS中国专业服务团队SAP咨询顾问,在加入AWS之前,曾供职于SAP和EMC历任SAP技术顾问及SAP解决方案工程师,在SAP系统架构设计与迁移方面有着丰富的经验。现任职于AWS中国专业服务团队,主要为客户提供云上SAP系统架构设计,SAP上云迁移等咨询服务。