SAP ABAP Platform 1909, Developer Edition（dockerhub）をopenSUSE Leap 15.3（EC2）で起動してみる

本記事では`SAP ABAP Platform 1909, Developer Edition`を`SAP`が`dockerhub`に公開しているイメージを使い構築します。

[ABAP Platform, Developer Edition](https://hub.docker.com/_/sap-abap-trial)

こちらのイメージを利用すれば、SAP？　エンタープライズのすごいやつ？　みたいにSAPにまったく触れてきていなかった人でもABAP開発環境を構築できます。
（ABAPはSAPで利用される開発言語）

ここで構築した環境を利用することでABAPのコードを実行してみたり、ABAP開発のあれこれを体験できます。

今まではABAPのトライアル環境といえば、[Trials and Downloads - SAP Developer Center](https://developers.sap.com/trials-downloads.html)からファイルをダウンロードして、ドキュメントを読みながらインストール作業と構築をしていく流れでしたが。

Dokerイメージで公開された事により、手順がだいぶ簡素になったように思います。

それにしても、あのSAPがDeveloperEditionをDockerで公開してくるというのは、なんとも時代の流れを感じます。

## SAP Cloud Appliance Library (CAL)にも登録されている

2021年6月14日に`SAP Cloud Appliance Library (CAL)`にも`SAP ABAP Platform 1909, Developer Edition`が追加されています。

ですので今回紹介する`Docker`による構築ではなく`CAL`を利用してAWS、Azure、Google Cloudにデプロイする事も簡単にできるかと思います。

※`SAP Cloud Appliance Library (CAL)`はSAPの様々な製品が登録されており、その登録されている製品を所有するパブリッククラウドアカウント（AWS、Azure、Google Cloud Platform）に対して手軽にデプロイできるサービスです。

##　各種Webサイト

- [SAP ABAP Platform 1909, Developer Edition: AVAILABLE NOW](https://blogs.sap.com/2021/02/15/sap-abap-platform-1909-developer-edition-available-soon/)
- [Setup Instructions※閲覧にはDockerHubアカウントが必要です](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions)
- [Trials and Downloads - SAP Developer Center](https://developers.sap.com/trials-downloads.html)
- [How to install a new license in your SAP ABAP Platform Developer Edition](https://blogs.sap.com/2021/04/22/how-to-install-a-new-license-in-your-sap-abap-platform-developer-edition/)
- [SAP ABAP Platform 1909, Developer Edition, can't connect to HDB DB in Eclipse](https://answers.sap.com/questions/13316513/sap-abap-platform-1909-developer-edition-cant-conn.html)
[SAP ABAP Platform 1909, Developer Edition on Docker: Tips and Tricks](https://www.sap.com/documents/2021/12/0a3389dc-0b7e-0010-bca6-c68f7e60039b.html)

## 事前準備

今回行う手順では下記が必要となるため事前に準備して下さい。

- SAP P-User もしくは S-User の準備
- DockerHubアカウント

### SAP P-User もしくは S-User

- [Trials and Downloads - SAP Developer Center](https://developers.sap.com/trials-downloads.html)

上記サイトから`SAPシステム`に接続するクライントである`SAP GUI`のダウンロード　及び　トライアル環境のreadmeとライセンスを取得するためには、P-User　もしくは S-Userと呼ばれるユーザIDが必要となります。

P-Userは[SAP Community](https://community.sap.com/)から発行できるためこちらから発行して下さい。

[SAP Community](https://community.sap.com/)にアクセスして、下記の赤枠の所から登録ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/32a74744-1537-a72c-fe4b-0c57f323ece1.png)

所属している組織でS-Userを持っている人はそちらを使って下さい。　

### DockerHubアカウント

DockerHubアカウントについては[dockerhub](https://hub.docker.com/)から登録できるためコチラから登録して下さい。

## SAP GUI for Windows　と　Readme and Licensesのダウンロード

- [Trials and Downloads - SAP Developer Center](https://developers.sap.com/trials-downloads.html)

上記ページからABAP Platfrom 1909 Developer Edition on SAP HANA 2.0を探して`SAP GUI for Windows`と`Readme and Licenses`をダウンロードして下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/ced2d0d7-7c81-3acf-6cc3-8b15eb23308e.png)

この2つのファイルが取得できればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/a86eb9e2-bb8a-78e7-ae7a-de246d632f21.png)

※2021年10月現在、`Readme and Licenses`に含まれるライセンスは本手順では使えませんでした。
ですので、ライセンスキーについては[SAP License Keys for Preview, Evaluation and Developer Versions](https://go.support.sap.com/minisap/#/minisap)から取得できるライセンスを利用しています。

## Readme and Licensesを参照してみる。

ダウンロードしたReadme and Licensesには`readme.pdf`と`Licenses`が含まれています。
まずは`readme.pdf`を参照してみます。

結論を話すと`readme.pdf`にある情報だけだと断片的で構築は完了しません。

pdf中にリンクの記載がありますが、[Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions)が手順の詳細となりコチラを参照して構築していく形になります。（あとSAPコミュニティのブログに参考になるブログがいくつもある）

## ハードウェア要件について

readmeを読むとハードウェア要件については [Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions)を参照と書いてあるのでコチラを確認します。

現状は下記のようです。

- Linux
    - 4 CPUs
    - 16GB RAM
    - 150GB Disk
- Windows
    - 4 CPUs for Docker Desktop
    - 16GB for Docker Desktop
    - 170GB disk for Docker Desktop
- macOS
    - 4 CPUs for Docker Desktop
    - 16GB for Docker Desktop
    - 170GB disk for Docker Desktop

今回はAWS EC2でインスタンスを用意して利用していきます。

Linuxディストリビューションについては特に記載はありませんが、`SAP`だったら`SuSE`か`Red Hat`かな？　となんとなく思う所です。

コミュニティブログを読んでいると、下記のようなコメントを中の人がしていて`openSUSE`で試してるっぽいので今回は`openSUSE`を選択してみます。

>We only tested it with 15.0.
>
>I believe, at the time 7.52 SP04 was new, the latest version of openSUSE was 15.1 - with >which we DID have a problem - problem was solved when we reverted to 15.0 .
>
>Therefore I recommend 15.0.

[該当コメントへのリンク](https://blogs.sap.com/2021/02/15/sap-abap-platform-1909-developer-edition-available-soon/#comment-591898)

## 今回構築する環境について

## ローカルPCにSAP GUIのインストール

SAPシステムに接続するGUIクライアントとである`SAP GUI for Windows`のインストールについて記載すると記事が長くなるので別記事に分けます。

[SAP GUI for Windowsをインストール。SAP Logonに接続エントリを追加してSAPシステムにログインしてみる](https://qiita.com/SAITO_Keita/items/cc1681d16d8364701b44)

## EC2インスタンスの準備

今回は下記、`MarketPlace`にある`openSUSE Leap 15.3`のAMIを利用してEC2インスタンスを準備しました。

[openSUSE Leap 15.3](https://aws.amazon.com/marketplace/pp/prodview-mi5wkeevf4n5i?sr=0-5&ref_=beagle&applicationId=AWS-Marketplace-Console) 

PrivateIPアドレス 10.10.10.182
InstanceType `t3.xlarge（ vcpu 4;Memeory 16GiB）`
EBS `150GiB（gp3）`

※今回構築しているEC2インスタンスについては、Privateサブネットに配置し（NATでインターネットには出れる）にVPN経由でsshに接続しています。

### SAP-ABAP

[Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions)の`SAP GUI`項目にABAPシステムの情報が記載されています。

SID A4H
Please, add a custom specified system with the Application Server <the container's IP>or localhost if you exposed the port 3200 (i.e. -p 3200:3200) or vhcala4hci if you updated your hosts file. Finally use Instance 00 and SID A4H.
The user name is DEVELOPER with the password Ldtf5432.

### SAP-HANA

[Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions)の`SAP HANA Studio`項目にHANADBの情報が記載されています。

今回はHANADBに直接接続しませんが、記載しておきます。

SAP HANA Studio
Please, use <the container's IP> or localhost if you exposed the port 30213 (i.e. -p 30213:30213) or vhcala4hci if you updated your hosts file. Finally use Instance 02 and MDC (the port 30213).
For the database SYSTEMDB, use the user SYSTEM with the password Ldtf5432.
For the database HDB, use the user SAPA4H with the password Ldtf5432.

## パッケージアップデートからdocker pullまで

今回利用したAMI [openSUSE Leap 15.3](https://aws.amazon.com/marketplace/pp/prodview-mi5wkeevf4n5i?sr=0-5&ref_=beagle&applicationId=AWS-Marketplace-Console) については最初からdockerがインストール済みの状態となります。（Docker version 20.10.6-ce, build 8728dd246c3a）

sshで構築したEC2インスタンスにアクセスして、パッケージアップデートから`docker pull`までを実施します。

```bash:openSUSEにsshでログインしてコマンド実行（ec2-user）
# とりあえずパッケージアップデート
sudo zypper update
# 自動起動設定
sudo systemctl enable docker
# dockerグループにec2-userを追加
sudo gpasswd -a ec2-user docker
# 設定反映させるため再起動
sudo reboot

# コマンド実行後ユーザ名とパスワード名を聞かれるのでdockerhubで取得したアカウントを入力
docker login
# ABAP Platform 1909 DevEdition を pull（かなり時間がかかります）
docker pull store/saplabs/abaptrial:1909
```

`docker pull`はかなり時間がかかりますが、気長に待ちましょう。

## docker run コマンド調整

[Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions) の`Run`項目を読むと`docker run`コマンドを実行するにあたっての諸注意が記載されています。

- Linuxカーネルの制限チェックとオプション
- -pオプション；ポートの調整
- -agree-to-sap-licenseオプション

一つずつ解決していきます。

## ‎Linuxカーネルの制限チェック

[Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions) にはカネールパラメータについては下記のように記載されており、docker runに`--sysctl`をつけて対応するモノとhost自体のsysctlに設定する値の二種類があります。

```text:カーネルの制限について
kernel.shmmax (allowed for docker run --sysctl) > 21474836480
kernel.shmmni (allowed for docker run --sysctl) > 32768
kernel.shmall (allowed for docker run --sysctl) > 5242880
kernel.msgmni (allowed for docker run --sysctl) > 1024
kernel.sem (allowed for docker run --sysctl) > 1250 256000 100 8192
Number of Opened File descriptors (RLIMIT_NOFILE, ulimit -n, docker run --ulimit nofile=1048576:1048576) > 1048576
vm.max_map_count (must be set on the host via sysctl on GNU/Linux) > 2147483647
fs.file-max (must be set on the host via sysctl on GNU/Linux) > 20000000
fs.aio-max-nr (must be set on the host via sysctl on GNU/Linux) > 18446744073709551615
```

`must be set on the host via sysctl on GNU/Linux`と記載されている下記パラメータは`/etc/sysctl.conf`に設定を行います。

```text:/etc/sysctl.conf
vm.max_map_count=2147483647
fs.file-max=20000000
fs.aio-max-nr=18446744073709551615
```

残りのパラメータは`docker run`にパラメータを渡すことにより調整します。

```text:docker-runに追加するパラメータ
--sysctl kernel.shmmax=21474836480 --sysctl kernel.shmmni=32768 --sysctl kernel.shmall=5242880 --sysctl kernel.msgmni=1024 --sysctl kernel.sem="1250 256000 100 8192" --ulimit nofile=1048576:1048576
```

```bash:永続的に反映するために/etc/sysctl.confを編集
# vim で /etc/sysctl.confを編集して末尾に下記を追加
#vm.max_map_count=2147483647
#fs.file-max=20000000
#fs.aio-max-nr=18446744073709551615

sudo vim /etc/sysctl.conf

# 更新した/etc/sysctl.conf から読み込み
sudo sysctl -p
```

## -agree-to-sap-licenseについて

`docker run`実行時に`You have to accept SAP Developer Center Software Developer License Agreement before you can conitue.`とLicense Agreementに同意するかプロンプトで`Accept`の入力を求められます。

`-agree-to-sap-license`をつけるとこの確認をバイパスする事ができます。

## ポートの調整

`docker run`で公開するポートを調整します。

[Setup Instructions](https://hub.docker.com/_/sap-abap-trial/plans/ac8a4f9b-ae29-4afa-9b39-25aeea24b821?tab=instructions) にはポート`30215`について記述がありませんが、どうやら追加しないとHDBに接続できないらしいので追加しておきます。
本手順では`HANA Studio`を利用して`HANADB`に直接アクセスしないのであまり関係ありませんが一応設定しておきます。

参考ブログ：[SAP ABAP Platform 1909, Developer Edition, can't connect to HDB DB in Eclipse](https://answers.sap.com/questions/13316513/sap-abap-platform-1909-developer-edition-cant-conn.html)

```text:SAP-Ports調整
#3200: SAPGUI Instance 00
#3300: RFC Instance 00
#8443: SAP Cloud Connector
#30213: SAP HANA MDC Database
#30215: SAP HANA HDB
#50000: AS ABAP HTTP
#50001: AS ABAP HTTPS

# docker runに追加するパラメータ
-p 3200:3200 -p 3300:3300 -p 8443:8443 -p 30213:30213 -p 30215:30215 -p 50000:50000 -p 50001:50001
```

## docker runコマンドを実行

最終的には下記のようなコマンドになりました。

```bash:docker-runコマンド
docker run \
--stop-timeout 3600 \
--sysctl kernel.shmmax=21474836480 \
--sysctl kernel.shmmni=32768 \
--sysctl kernel.shmall=5242880 \
--sysctl kernel.msgmni=1024 \
--sysctl kernel.sem="1250 256000 100 8192" \
--ulimit nofile=1048576:1048576 \
-p 3200:3200 \
-p 3300:3300 \
-p 8443:8443 \
-p 30213:30213 \
-p 30215:30215 \
-p 50000:50000 \
-p 50001:50001 \
-i --name a4h -h vhcala4hci store/saplabs/abaptrial:1909 \
-agree-to-sap-license
```

コマンドを実行すると最終的に画像のようなメッセージがでてくるため、こちらが表示されたら起動完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/9c142847-5dd7-8607-c488-88182af7ea38.png)

## SAP GUIで接続してみる

ローカル端末にインストールした`SAP GUI`を起動して接続エントリを追加します。
本記事では利用した接続情報の紹介だけで、エントリの追加方法については別記事に分けます。

[SAP GUI for Windowsをインストール。SAP Logonに接続エントリを追加してSAPシステムにログインしてみる](https://qiita.com/SAITO_Keita/items/cc1681d16d8364701b44)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/74a5bf64-1204-4eb9-800a-cd0658c39ff1.png)

## SAPシステムにログインしてみる

手順にあるよう、`DEVELOPER`ユーザとそのパスワードでクライアント001にログインしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/feb583db-1b9e-1f06-461c-026129db09c0.png)

2021年10月にAWS上の構築した本環境では`Logon not possible(error in license check)` と表示されログインできませんでした。
`Logon not possible(error in license check)` と表示されているのでライセンスがおかしい。

[コミュニティブログのコメント](https://blogs.sap.com/2021/02/15/sap-abap-platform-1909-developer-edition-available-soon/#comment-557528)で中の人が`DEVELOPER`と同様のパスワードで`SAP*`という特権ユーザでアクセスできると記載があったので試してみます。

※`SAP*`はライセンス関係なくログインできる。なお一般的には通常ログインできないように調整されていたりします

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/6a2ed8a5-13e1-ee66-996e-5534e1ce1eca.png)

`SAP*`で`CLI001`にログインできました。

## SLICENSEでライセンスの確認

左上の入力ボックス（コマンドフィールド）に`slicense`と入力し実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/c111ea19-866d-b113-383b-81bd51905ec3.png)

SAPシステムにインストールされているライセンス情報が表示されますが、どうやら本手順にてAWS上に構築した環境についてはハードウェアキーがインストールされているライセンスキーのハードウェアキーから変更になっていて、ライセンスが有効になっていないように見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/667edfbb-0746-0251-2939-3b2a70223924.png)

## minisapでライセンスの取得

SAPのトライアル環境で利用するライセンスキーについては、下記サイトから取得できるためこちらからダウンロードを実施します。

[SAP License Keys for Preview, Evaluation and Developer Versions](https://go.support.sap.com/minisap/#/minisap)

`Description`は `A4H - SAP NetWeaver AS ABAP 7.4 and above (Linux / SAP HANA)`を選択。
`Hardware key`には`slicense`画面で確認した、`Active Hardware Key`を入力

必要情報を入力してことを確認して`Generate`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/dc663caa-bab4-3cf8-188a-757b8904fb10.png)

`A4H_Multiple.txt`というライセンスがダウンロードできました。

## minisapで取得したライセンスファイルをdocker cpでコピー

現在、SAPシステムについては`docker run`で起動したままになっているかと思うので、`ssh`で画面から`CTRL-c`で一旦停止します。

先程ローカルにダウンロードした、`A4H_Multiple.txt`をEC2上にコピーし、ホームディレクトリに配置します（scp等で）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/1e124cc7-0857-4627-4018-a695a3b61d7b.png)

```bash:docker-cpでライセンスファイルをコピー
docker cp ~/A4H_Multiple.txt a4h:/opt/sap/ASABAP_license
```

## docker startで起動

```bash:docker-startで起動
docker start -ai a4h

#起動メッセージがでるまでしばらく待ちます
```

起動したら`SAP GUI`で接続し、`DEVELOPER`でログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/7b873e37-de3a-1bef-e5d6-460f74b88dbd.png)

ログインできました。

## 修正後のslicenseを確認してみる

修正後のslicenseの画面を確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/33420678-427d-2535-a908-4f1f274528a7.png)

ハードウェアキーとインストールされているライセンスのハードウェアキーが一致しており、ステータスもグリーンになっている事が確認できます。

また有効期限が`2022.1.17`となっているため3ヶ月後にはライセンスが切れます。

ライセンスが切れる間際にはまた、[SAP License Keys for Preview, Evaluation and Developer Versions](https://go.support.sap.com/minisap/#/minisap)からライセンスをダウンロードしてインストールして下さい。

## docker runで表示されていたメッセージについて

`docker run`コマンドの実行時に表示されているメッセージについて流しましたが、あとから確認してみると実は色々と情報が含まれていました。

HDBのライセンスについては問題ない表示があったり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/992773a7-fd16-4c6b-b3bd-e083ac29dcbe.png)

ABAPのライセンスについてはインストールされてないけど、`/opt/sap/ABAP_license`に格納されてるライセンスで差替は成功したと出ている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/2c9c3042-b54f-850a-45f0-e0852a3c2b2e.png)

が、もともとも`/opt/sap/ABAP_license`に格納されているライセンスを確認するとすでに期限が切れているしハードウェキーが異なっている。（下記のコマンドで、コンテナ内の`/opt/sap/ASABAP_license`を確認するとライセンスキーが違う事が確できます。）

```bash:/opt/sap/ASABAP_licenseを表示
docker exec -it a4h less /opt/sap/ASABAP_license
```

また下記ファイルにupdateしたログが残っており現行のハードウェキーが取得できました。

```bash：/usr/local/bin/asabap_license_updateを表示
docker exec -it a4h /usr/local/bin/asabap_license_update
```

本手順では`SAP*`でログインしてハードウェキーを確認していましたが、`docker run`の実行結果を注意深くみていればライセンスがおかしい事に気がつけたかもしれません。

## 今回構築したEC2の料金

24/365でずっと起動させてるケースで月額　$173 ほどかと思います。

[参考：AWS Pricing Calculator - ABAP Platform Developer Edition On openSUSE 24/365稼働](https://calculator.aws/#/estimate?id=f989681faf3e4fba7e71eeaf693ef6763a761190)

土日を停止するだったり、日中のみ稼働する等に限定すれば更に金額お安くなるかと思います。
（平日に8時間稼働のケースだとだいたい月額　$42 ほど）

[参考AWS Pricing Calculator - ABAP Platform Developer Edition On openSUSE　平日8時間稼働]
(https://calculator.aws/#/estimate?id=38e661f245ae0bdf59a08cbdd8ac6a4381a39cba)


## 総評

構築にあたり、ライセンスの所に少し難はありました。

本手順ではABAP側のライセンスを調整して、HDB側のライセンスは問題なかったので特に処置はしませんでしたが、構築時期によってはHDB側のライセンスが失効してしまう事もあるのかも？
（今回利用したDockerイメージを2021-08-09以降に利用したらそんな事もあるかも）

ただし、これを加味してもわりとさっくりと環境構築は完了しました。
手軽にABAP開発環境が手に入るのはとても素晴らしい事かと思います。

なお、現状、`SAP ABAP Platform 1909, Developer Edition`についてはDockerイメージ以外ではSAP CALでしか提供していないように思います。

最近、`Docker Desktop`の有料化が始まりましたが、SAPからDockerイメージ以外での提供方法が今後増えるのかどうかが少し気になる所かと思います。