Technical Articles
使用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运行环境
另外,我们还会用到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
注释:注意应用程序标识符一般以prod-mta开头
登陆SAP Business Application Studio
创建开发空间
第一步:在SAP Business Application Studio里创建新项目
第二步: 为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
第五步: 检查OData服务可用性
执行命令行:
npm start
第六步: 在部署前检查文件内容(选配)
注释: 如果你先前在定义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”打开你的应用。