はじめに
ABAP Cloud Developer Trial 2022は、今年の4月に登場したトライアル用のABAP開発環境で、Docker Hubで提供されています。"Cloud"とつくのは、このバージョンから言語バージョン"ABAP for Cloud Development"を選択できるためです。すなわち、開発者拡張の検証もできます!
インストール手順は上記Docker Hubのドキュメントのほか、以下の記事がわかりやすいです。(以下の記事は1909ですが、手順は基本的に同じです)
過去にNW AS ABAP Developer Editionで環境構築したときと比べ、手順が簡単になっていることに驚きました。
本記事の目的
ABAP Cloud Developer Trialには、Cloud Connectorがデフォルトで含まれています。この記事では、Cloud Connectorを設定してABAP環境とBTP環境を接続する手順について説明します。
環境の構成
私の場合、ABAP Cloud Developer TrialはEC2インスタンスの中で実行しており、GUIやCloud Connectorにはローカルの環境から接続しています。
ABAPサーバとCloud Connectorは同一のDockerコンテナの中で起動しています。ABAPサーバはポート50000をHTTP用に、50001をHTTPS用に公開しています。Cloud Connectorはポート8443を公開しています。
設定手順
- Cloud Connectorの起動
- Cloud Connectorにログイン
- BTPサブアカウントと接続
- ABAP環境と接続
- Destinationの登録
- BASからの疎通確認
1. Cloud Connectorの起動
a4hのコンテナを起動したあと、ドキュメントの"Cloud Connector"のセクションに従い、Cloud Connectorを起動します。
docker exec -it a4h bash
/usr/local/sbin/rcscc_daemon start
※以下のエラーが出ますが、Cloud Connectorは使える状態です
ERROR: shell command for retrieving PID of process bound to SCC port failed -- com.sap.scc.util.ShellCommand$ExecutionException: Command lsof -i :8443 failed, caused by java.io.IOException: Cannot run lsof - execvpe failed (ENOENT - No such file or directory)
WARNING: cannot determine PID of process using port 8443
Cloud Connector 2.16.2 started on https://vhcala4hci:8443 (master)
2. Cloud Connectorにログイン
以下のURLで接続します。
https://<the container's IP>:8443
hostsでIPにvhcala4hci
に割り当てている場合はhttps://vhcala4hci:8443
でアクセスできます。
ユーザ:Administrator
、パスワード:manage
でログインします。ログイン後、パスワード変更を求められるので変更します。
3. BTPサブアカウントと接続
Connector > Add Subaccountをクリックします。
4. ABAP環境と接続
ABAP環境との接続を追加します。いくつかつまづきがあったので、トラブルシューティングの過程も含めて書きます。
4.1. 最初の設定
最初の設定では、Internal Hostをlocalhost
としていました。
接続チェックを行うとNot Reachable
となり、詳細を確認すると Issueer with subject DN CN=*.dummy.nodomain ... is not trusted. Add this issuer to the Cloud Connector backend trust store というメッセージが出ていました。
CN=*.dummy.nodomain ...
というのはABAPサーバの証明書であり、Tr-cd:STRUSTで、"SSL Server Standard"に設定されているものでした。
証明書のチェックが走るのはプロトコルをHTTPSにしているためで、HTTPにするとこの段階でも接続できます。
4.2. ABAPサーバの証明書をCloud ConnectorのBackend Trust Storeに追加
Tr-cd:STRUSTで、ABAPサーバの証明書をエクスポートします。
エクスポートした証明書をCloud ConnectorのConfiguration > ON PREMISEのタブからBackend Trust Storeにアップロードします。
再度接続確認を行ったところ、次は Certificate for doesn't match any of the subject alternative names というメッセージが出ました。
これは、Internal Hostにlocalhost
と設定しているが、ABAPサーバの証明書のSubject、およびSubject (Alt)にはlocalhost
が含まれていないため、信用できないということです。
対応方法として2つを考えました。
- Internal HostをABAPサーバの証明書のCNと合わせて
*.dummy.nodomain
とする - ABAPサーバの証明書を変更する
まずは一つ目の方法を試してみます。
4.3. Internal HostをABAPサーバの証明書のCNと合わせる
Dockerコンテナ内のhostファイルを確認します。
cat /ect/hosts
*.dummy.nodomain
に関するマッピングは定義されていないので、追加しました。
echo "172.0.0.1 test.dummy.nodomain" >> /etc/hosts
そのうえで、Internal Hostをtest.dummy.nodomain
とすると接続が成功しました。
4.4. ABAPサーバの証明書を変更する
このままでも問題ないのですが、test.dummy.nodomain
というのがしっくりこなかったので、ABAPサーバの証明書側を更新することにしました。
Tr-cd: STRUSTでSSL server Standardを右クリックし、Replaceを選択します。
このあと、新しい証明書をエクスポートし、Cloud ConnectorのBackend Trust Storeの証明書を置き換えます。
そのうえで、Internal Hostをvhcala4hci
とすると接続が成功しました。
4.5. 許可するパスの追加
ODataサービスに接続できるよう、許可するパスに/sap/opu/odata/
を追加しました。
5. Destinationの登録
BTPサブアカウントに以下のDestinationを追加します。
6. BASからの疎通確認
最後にSAP Business Application Studio (BAS)から疎通を確認します。テンプレートからUI5アプリを作成でODataの接続を確認してもよいのですが、以下のブログに載っているcurlコマンドで確認する方法がより手軽です。
curl -v -i "<destination>.dest/sap/opu/odata/iwfnd/catalogservice;v=2/ServiceCollection?%24top=1"
※Destinationの設定を変更した場合は、以下のコマンドでキャッシュのクリアが必要です。
curl localhost:8887/reload
おわりに
以前Cloud Connectorの設定をしたときは、証明書のエラーは出なかったのですが、記事を見返すとこのときはHTTP接続を使っていました。実際ABAPサーバとCloud Connectorは同一コンテナ内で十分セキュアなので、HTTPでもよかったのかもしれません。それでも、HTTPS接続のときに必要な設定を知れたのは収穫でした。