cTMSでiFlowを移送した時に遭遇したエラーあれこれ

# はじめに
今回SAP Integration Suiteで作成したiFlowを、SAP Cloud Transport Management（cTMS）を利用してソース環境からターゲット環境へ移送しました。
移送時に遭遇したエラーと解決策について、記載します。

# エラー1：Exception during start of deployment for deploy type 'SLP_CTS'
## エラーメッセージ
` Transport request 'パッケージ名' (id: 移送ID): Exception during start of deployment for deploy type 'SLP_CTS': Detailed error message was written into application server log `
![error01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/800851b0-f9ae-68b3-454d-639781ed7722.png)

## 原因及び解決策
移送先の宛先に記載する「Org Name」「Space Name」に含まれているスペースを「%20」、コンマを「%2C」に置換できていないことが原因のため、宛先の設定を確認してください。

以下画像のURLが`https://deploy-service.cf.<domain>/slprot/<Org Name>/<Space Name>/slp`形式の場合
`<Org Name>`や`<Space Name>`の部分にスペースやコンマが含まれていないか、含まれている場合は正しく置換できているかを確認してください。

例）`<Org Name>`が「SAMPLE Co., Ltd.」の場合、「SAMPLE%20Co.%2C%20Ltd.」に置換する必要があります。
![error01_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/c728c30e-5987-010f-b59a-deefbffd0a96.png)

### 補足
「Org Name」「Space Name」の代わりにCloud Foundryコマンド ライン インターフェイス（CLI）から取得できるguidを使用することも可能です。
guidを使用する場合は`https://deploy-service.cf.<domain>/slprot/<my-space-guid>/slp`形式で記載します。
guidはCLIで組織にログオンし、コマンド`cf space <my-space-name> --guid`を実行することで取得が可能です。

# エラー2：CF-UnprocessableEntity(10008)
## エラーメッセージ
`CTS+ process failed. Error: "Service operation failed: Controller operation failed: 422 Updating service "process_integration_transport_instance_mtls" failed: Unprocessable Entity: Error creating service "process_integration_transport_instance_mtls" from offering "it-rt" and plan "api": CF-UnprocessableEntity(10008): Invalid service plan. Ensure that the service plan exists, is available, and you have access to it. "`
![error02_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/dfdb52fa-9587-3eb7-cb03-493a3b1aef8a.png)

## 原因及び解決策
移送先のサブアカウントに以下のService Planが必要なので、Entitlementsに追加されているか確認します。
![error02_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/fa3a1684-3ad4-bb35-fd0a-9f53294a34ae.png)

# エラー3：Unauthorized
## エラーメッセージ
`Transport request 'パッケージ名 change userId_pw' (id: 移送ID): Exception during start of deployment for deploy type 'SLP_CTS': Error during deployment initialization: Unauthorized`
![error03_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/02e80eaf-3307-d4db-96b0-86157ba56a0e.png)

### 補足
上記エラーの状態で、移送先の宛先設定でCheck Connectionを実行すると以下のエラーとなります。
![error03_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/74c41d20-850a-f0f9-7da9-a6c2dbc33645.png)

## 原因及び解決策
移送先の宛先に設定している認証がBasic認証かつ、認証で利用しているアカウントのSIDのPWとユニバーサルIDのPWが異なっているのが原因のため、PWを揃える必要があります。

### PW状況の確認
CLIでコマンド「cf login」を実行してログインすると以下のエラーが表示されます。
`Error Code: 401
Raw Response: {"error":"invalid_client","error_description":"{\"error\":\"invalid_grant\",\"error_description\":\"User authentication failed: PASSWORD_LOCKED\"}"}`

### 解決手順
[SAP Manage my Account](https://account.sap.com/manage/accounts)へアクセスし、認証で利用しているアカウントの詳細の「Reset Account Password」からユニバーサルIDのPWと同じものを設定します。
参考：[SAP Community>Technology Q&A](https://community.sap.com/t5/technology-q-a/cf-login-authenticating-quot-error-quot-quot-invalid-grant-quot/qaq-p/12722929)

# エラー4：UniquenessViolationException
## エラーメッセージ
`CTS+ deployment for "パッケージ名.mtar" failed: "Content deployment for module "パッケージ名" to resource "process_integration_transport_instance_mtls" failed: org.cloudfoundry.multiapps.controller.persistence.services.FileStorageException: com.sap.cloud.lm.sl.cf.sap.content.client.ContentDeployerException: CPI deployment failed: com.sap.it.spc.ondemand.storage.exception.UniquenessViolationException: "`
![error04_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/006094e5-e284-97b6-2909-fdb2bc92f417.png)

## 原因及び解決策
手動でインポートエクスポートを行うなど、cTMSを利用した移送以外で同じ名称のパッケージまたはiFlowを作成したら起こるエラーです。同じ名称で作成しても、内部で保持しているリソースIDが異なるのでエラーとなります。
該当するパッケージを削除してから、再度移送を行う必要があります。
参考：[SAP for Me>note:3003834](https://me.sap.com/notes/0003003834)

# エラー5：LockException
## エラーメッセージ
`CTS+ deployment for "パッケージ名.mtar" failed: "Content deployment for module "パッケージ名" to resource "process_integration_transport_instance_mtls" failed: CPI deployment failed: com.sap.it.spc.ondemand.storage.exception.LockException: Lock cannot be acquired for reource リソースID "`
![error05_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/b089c0d9-c141-d726-22b1-65e6dd1b836b.png)

## 原因及び解決策
移送元か移送先の対象パッケージまたはiFlowがロックされていることが原因で起こるエラーです。

・パッケージがロックされている状態
![error05_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/8c52685e-556b-c981-642a-ddd8201db447.png)

・iFlowがロックされている状態
![error05_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/b015d4ae-ecf6-70c7-72ab-38c1107749c8.png)

対象パッケージまたはiFlowのロックを解除してから、再度移送を行います。
※ロックを解除しても即時反映されない場合もあるようです。その場合は反映を待つしかなさそうです。
※自分の画面上ではロックが解除されていても、他の人の画面ではロック状態のままの場合もあります。

# おわりに
今回実際に移送を試しながら上記エラーに直面し、その都度調査して解決策を探っていきました。解決策が見つからない場合は別環境への移送を試して、環境ごとの差異を確認したりもして、解消までに結構時間がかかる場合もありました。
この記事が参考になれば幸いです。