使用SAP HANA Cloud部署CAP模型到BTP Cloud Foundry运行环境

如果您需要暴露SAP HANA数据库中的数据时,最佳实践方案是使用OData。这篇博文将讲解如何将SAP HANA Cloud中的表作为OData服务暴露出来。

你将获得这些内容

⭐ 如何在SAP BTP上Cloud Foundry的环境中创建CAP模型
⭐ 如何通过CDS在SAP HANA Cloud中创建表格
⭐ 如何通过OData服务暴露到SAP BTP Cloud Foundry运行环境

CAP架构: SAP Cloud Application Programming模型简称SAP CAP,是一种架构,一种库,也是用以创建企业级服务和应用的工具。

另外,我们还会用到Core Data Services(CDS)。CDS是我们通用的建模语言,其以概念性的、简洁的和可理解的方式获取静态资源,它是CAP的支柱。

前置条件

环境设置

授权配置

为了CAP开发,需要为Cloud Foundry空间配置一些资源。下面这些计划需要配置到你的Cloud Foundry空间。(为子账户添加授权)

授权 计划
Application Runtime 2G
HANA hdi-shared
SAP HANA Cloud hana
SAP HANA Cloud hana-cloud-connection
SAP HANA Cloud relational-data-lake

订阅SAP Business Application Studio

登陆SAP BTP主控室,进入到自己的子账户中,浏览到Service MarketPlace(应用市场),订阅Application Studio

配置角色集合
从左侧边框栏选择 角色集合 ,点击 “+” 按钮添加新的角色集合。

进入新角色集合BAS,点击编辑添加角色,再添加自己的用户,最后点击保存
确保至少添加Administrator,Developer角色。

注释:注意应用程序标识符一般以prod-mta开头

登陆SAP Business Application Studio

在左侧栏中点击 实例和应用, 点击小图标登陆SAP Business Application Studio。

创建开发空间

点击 Create Dev Space 建立自己的开发空间。

输入一个开发空间的名称,在这里我们选择全栈云应用。在右侧勾选HANA相关的扩展插件,点击创建按钮,并等待创建完成,之后会自动进入到开发空间。

第一步:在SAP Business Application Studio里创建新项目

在欢迎界面上选择 Create project from template
选择 CAP 磁贴并点击下一步。

输入新项目名称,选择功能 hanamta 和 samples

完成项目创建并在在workspace中打开。项目文件结构会按以下方式显示:

所有的示例数据文件都在 db 文件夹里,包含.csv文件和data-model.cds文件。

第二步: 为package.json文件配置CDS

  • 更新@sap/hana-client的值
"@sap/hana-client": "^2.6.61" 
  • 更新 scripts 部分
 "start": "cds run", "hana": "cds deploy --to hana:mycapdemo-db --auto-undeploy", "build": "cds build/all --clean"
  • 在 cds 章节中添加新片段 hana
"hana": { "deploy-format": "hdbtable" }
  • 将db类型更新为 hana
"kind": "hana"

这是完整的package.json文件供您参考,需要注意的是将hana实例名 mycapdemo-db 记住,后面会用到。

注释: 字段 “name”: “mycapdemo” 和hana实例名 “mycapdemo-db” 保持对应关系。这样做将会大大降低后续步骤中手动改配置的工作。

{ "name": "mycapdemo", "version": "1.0.0", "description": "A simple CAP project.", "repository": "<Add your repository here>", "license": "UNLICENSED", "private": true, "dependencies": { "@sap/cds": "^5", "express": "^4", "@sap/hana-client": "^2.6.61" }, "devDependencies": { "@sap/hdi-deploy": "^4.2.0", "sqlite3": "^5.0.2" }, "scripts": { "start": "cds run", "hana": "cds deploy --to hana:mycapdemo-db --auto-undeploy", "build": "cds build/all --clean" }, "eslintConfig": { "extends": "eslint:recommended", "env": { "es2020": true, "node": true, "jest": true, "mocha": true }, "globals": { "SELECT": true, "INSERT": true, "UPDATE": true, "DELETE": true, "CREATE": true, "DROP": true, "CDL": true, "CQL": true, "CXL": true, "cds": true }, "rules": { "no-console": "off", "require-atomic-updates": "off" } }, "cds": { "requires": { "db": { "kind": "hana" } }, "hana": { "deploy-format": "hdbtable" } }
}

