概要
受託開発企業で働く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」を選択する。
(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」という名前で、テーブル定義ファイルを新規作成。以下に作成例を示す。
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には余裕がありそうですが、メモリ不足とのエラーが発生しています。
原因
以下のように、ビルド時にmta.yamlで指定しているparameters>memoryより、SpaceのInstance Memoryが小さいと発生するエラーみたいです。
※HANA Cloud projectテンプレート作成時のデフォルトでは、memoryパラメーターは含まれていませんが、明示的にするため追記しています。
_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だったというオチです。)
補足
①HDIについて理解したい場合、コチラのSAP Communityブログを確認ください。
「はじめてのSAP HANA Cloud」シリーズで出てきていたキーワード「HDI」ですが、「SAP HANA Deployment Infrastructure 」の略になります。
HDI は「HANAにDBオブジェクトやDBアプリケーションをデプロイするための便利な仕組み」です。
②基本的に、DBオブジェクトを作成する際は、HDIプロジェクトに定義ファイルを登録し、SAP Business Application Studio(BAS)からデプロイした方が良いです。(CAPプロジェクトを除く)SAP HANA Database Explorer等のSQLコンソールからDDLでDBオブジェクトを作成した場合、オブジェクトの所有者はそのユーザーとなり、他ユーザーの操作・設計変更が制限されるからです。