[SAP BTP 開発管理・DevOps 入門] 海外チュートリアルをStep by Stepで解説する（Transport Management編）

# はじめに

本記事は｢[[SAP BTP 開発管理・DevOps 入門] 海外チュートリアルをStep by Stepで解説する](https://qiita.com/Yanagawa_Yoshihisa/items/bd8076260aab97fedf28)｣の1項目の説明をなります。全体を把握した方はまずは、こちらをご確認下さい。

また、本記事は概要把握や個人とトライアル利用の参考として、まとめたものなので、プロジェクトでの利用の際は、SAP社への問合せの実施や正式情報である[Help Portal](https://help.sap.com/docs/)を活用して下さい。

前提として[[SAP BTP 開発管理・DevOps 入門] 海外チュートリアルをStep by Stepで解説する（デプロイ&CI/CD編）](https://qiita.com/Yanagawa_Yoshihisa/items/82ce3aeeef25ec725d50)を実施している必要があります。

# 本記事の対象範囲

この記事では｢Continuous Integration & Delivery｣を起点として、検証環境(qa)、本番環境(prod)に相当する別のSub-accountに移送(Transport)を実施をしています。

｢Continuous Integration & Delivery｣での開発機環境へのデプロイ完了後に、｢Cloud Transport Management｣の検証環境向けのキューにソースが転送されます。それをマニュアルにて検証環境にインポート（デプロイ）します。インポートが完了すると、自動で本番環境向けに転送がされますので、それをマニュアルにて検証環境にインポート（デプロイ）します。

## Trial環境の制約

Trial環境では複数のSubaccountを作成することができますが、そのSubaccountに追加のEntitlementsをアサインすることができません。
よって検証環境、本番環境に相当するアプリをデプロイする環境を準備できないため、その部分は実施することができません。

# Step by Step解説

## 動画5: **Transport Management Pt 1**

### 概要
｢**Cloud Transport Management**｣の実行環境を作成し、｢**Continuous Integration & Deliver**y｣との認証設定を行います。その後、検証環境(qa)、本番環境(prod)に相当する別のSub-accountを作成し、各環境に必要な設定を実施します。

### 動画

[BTP DevOps: Transport Management Pt 1](https://www.youtube.com/watch?v=ZZFITOwjNjo&list=PLkzo92owKnVybjwraUeSsMip0YTQnq013&index=5)

### 詳細説明

1. Introduction
2. Subscribe to SAP Cloud Transport Management
    1. ｢**Cloud Transport Management**｣を有効化（Subscription)します。
3. Create role collection and add business user
    1. ｢**Cloud Transport Management**｣用のロールコレクションを作成します。
    2. Tutorialの作成時点では、「**Cloud Transport Management**」の作成時に、自動でロールコレクションが作成されない仕様だったようで、必要なロールを付与したロールコレクションを作成しています。現在は`TMS_Viewer_RC`と`TMS_LandscapeOperator_RC`の2つが作成されるため、これを付与することでも代替できます。
4. Create Cloud Transport Management service instance and add service key
    1. ｢**Cloud Transport Management**｣のInstanceを作成します。｢**Cloud Transport Management**｣はInstanceとSubscriptionの双方を作成することが必要なサービスです。チュートリアルでは`tms`という名称のInstanceを作成しています。
    2. 次に、アクセスするためのサービスキーを作成します。チュートリアルでは、`tms-sk`という名称で作成しています。この後の処理で、｢**Continuous Integration & Delivery**｣と｢**Cloud Transport Management**｣が認証され、接続が可能になります。
5. Add credential with service key
    1. ｢**Continuous Integration & Delivery**｣から｢**Cloud Transport Management**｣にアクセスをするために、｢**Continuous Integration & Delivery**｣にサービスキーを登録します。｢**Continuous Integration & Delivery**｣の｢**Credentials**｣に`tms-sk`という名称でサービスキーを登録しています。このサービスキーを利用するという情報は何処に登録されているかというと、BAS上のアプリケーションの`comfig.yml`の`tmsUpload:`に`credentialsId: "tms-sk”`として記載されています。
6. Create qa and prod subaccount; enable Cloud Foundry (org); add space; add technical user as member
    1. 検証環境(qa)、本番環境(prod)に相当する別の｢**Subaccount**｣を作成します。｢**Subaccount**｣を作成し、｢**Cloud Foundry Environment**｣の有効化、｢**Cloud Foundry Space**｣を作成します。
    2. CF環境に接続するためのテクニカルユーザを作成します。Trial環境の場合は別ユーザの作成ができないので、自身のユーザで接続するため、この作成は不要です。
7. Configure entitlements for qa and prod subaccounts（Trialの場合不要）
    1. 動画2と同様に、｢**Entitlement**｣をアサインします。Trial環境では、制約からこれらの有効化できないために、この手順は飛ばします。
8. Create mapping for SAP HANA Cloud instance sharing
    1. ｢HANA Cloud｣は各環境で開発用の｢**Subaccount**｣のものを共用します。よって、｢**HANA Cloud central**｣（管理ツール）より共有の設定を実施します。
9. Recap

## 動画6: **Transport Management Pt 2**

### 概要

開発環境（Subaccount）にある｢Cloud Transport Management｣から他のSubaccountに存在する、Cloud Foundry環境にアプリをデプロイするために｢Destnations｣を用いて接続設定を実施します。｢Cloud Transport Management｣にて、それぞれのSubaccountに転送を行うためのパイプラインを作成します。

### 動画

[BTP DevOps: Transport Management Pt 2](https://www.youtube.com/watch?v=Ep54V7bnpHU&list=PLkzo92owKnVybjwraUeSsMip0YTQnq013&index=6)

### 詳細説明

1. Introduction
2. Documentation
    1. 開発用のSubaccountにある｢**Cloud Transport Management**｣から他のSubaccountにアプリケーションを設定するには、その間の接続設定が必要になります。接続の設定は｢**Destnations**｣機能を用いて実施します。｢**Cloud Transport Management**｣からMTAをCloud Foundry環境にデプロイする際は決まったルールで｢**Destnations**｣の設定する必要があるため、その内容を確認しています。
3. Create new Destination; clone for qa and prod
    1. ｢**Destnations**｣を設定します。各検証、本番環境用に`tmsqa`, `tmsprod` という名称で設定し、接続先のSubaccountおよびCloud Foundry環境を指定します。認証はBasicを選択し、Cloud Foundry環境のテクニカルユーザを設定しています。Trial環境の場合は別ユーザの作成ができないので、自身のユーザを入力します。
4. Cloud Transport Management, Landscape visualization: Create qa and prod node with route
    1. 次にMTAファイルを転送するための、パイプラインをGUIで作成していきます。｢Node｣という管理オブジェクトを作成し、`qa`という名称にします。この名称は`comfig.yml`の`tmsUpload:`に`nodeName: "qa”`として記載されているものと紐付きます。この設定により、転送先が決定されています。
    2. このノードの｢Contents Type｣を｢MTA｣とし、先ほど設定した、検証環境用の｢**Destnations**｣を指定します。
    3. 同様に本番用のものを作成し、検証用のものと接続します。
5. Business Application Studio: Update config.yml
    1. 現状のアプリケーションの設定では、｢**Cloud Transport Management**｣へのアプリケーションの転送は行われない状況です。ゆえにBAS上にて`comfig.yml`を修正し、転送が行われるようにします。
6. Stage, commit and push
    1. 変更した内容をGitHubにプッシュします。｢**Continuous Integration & Delivery**｣によって、アプリが再度ビルドされるとともに、それが完了すると、｢**Cloud Transport Management**｣のNodeへの転送されます。

## 動画7:  **Transport Management Pt 3**

### 概要

開発環境のデプロイ後に、「**Cloud Transport Management**」にキューが転送されていることを確認します。その後、それをインポートし、検証環境にアプリケーションをデプロイします。Trial環境ではリソース制約からデプロイができないため、チャプター4以降のオペレーションは実施できません。

### 動画

[BTP DevOps: Transport Management Pt 3](https://www.youtube.com/watch?v=6Rtjz4w8gt0&list=PLkzo92owKnVybjwraUeSsMip0YTQnq013&index=7)

### 詳細説明

1. Introduction
    1. 前回の「**Continuous Integration & Delivery**」の実行を振り返り、ログを確認すると、「**Cloud Transport Management**」の「qa Node」にデータが格納されていることを説明しています。
    2. 今回のコードには、デモデータの自動登録が含まれています。実際の利用を意識する場合は、これらのコメントを修正し、デモデータが登録されないようにする必要があることに言及しています。ただ、現状公開されているソースではこの記述はないため状況です。
2. Uncomment mta.yaml to prevent loading of initial data and update version number
    1. 上記のデモデータに関する補足説明をしています。
3. Stage, commit and push（Trialの場合不要）
    1. 修正したファイルで再度Pushをしています。ソースが動画収録時と異なっているため、本処理は不要です。
4. Cloud Transport Management: Import queue to qa node（Trialの場合実施不可）
    1. ｢Cloud Transport Management｣に転送されたキューをインポートします。｢**Cloud Transport Management**｣のqaにキューが取り込まれたことが確認できます。そして、それをマニュアル処理にてインポートし、qaのCF環境にデプロイを実施します。それが成功するとprodにキューが取り込まれていることが確認できます。Trial環境では、上記で述べたようにリソースの制約によりインポートは実施できません。キューがはいっいることのみ確認します。以後のオペレーションはTrial環境では実施できません。
5. Assign role collection to business user in qa subaccount
    1. 動画4と同様に、qa環境にデプロイしたアプリを確認するためのロールコレクションをアサインし、アプリの状況を確認します。
6. Cloud Transport Management: Import queue to prod node
    1. 同様にprodのインポートも実施しています。
7. Assign role collection to business user in prod subaccount
    1. 同様にロールコレクションを付与し、prodにデプロイされたアプリの確認
8. Cloud Transport Management: Landscape Visualization
    1. ログを確認します。

# 最後に
[次の記事](https://qiita.com/Yanagawa_Yoshihisa/items/eaa6d33cb3098579f4b4)では、各種作業後の通知の設定および稼働確認のためのテストを自動化する方法を実装します。