【SAP HANA Cloud】メモリ不足エラーでHDIを利用したDBオブジェクトのデプロイができない原因

# 概要
受託開発企業で働くfussasyといいます。普段は、SAP BTP（PaaS）上でSAP Fioriアプリケーション開発をしています。参画しているプロジェクトにおける資料作成のために、HDIサービスインスタンスにDBオブジェクト（テーブル・Viewの定義ファイルプロジェクト）をデプロイし、HANA CloudインスタンスにHDIコンテナを作成しようとしたのですが、メモリ不足エラーで引っ掛かかってしまったので、原因について記録します。

# 前提①：SAP BTP Cockpitの各サービス有効化
SAP BTP Cockpitにおいて、以下のサービスが有効化されていることを前提とします。
・SAP Business Application Studio
・SAP HANA Cloud
・SAP HANA Schemas & HDI Containers

# 前提②：DBオブジェクト（MTA）の作成
ざっくりと手順を説明します。
(1)「SAP Business Application Studio」で「Full Stack Cloud Application」でワークスペースを作成。
(2)そこで左上のハンバーガーメニューから「Open Folder」を選択肢、「/home/user/projects/」で開く。projects配下に遷移したら、ハンバーガーメニューより「New Project Template」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1727556/93c8a2dc-7ff4-75dd-6ea3-7b288e33df52.png)
(3)以下で設定して「SAP HANA Database Project」テンプレートを作成
【Select Template and Target Location】
SAP HANA Database Projectを選択
【Add Basic Information】
Project Name：作成するHDIプロジェクトの名称
【Set Basic Properties】
Enter the module name：HANA DBモジュール名称
【Set Database Information】
Namespace：HANA DBのネームスペース ※原則空白
Schema Name：HANA DBのスキーマ名
SAP HANA Database Version：HANA Cloudを選択
(4)「src」フォルダ配下に「任意のテーブル名+.hdbtable」という名前で、テーブル定義ファイルを新規作成。以下に作成例を示す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1727556/c0a88e31-e126-eb2b-c963-98d43794c3be.png)


```javascript:customer_tbl.hdbtable
COLUMN TABLE "CUSTOMER_TBL" (
    "CUSTOMERID"    INTEGER NOT NULL COMMENT '顧客番号'
    , "CITYID"      INTEGER COMMENT '都市番号'
    , "COUNTRYID"   INTEGER COMMENT '国番号'
    , "CUSTOMER"    NVARCHAR(50) COMMENT '顧客名'
    , "CITYNAME"    NVARCHAR(50) COMMENT '都市名'
    , "COUNTRYNAME" NVARCHAR(50) COMMENT '国名'
    , PRIMARY KEY ("CUSTOMERID")
)
```

「mta.yaml」を右クリックし「Build MTA Project」を押下して、mta_archivesを作成する。配下のmtarファイルを右クリックし「Deploy MTA Archive」を押下し、デプロイ先のCloud Foundry（Space）を選択してデプロイする。

# 事象
上記、デプロイ時に以下のエラーが発生してデプロイができない。エラーメッセージから判断すると、アプリケーションのメモリ要件が現在のSpaceのメモリクオータを超えているようです。この問題は、Cloud FoundryのSpaceに割り当てられたメモリーが不足しているために発生していると判断。

```
...
Executing task "deploy" on application "xxx_db"...
Execution of task "deploy" on application "xxx_db" failed.
Download the application logs via the dmol command and check them for more information.: Controller operation failed: 422 Unprocessable Entity: CF-UnprocessableEntity(10008): memory_in_mb exceeds space instance memory quota 
Process failed.
...
Exit error code: 1
```
※一部、伏字にしています。

サブアカウント＞Spaceで確認したところ、SpaceのMemoryには余裕がありそうですが、メモリ不足とのエラーが発生しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1727556/2be46c1d-0afa-8776-eccd-faf7ab43af31.png)

# 原因
以下のように、ビルド時にmta.yamlで指定しているparameters>memoryより、SpaceのInstance Memoryが小さいと発生するエラーみたいです。
※HANA Cloud projectテンプレート作成時のデフォルトでは、memoryパラメーターは含まれていませんが、明示的にするため追記しています。

```yaml:mta.yaml
_schema-version: "2.1"
ID: xxx_hdi
version: 0.0.1
modules:
- name: xxx_db
  type: hdb
  path: xxx_db
  parameters:
    memory: 1024M
  requires:
  - name: hdi_xxx_db
    properties:
      TARGET_CONTAINER: ~{hdi-container-name}
resources:
- name: hdi_xxx_db
  type: com.sap.xs.hdi-container
  parameters:
    config:
      schema: xxx_schema
  properties:
    hdi-container-name: ${service-name}
```

# 結果
サブアカウント＞Space Quotasで確認すると、Instance Memoryが確認できます。mta.yamlでは1024MBを指定していますが、SpaceのInstance Memoryは8MBしかありません。SAP BTP管理者に連絡をして、Instance Memoryを引き上げていただきましたところ、無事にデプロイすることができました。(Memoryではなく、Instance Memoryだったというオチです。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1727556/84b33564-9252-50f0-3025-7939f399d429.png)



# 補足
①HDIについて理解したい場合、コチラのSAP Communityブログを確認ください。
> 「はじめてのSAP HANA Cloud」シリーズで出てきていたキーワード「HDI」ですが、「SAP HANA Deployment Infrastructure 」の略になります。
HDI は「HANAにDBオブジェクトやDBアプリケーションをデプロイするための便利な仕組み」です。

https://community.sap.com/t5/technology-blogs-by-sap/%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AEsap-hana-cloud-hdi%E3%81%A8db%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4/ba-p/13480361#:~:text=%E3%80%8C%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AESAP%20HANA%20Cloud,%E3%81%AE%E4%BE%BF%E5%88%A9%E3%81%AA%E4%BB%95%E7%B5%84%E3%81%BF%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82

②基本的に、DBオブジェクトを作成する際は、HDIプロジェクトに定義ファイルを登録し、SAP Business Application Studio（BAS）からデプロイした方が良いです。（CAPプロジェクトを除く）SAP HANA Database Explorer等のSQLコンソールからDDLでDBオブジェクトを作成した場合、オブジェクトの所有者はそのユーザーとなり、他ユーザーの操作・設計変更が制限されるからです。