Skip to Content
Technical Articles
Author's profile photo Arvin Wu

使用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”打开你的应用。

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.