ブログ

【SAP BTP】CF環境へのデプロイ時にハマった事例の紹介

この記事をSNSでシェア!

SAP UI5やSpring Boot Javaにて作成したアプリケーションをSAP BTP Cloud Foundry上で動かす為にはデプロイ作業が必要になります。

私自身、Cloud Foundryへデプロイする機会が多く、今回はデプロイ時に起きたエラーの中でも特別ハマった事例について、対応方法も含めて紹介いたします。

事例①:SAP SuccessFactors Extensibilityサービスの展開時にエラー

1つめにSAP SuccessFactors Extensibilityサービスの展開時にHttp502エラーとなった事例を紹介いたします。

「SuccessFactors」を用いた開発案件においては、こちらのサービスが必要になってきます。

主にOdata通信にて、BTPからSuccessFactorsに対してデータ取得/更新を行う時などに必要なサービスとなっています。

デプロイ時には、SAP SuccessFactors Extensibilityサービスを毎回展開するようにしていましたが、ある時を境にデプロイエラーが出るようになりました。

デプロイエラー

以下が実際に起きた時のエラー内容です。 

※デプロイ自体はCFコマンドにて実行したものです。一部ぼかしを入れています。

「502 Error determining ・・・CF-ServiceBrokerBarResponse」と見慣れないエラーでした。

  • デプロイ時のログを確認したが、原因がすぐに分からない
  • BTP側でアップデート中であると想定し、少し時間を置いてから試したが、解消されず
  • 1日待ってからリトライをしたが、解消されず

SAPへ問合せ

これといった対象方法が見つからず、まずはSAPへインシデントを発行しました。

SAPからの回答は以下の通りでした。

  • SAP SuccessFactors Extensibilityサービスは、MTA 展開をサポートしていません。
  • サービス インスタンス SAP SuccessFactors Extensibility を MTA 記述子から削除し、展開後に手動でバインドできます。

これまでさんざん使用してきたサービスの展開がサポートされていない。さらに手動でのバインドを進めるような回答内容でしたので、かなり後が無くなってきました。

★★解決方法★★

結局、他に案が見つからず、デプロイ時のパラメータ設定をしているmta.yamlの定義内容を見直す事としました。

SAP SuccessFactors Extensibilityサービスの定義は、変更前はこのようになっています。

serviceやservice-planの定義については、代替え出来るものを探しましたが、見つかりませんでした。type宣言について代替え案が無いか調査を始めました。

【参考文献】【SAP Help Portal】 MTA Deployment Descriptor Syntax

org.cloudfoundry.managed-serviceについては、今回エラーとなった為、以下に対象を絞り込み

  • org.cloudfoundry.user-provided-service
  • org.cloudfoundry.existing-service

■サービスの特徴

サービス名内容
org.cloudfoundry.user-provided-service別サービスに関連するもの
org.cloudfoundry.existing-serviceサービスを事前設定した場合、再設定しない

サポートされていないサービスのMTA展開をさせないように「org.cloudfoundry.existing-service」を採用する事にしました。

■定義を変更

■再度、デプロイ実行 ※まずは検証機でテストです。

無事にデプロイ出来ました!!

デプロイ時のエラーは回避出来たもののアプリケーションがちゃんと動くか不安だったので、動作確認を実施。➡アプリケーションもこれまで通り動作出来る事を確認。

★その後、本番機へも同様の手順にてデプロイを行い、無事にリリースする事が出来ました。今現在もこちらの設定のまま進行中です。

同じような局面になられた方は、上記参考にしてください。

事例②:ProvidedService展開後にCF環境の設定値が消える。

2つめにUser-Providedサービスの展開時にエラーとなり、更にCF環境であらかじめ設定していたProvidedService内のパラメータが消えてしまった事例を紹介いたします。

User-Providedサービスとは?

こちらのサービスですが、簡単に述べますと、アプリケーションから参照する環境変数を管理するサービスとなります。

主にですが、以下のような情報を保持しています。(各システムで必要な環境変数)

  • Hana_DBの接続先情報(ID/PW)
  • SuccessFactors(EC Pay)のOdata接続情報
  • ログのパス

 などなど

基本的にJava Spring Bootで使用しているリソースファイル(application.yml)にて上記変数の定義を行っておくと、アプリケーションから環境変数の値を取得する事が可能です。

application.yamlに固定値を設定される場合は、Providedサービスを使用する必要はありません。

環境が複数ある場合は、本サービスを使用した方が効率が良いかと考えています。

デプロイエラー

事例①とは別のタイミングですが、ある時を境にデプロイエラーが出るようになりました。

コンソールの情報だと原因をつかめず、デプロイログを確認。

直訳すると「provided-serviceを解決出来ない….」的な内容でした。

BTPの環境設定なども再度確認していきます。

事前に設定した環境変数が消える

Providedサービスの設定を見る事にしましたが、Statusもエラーにはなっておらず、問題無さそうに見えました。

念の為、設定した環境変数を確認

何と、、設定内容が消えていました。。。。

(この時は私も消えてしまいたくなりました。。。 嘘です。。)

こちらについては、デプロイ時にProvidedサービスを展開したタイミングで消えてしまったと理解していましたが、何故消えてしまったのかが、この時点では分かりませんでした。

暫定対応

あまり時間をかける訳にもいかないので、やむなく以下の手順を実施しました。

  1. デプロイ開始
  2. デプロイ中のProvided-serviceの展開が終わった後に手動で設定更新

2番目の手順を入れるタイミングを見つけるのに時間がかかりましたが、デプロイ自体は成功し、消えてしまった設定も戻りました。

アプリケーションも問題無く、動いてそうです。

うまくいったものの、デプロイを行う度に上記の手順を行うのは、さすがにつらいと感じました。

★★解決方法★★

手動設定を入れず、今まで通りのデプロイ手順に戻せないか再度、調査しました。

ネットの記事なども数多くありましたが、結局Help Portalを見る事に。

【参考文献】【SAP Help Portal】 MTA Deployment Descriptor Syntax

Help Portal内の備考欄を見ると「Create or update a user-provided service configured with the specified resource parameters(指定されたリソース パラメーターで構成されたユーザー提供のサービスを作成または更新します)」と記載されている。

「更新します」と記載がありましたので、設定値が消えるはずは無いのでは?と思いましたが、それ以上考えるのはやめました。

「更新」よりも「消さない」が良いと判断し、1つ目の事例と同じく以下のtype宣言を使用してみる事にしました。

SAP SuccessFactors Extensibilityサービスの定義は、変更前はこのようになっています。

■定義を変更


■環境変数を事前に設定

■デプロイ実行

・・・

無事にデプロイ出来ました!!

環境変数も消えずに残ります。

アプリケーションもこれまで通り動作出来る事を確認出来ています。

こちらも同じような局面になられた方は、上記参考に対策ください。

最後に

今回紹介いたしました事例のうち、1つ目は本番環境での出来事となります。

毎回、本番作業前は念入りに準備を行っていますが、まさかの出来事でした。

SAPのリリースノートなどで更新があったのかとも考えていましたが、記載がありませんでした。

今後もこういった局面に遭遇するかもしれませんが、乗り越えていきたいですね。

ありがとうございました。

投稿者プロフィール

久保田 篤史
久保田 篤史
オンプレミス向けのWeb開発を経て、現在はSAP Business Technology Platform(SAP BTP)の開発に携わっております。
この記事をSNSでシェア!