【SCP】SAP HANA Cloud Trialを使ったCAPプロジェクトを作成

##はじめに
この記事は [SAP Advent Calendar 2020](https://adventar.org/calendars/5047) の12月10日分の記事として執筆しています。

2020/6/30から、SAP HANA Cloudのトライアル版が利用できるようになりました。
この記事では、SAP HANA Cloudのトライアル版の設定と、CAP（Cloud Application Programming Model）で作成したプロジェクトでSAP HANA Cloudを使用する方法について確認します。

※CAPとは、Cloud Application Programming Modelの略で、CDSをベースにODataサービスを開発する手法です。
参考：[【CAP】CAPで作ったODataをUI5アプリで使う(1) CAPサービスの作成](https://qiita.com/tami/items/d1b69a93da14e288faf2)

##SAP HANA Cloud Trialは、これまでのトライアル環境とどう違うのか？
[こちら](https://www.youtube.com/watch?v=47aKx1TL0xc)の動画で、これまで提供されていたトライアル環境のオプションについて説明がされています。まとめると以下の表のようになり、SAP HANA Cloud Trialがベストということになります。

|オプション    |環境      |インフラコスト      |管理者としての操作      |
|:----------|:---------------|:---------------|:---------------|
|[SAP HANA, express edition](https://www.sap.com/cmp/td/sap-hana-express-edition.html)|自分のマシン、またはハイパースケーラー(AWS等)の環境にインストール|自己負担|可能|
|SAP HANA Service|**SCP**…1つのインスタンスを共有し、その中のHDIコンテナにのみアクセスできる|SAPが負担|不可|  
|SAP HANA Cloud Trial|**SCP**…サブアカウントごとに1つのプライベートなインスタンスが与えられる|SAPが負担|可能|

##トライアル環境の作り方
私は以下の動画を参考にトライアル環境を作成しました。動画は11/7のものでしたが、その時と画面が少し変わっていたので一応貼っておきます。
[SAP HANA Cloud Trial Setup](https://www.youtube.com/watch?v=GSNQpfxPuLU&list=PL6RpkC85SLQAHZ_V3cZsTok0T6BvI4HT1)

###サブアカウントのEntitlementsの確認
SAP HANA Cloudでは`SAP HANA Cloud`と`SAP HANA Schemas & HDI Containers`を使用します。`SAP HANA Schemas & HDI Containers Trial`はSAP HANA Serviceで使用します。使っていなければこちらは削除してしまっても問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/88a7416c-1a2a-0795-d6f5-3b2055f7e410.png)

###インスタンスの作成
devスペースに入り、SAP HANA Cloudのメニューを開きます。"Create Database"をクリックしてインスタンスを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/55921b21-636b-20a9-193e-6e735c00b1f8.png)
インスタンス名とDBADMINユーザのパスワードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/63f0f07f-2375-d0a5-f2d6-bac3bb8cecfd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/cb987047-0af7-95bb-786d-24cbcfa44a48.png)
トライアルなので、全てのIPアドレスを許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/61b06e2a-8c2c-9831-b73d-94a87dee120c.png)
"Create Instance"をクリックするとインスタンス作成が開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/f52b8714-a52e-4278-27bb-8a28ec5722f0.png)
しばらく待つとインスタンスの作成が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/a0d31110-ef1e-7f4b-b0f2-8583eeea2309.png)

###コックピットを開く
インスタンスのActionsから、Administer <インスタンス名>のメニューを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/00ce592b-63b3-2b87-a5a3-2630f186af9d.png)
パスワードを求められたら、`DBADMIN`と設定したパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/99b7244c-7926-ef68-72d3-f2af927256b3.png)
コックピットが開きます。データベースに関するさまざまな情報が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/accbd25a-a223-9f1d-10f9-6e72e3aebf30.png)

###Database Explorerを開く
インスタンスのActionsから、Execute SQL and explore objectsのメニューを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/c12e3b3b-5615-d1c4-3db1-7dd34582ffe3.png)
Database Explorerが開きます。ここからテーブル定義を見たり、SQLを実行したりすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/d2d7984b-1037-630c-45ec-5f98d2bda730.png)

