Technical Articles
MTAEXTファイルを使用したmta.yamlファイルの拡張
index
-
概要
-
前提知識
-
Multi Target Applicationプロジェクトにおけるビルド
-
Multi Target Applicationプロジェクトのビルドにおけるディスクリプタファイル
-
mta.yaml
-
mtad.yaml
-
hoge.mtaext
-
-
補足:mbt buildの詳細
-
-
使用例
-
Reshuffle_DBへの適用例
-
SAP-Samplesが提供するシンプルなmtaext例
-
-
参考URL
1. 概要
本ブログはMulti Target Applicationプロジェクトのデプロイ用ディスクリプタファイルであるmta.yamlをビルド時に拡張するための方法を示します。この方法を用いてデプロイ先環境ごとにmta.yamlの内容をビルド時に書き分けることなどができます。
2. 前提知識
“3. 使用例”で示すmtaextファイルの使用方法を理解するための前提知識として、mtaextファイルがかかわるMulti Target Applicationのビルドについて本セクションは取り扱います。
2-1. Multi Target Applicationプロジェクトにおけるビルド
Multi Target Applicationのプロジェクト作成時、開発者は以下のコンテンツを用意してmbt buildコマンドによりビルドします。
. ├── アプリケーション本体 ├── Multi Target Applicationプロジェクトのデプロイ用ディスクリプタファイル(mta.yaml)
ビルドの結果、下記のようにMulti Target Applicationアーカイブ(mtarファイル)が生成されます。開発者はcf deployコマンドを用いてこのアーカイブファイルを環境上にデプロイします。
. ├── アプリケーション本体 ├── Multi Target Applicationプロジェクトのデプロイ用ディスクリプタファイル(mta.yaml) └── mta_archives └── Multi Target Applicationアーカイブ(mtarファイル)
生成されたmtarファイルはアプリケーション本体の他に実際のデプロイ時に使用するディスクリプタファイルであるmtad.yamlも持ちます。このファイルはデプロイ先の設定に適合させるためにmta.yamlから変換されたディスクリプタファイルであり、このファイルに記述された内容がデプロイ先に反映されます。
2-2. Multi Target Applicationプロジェクトのビルドにおけるディスクリプタファイル
Multi Target Applicationが使用するディスクリプタファイルには次の3種類があります。
2-2-1. mta.yaml
mta.yamlはプロジェクト開発時に使用するディスクリプタファイルです。このファイルは開発するMulti Target Applicationプロジェクトのルートディレクトリに慣例的には置かれます。プロジェクトのルートディレクトリに配置しない場合はmbt buildコマンドの実行時に”–source”オプションでmta.yamlのあるディレクトリを指定します。
参考URL
2-2-2. mtad.yaml
mtad.yamlは環境上にデプロイするときに使用するディスクリプタファイルです。Multi Target Applicationの対応環境であるCF、NeoとXSAのそれぞれで同様のアプリケーションであっても要求するアプリケーションの設定タイプに差があります。mtad.yamlはこの設定タイプの差分吸収に利用されています。mta.yamlは環境ごとのアプリケーション設定タイプの差分を吸収した記述を許容させており、mbt buildが各環境にあわせた設定タイプに変換してmtad.yamlを生成しています。mtad.yamlは手書きで記述することも可能です。
参考URL
2-2-3. hoge.mtaext
hoge.mtaextはmbt buildコマンドによって利用されるmta.yamlの拡張ファイルです。このファイルを用いて開発者はmta.yamlの内容を上書きおよび追記することが可能です。mbt buildコマンドはmta.yamlを使ったmtad.yaml作成時にhoge.mtaextの内容を巻き込むことができます。このときmbt buildコマンドに”–extensions”オプションを付け加えます。–extensionsオプションで指定するmtaextファイル名に指定はなく、正規表現で指定した場合^.*\.mtaext$
であればよいです。
参考URL
2-3. 補足:mbt buildの詳細
mbt buildコマンドは以下の3ステップを実行します。
-
mta.yaml内の各moduleのビルド
-
mta.yamlにおけるmoduleのtype情報の変換
-
下記構成にしたzipファイルをmtarとして生成
3ステップ目によって生成されたmtarファイルはjarのようにzip形式で格納されており、下記のような構成でMETA-INFを持ちます。
. ├── アプリケーション本体 └── META-INF ├── MANIFEST.MF └── mtad.yaml
3. 使用例
3-1. Reshuffle_DBへの適用例
適用シナリオ
-
mtaextを使わない場合:デフォルトのHANA Cloudインスタンスを利用するHDIコンテナを作成
-
mtaextを使う場合:デフォルトの挙動を上書きし、特定のHANA Cloudインスタンスを利用するHDIコンテナを作成
mtaextを使わないシナリオ
1. Multi Target Applicationプロジェクトの用意
GitHubよりをクローンします。このプロジェクトはHANA Cloudインスタンスに対してHDIコンテナ経由で3つのテーブルを作成するMulti Target Applicationです。プロジェクト構成は下記の通りである。dbディレクトリ配下に含まれるファイル群がこのMulti Target Applicationにおけるアプリケーション本体です。
. ├── README.md ├── db │ ├── package.json │ └── src │ ├── candidate.hdbtable │ ├── config.hdbtable │ └── history.hdbtable └── mta.yaml
2. プロジェクトのビルド
mbt buildコマンドを用いてプロジェクトをビルドします。下記のようにプロジェクトのルートディレクトリにmta_archivesディレクトリとその配下にmtarファイルが作成されます。
. ├── README.md ├── db │ ├── package.json │ └── src │ ├── candidate.hdbtable │ ├── config.hdbtable │ └── history.hdbtable ├── mta.yaml └── mta_archives └── Reshuffle_DB_0.0.1.mtar
3. ビルド結果の確認
Reshuffle_DB_0.0.1.mtarをzipファイルとして解凍し、META-INFディレクトリに含まれるmtad.yamlを確認します。mta.yamlに記述した通りのhdiコンテナの内容が記述されています。
mtaextを使うシナリオ
1. Multi Target Applicationプロジェクトの用意
GitHubよりをクローンします。
. ├── README.md ├── db │ ├── package.json │ └── src │ ├── candidate.hdbtable │ ├── config.hdbtable │ └── history.hdbtable └── mta.yaml
2. dev.mtaextファイルの作成
プロジェクトのルートディレクトリに開発環境用の拡張ディスクリプタファイルとしてdev.mtaextを作成し、下記の内容を記述します。
_schema-version'2.1' ID Reshuffle_DB_ext extends Reshuffle_DB version0.0.1 resources name hdi_db parameters config database_id hana_cloud_instance_id_for_dev_env
2. プロジェクトのビルド
mbt buildコマンドを用いてプロジェクトをビルドします。ビルド時には”–extensions”オプションを指定してmbt build --extensions dev.mtaext
を実行します。下記のようにプロジェクトのルートディレクトリにmta_archivesディレクトリとその配下にmtarファイルが作成されます。
. ├── README.md ├── db │ ├── package.json │ └── src │ ├── candidate.hdbtable │ ├── config.hdbtable │ └── history.hdbtable ├── mta.yaml └── mta_archives └── Reshuffle_DB_0.0.1.mtar
3. ビルド結果の確認
Reshuffle_DB_0.0.1.mtarをzipファイルとして解凍し、META-INFディレクトリに含まれるmtad.yamlを確認します。mta.yamlに記述したhdiコンテナの内容に加え、dev.mtaextの内容も書き加えられた内容が記述されています。
3-2. SAP-Samplesが提供するシンプルなmtaext例