【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

使用 Amazon API Gateway 为 SAP 部署 API

  • 2019-10-18
  • 本文字数:3582 字

    阅读完需:约 12 分钟

使用 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。



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



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



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



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



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



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



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



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


  • 检查 Amazon CloudWatch 日志以获取 CacheHitCount 和 CacheMissCount 指标。

  • 停止后端 SAP Gateway,然后再调用 API。


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



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


  1. Authorization code flow for OAuth 2.0 – 这是一个用户启动的流程,最适用于用户可以提供登录凭据的场景。 示例包括当用户可以进行登录操作的 Web 或移动应用程序。

  2. 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 上云迁移等咨询服务。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-api-gateway-sap-api/


2019-10-18 11:281113
用户头像

发布了 1826 篇内容, 共 89.7 次阅读, 收获喜欢 73 次。

关注

评论

发布
暂无评论
发现更多内容

Linux内核四大核心框架

hanaper

Go 专栏|接口 interface

AlwaysBeta

Go 语言

【报名】飞桨中国行丨企业零门槛AI创新应用-智能制造专场

百度大脑

人工智能

Electron团队为什么要干掉remote模块

刘晓伦

Electron Node

Vue进阶(九十):过滤器

No Silver Bullet

Vue 9月日更

ShardingSphere 语句解析生成初探

源码 ShardingSphere

未来10年,5个C/C++吃香的细分领域技术

奔着腾讯去

云原生 网络安全 音视频 DPDK 虚拟化技术

线程同步类CyclicBarrier在性能测试集合点应用

FunTester

多线程 性能测试 线程安全 测试框架 FunTester

多线程知识体系01-线程池源码阅读讲解-Executor

小马哥

多线程 高并发 源码阅读 源码剖析 日更

升级mysql-connector-java-8.x踩坑纪实

小江

Java MySQL 时间戳 服务器时区 夏令时

架构学习模块一

George

Go 专栏|流程控制,一网打尽

AlwaysBeta

Go 语言

(深入篇)漫游语音识别技术—带你走进语音识别技术的世界

声网

深度学习 音视频 语音识别

Go 专栏|函数那些事

AlwaysBeta

Go 语言

【Flutter 专题】58 图解 Flutter 嵌入原生 AndroidView 小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

【LeetCode】 二叉树中和为某一值的路径Java题解

Albert

算法 LeetCode 9月日更

HTTP系列之:HTTP中的cookies

程序那些事

Java 网络协议 HTTP cookies

Go 专栏|复合数据类型:数组和切片 slice

AlwaysBeta

Go 语言

华为云PB级数据库GaussDB(for Redis)揭秘:如何搞定推荐系统存储难题

华为云开发者联盟

数据库 推荐系统 存储 华为云 GaussDB(for Redis)

Go 专栏|基础数据类型:整数、浮点数、复数、布尔值和字符串

AlwaysBeta

Go 语言

Go 专栏|复合数据类型:字典 map 和 结构体 struct

AlwaysBeta

Go 语言

【Vue2.x 源码学习】第四十三篇 - 组件部分 - 组件相关流程总结

Brave

源码 vue2 9月日更

从一个并发异常问题引起的想法

卢卡多多

并发编程 9月日更

链路压测中各接口性能统计

FunTester

性能测试 测试框架 测试开发 FunTester 链路测试

Go 专栏|变量和常量的声明与赋值

AlwaysBeta

Go 语言

Go 专栏|说说方法

AlwaysBeta

Go 语言

在线JSON转JAVA工具

入门小站

工具

LeetCode刷题278-简单-第一个错误版本

ベ布小禅

9月日更

Go 专栏|错误处理:defer,panic 和 recover

AlwaysBeta

Go 语言

Linux之lastlog命令

入门小站

Linux

模块(二)如何设计架构

我是一只小小鸟

使用 Amazon API Gateway 为 SAP 部署 API_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章