第三步: 安装关键依赖

从菜单中选择终端terminal,并执行这行命令:

npm install

第四步: 创建hdi-container

  • 登陆你的 org/space
    点击菜单 View->Find Command->Login to Cloud Foundry,输入你的登陆BTP的账号和密码完成登陆,并选择自己要部署应用的org/space。 接下来将创建hana实例campdemo-db,整个创建过程可能会持续几分钟。执行如下命令行:

npm run hana

CDS工具将会自动完成数据库表的创建,不需要手动创建。另外将从BTP中自动获取数据库的登陆凭证,并保存在default-env.json文件中。

返回到SAP BTP主控制台,浏览到你的子账户,检查实例菜单,确认 capdemo-db 存在。

第五步: 检查OData服务可用性

执行命令行:

npm start

执行完命令行,点击“Open in new tab” 测试我们的cds.service是否正常工作。如果能正常看到此页面,则说明你的cds.service已经正常工作了。

第六步: 在部署前检查文件内容(选配)

注释: 如果你先前在定义hana实例名称时保持了“项目名称-db”这样的格式未做更改,则请跳过这一步

示例: 我在创建hana实例时另取了一个新名字 “myhana-db”

  • 检查文件 manifest.yml
    打开文件/home/user/projects/mycapdemo/gen/db/manifest.yml, 保证services名称和你新创建的hana实例名称保持一致(即在第二步中定义的名称)。如果在第二步中定义了不同的hana实例名称,则需要将services名称更新为实际新建的hana实例名称。
  • 检查文件 mta.yml
    打开文件 /home/user/projects/mycapdemo/mta.yml,将所有相关的名称全部更新为如下正确内容:
## Generated mta.yaml based on template version 0.4.0
## appName = mycapdemo
## language=nodejs; multiTenant=false
## approuter=
_schema-version: '3.1'
ID: mycapdemo
version: 1.0.0
description: "A simple CAP project."
parameters: enable-parallel-deployments: true build-parameters: before-all: - builder: custom commands: - npm install --production - npx -p @sap/cds-dk cds build --production modules: # --------------------- SERVER MODULE ------------------------ - name: mycapdemo-srv # ------------------------------------------------------------ type: nodejs path: gen/srv requires: # Resources extracted from CAP configuration - name: myhana-db provides: - name: srv-api # required by consumers of CAP services (e.g. approuter) properties: srv-url: ${default-url} # -------------------- SIDECAR MODULE ------------------------ - name: mycapdemo-db-deployer # ------------------------------------------------------------ type: hdb path: gen/db  parameters: buildpack: nodejs_buildpack requires: # 'hana' and 'xsuaa' resources extracted from CAP configuration - name: myhana-db resources: # services extracted from CAP configuration # 'service-plan' can be configured via 'cds.requires.<name>.vcap.plan'
# ------------------------------------------------------------ - name: myhana-db
# ------------------------------------------------------------ type: com.sap.xs.hdi-container parameters: service: hana # or 'hanatrial' on trial landscapes service-plan: hdi-shared properties: hdi-service-name: ${service-name}

第七步: 为新应用添加路由

确保在你的org/space里已经具有了合法可用的域名。打开文件/home/user/projects/mycapdemo/mta.yml,在片段“mycapdemo-srv”中添加新参数routes(注意保持yaml文件格式正确)。

modules: # --------------------- SERVER MODULE ------------------------ - name: mycapdemo-srv # ------------------------------------------------------------ type: nodejs path: gen/srv parameters: routes: - route: "mycapdemo.apps.sap-samples.scpcloud.top" requires: # Resources extracted from CAP configuration

第八步: 部署我的服务到SAP BTP平台 / Cloud Foundry运行环境中

  • 编译MTA文件
    在文件mta.yml上右键点击”Build MTA”菜单
  • 部署mta到Cloud Foundry运行时环境
    执行此命令行完成应用部署

cf deploy mta_archives/mycapdemo_1.0.0.mtar

第九步: 通过外部链接访问OData服务

登陆到SAP BTP主控制台,导航浏览到 org/空间,定位到应用页面。
点击“mycapdemo-srv”进入应用详细视图。点击链接“mycapdemo.apps.sap-samples.scpcloud.top”打开你的应用。