##CAPで作ったサービスをSAP HANA Cloud Trialにデプロイ
ここからは、SAP HANA Cloud Trialを使用したCAPプロジェクトを作成する方法について見ていきます。
[以前の記事](https://qiita.com/tami/items/d1b69a93da14e288faf2)では、デプロイ先はトライアル版SAP HANA ServiceのHDIコンテナでした。以下では、同じ内容のプロジェクトを新規に作成してSAP HANA Cloud Trialにデプロイします。
参考：[Building hana-opensap-cloud-2020 Part 1: Project Setup and First DB Build](https://www.youtube.com/watch?v=t3nIXxibmso&list=PL6RpkC85SLQAHZ_V3cZsTok0T6BvI4HT1&index=3)

＜変更点＞
以下がSAP HANA Cloud Trialにデプロイする場合の変更点です。

- package.jsonでデプロイフォーマットに"hdbtable"を指定
- mta.yamlでhdi-containerのサービスに"hana"を指定

###package.jsonでデプロイフォーマットに"hdbtable"を指定
デフォルトではビルドしたときに、genフォルダの下に`.hdbcds`というアーティファクトができていました。一方SAP HANA Cloudでは`.hdbtable`という形でデプロイする必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/57610a4d-ce1d-e427-784b-02d321402e20.png)

以下はpackage.jsonのcdsセクションです。`"deploy-format": "hdbtable"`でフォーマットを指定します。

```json:package.json
    "cds": {
        "hana": {
          "deploy-format": "hdbtable"
        },
        "requires": {
            "db": {
                "kind": "hana"
            }
        }
    }
```

###mta.yamlでhdi-containerのサービスに"hana"を指定

以下は`cds add mta`コマンドで生成したmtaファイルです。トライアル版SAP HANA Serviceではservice名を"hanatrial"に変更していましたが、ここではhanaのままとします。

```yaml:mta.yaml
resources:
 # services extracted from CAP configuration
 # 'service-plan' can be configured via 'cds.requires.<name>.vcap.plan'
# ------------------------------------------------------------
 - name: hana-trial-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}
```
###ビルド、デプロイ
`mbt build`でビルドした後のgenフォルダを見てみると、hdbtable、hdbviewというアーティファクトができています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/3360c25f-2fb5-3fe0-e0e4-8be07cfe45ef.png)
デプロイ後、hana-trial-dbというHDIコンテナのインスタンスができています。（名前はmta.yamlで指定したもの）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/b21047fa-0a71-2fb7-7244-87bf6f0718ce.png)

Database ExplorerにこのHDIコンテナを追加して、データを照会してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/6fd1006f-9aed-8b12-1f16-7eb3370e453e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/8c61ca41-6cf4-a782-ae0d-d1e74f40672d.png)
Tablesをクリックし、CAPプロジェクトで作成したテーブルを選択します。"Open Data"を押すとデータをプレビューできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/4a6ed28b-c03d-238f-88f9-61c46d7c28d5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/4c708304-1f55-3f5a-09a3-aa999cee3861.png)

上記のように、CAPではHANA CloudだろうがHANA Serviceだろうが、違いをほとんど意識することなく開発ができます。

##こぼれ話
インスタンスを作成した翌日、Database Explorerを実行すると"Error: Connection failed"というメッセージが出ていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/c6220d50-6492-c734-da73-a17cef937638.png)
Monitor landscapeから見てみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/6e919a07-01db-f453-c897-26c4cd90b8a6.png)
インスタンスが停止していました。このように、トライアル環境では時間がたつとインスタスは勝手に停止するのでマニュアルで起動が必要になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/26f63bd7-b450-0419-aacb-e7da1950ac60.png)
右端のActionsボタンをクリックし、Startで起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/c02f3bc4-6fc8-1b81-b0eb-7f0f236d5f5c.png)
ステータスが'Running'になれば、データベースを使用できます。ただ、起動に数十分かかりました。冒頭で「SAP HANA Cloud Trialがベスト」と書きましたが、管理者としての操作がいらないのであればSAP HANA Serviceの方が使いやすいかもしれません（毎回の起動が必要ないので）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/3864d65e-3021-1fa7-557b-83faaa99799d.png)

##おわりに
今回はSAP HANA Cloud Trialインスタンスを作成し、CAPで作成したテーブルをデプロイするところまでできるようになりました。私はまだHANA DBの使い方（HDIコンテナの役割、ロール、ビューやプロシージャの作成等）は詳しくないので、トライアル環境を利用して学んでいけたらと思います。

##参考

- [SAP CodeTalk - SAP HANA Cloud Trial](https://www.youtube.com/watch?v=47aKx1TL0xc)
- [SAP HANA Cloud Trial Setup](https://www.youtube.com/watch?v=GSNQpfxPuLU&list=PL6RpkC85SLQAHZ_V3cZsTok0T6BvI4HT1)
- [Building hana-opensap-cloud-2020 Part 1: Project Setup and First DB Build](https://www.youtube.com/watch?v=t3nIXxibmso&list=PL6RpkC85SLQAHZ_V3cZsTok0T6BvI4HT1&index=3)