ABAP Platform, Developer EditionとAWS OpenSUSE+Dockerで、個人開発環境を構築した記録


# ABAP Platform, Developer EditionとAWS OpenSUSE+Dockerで、個人開発環境を構築した記録

* ABAP Platform, Developer EditionをAWSのEC2で構築することができ、個人用のOn-premise ABAP環境が得られた。
* OSとしてSUSE Linuxを採用することで、環境設定や構築の手間はかなり省略することが可能であることが確認できた。

## 事前準備が必要なもの

SAP.com、Docker、AWSのアカウントと、Putty、7-Zipのインストールが必要です。取得方法やインストール方法について、本記事では触れません。

| 事前準備が必要なもの | 必要な場面 |
|-------------------|----------------------------------------------------------------------- |
| SAP.comのアカウント| AS ABAPとHDBのライセンスファイルを入手するのに必要                      |
| Docker Hubのアカウント   | インストールファイルをAWSのEC2にhub.docker.comからPullしてくるのに必要　|
| AWSのアカウント      | EC2にSUSE Linuxのサーバーを作成するのに必要                             |
| PuTTyのインストール  | EC2の操作、ライセンスファイルのファイル転送用                           |
| 7-Zip等              | ライセンスファイル、readmeファイルの解凍用                                                     |

#### 事前準備が必要ないもの

<dl>
<dt>ローカルPCのディスク空きの確保</dt>
<dd>ローカルPCにはテキストファイル＆PDFをダウンロードするだけです。ディスクサイズを気にする必要はほとんどの場合ないはずです。</dd>
</dl>


## 仕様一覧

### AWS EC2

残念ながら、無料の範疇にはありません。アタッチしたボリュームサイズは多すぎたかもしれません。

| 仕様              | 詳細                                                     |
| ----------------- | -------------------------------------------------------- |
| AMI名             | SUSE Linux Enterprise Server for SAP Applications 15 SP2 |
| OS                | SUSE Linux Enterprise Server 15 SP2                      |
| インスタンスタイプ | t2.xlarge                                                |
| アタッチしたボリュームサイズ   | 200GB                                         |
| vCPUの数 | 4                                                                  |
| リージョン | ap-northeast-1                                                   |

### Docker

Dockerは無料のPlanで問題ありません。

| 仕様              | 詳細                                                     |
| ----------------- | -------------------------------------------------------- |
| Plan             | Free Plan                                                 |


## 必要なハードウェアのスペック

Linuxの場合です。AWS EC2のインスタンスタイプを選ぶ基準となります。

* 4 CPUs
* 16GB RAM
* 150GB Disk


## 手順概要
大まかな手順の概要は以下の通りです。

1. ReadmeとLicenseのファイルをローカルPCにダウンロードする。
https://developers.sap.com/trials-downloads.html?search=ABAP+Platform
必要なもの：SAPのアカウント

2. ReadMeに記載のHardware Requirementに記載のスペックで、AWSのEC2のインスタンスを起動（作成）する。OSはSUSE Linuxを用いる。必要なCPU数のインスタンスタイプを選び、ストレージをアタッチする。
必要なもの：AWSのアカウント

3. EC2のインスタンスにSSHログインし、Dockerをインストールの上、pullする。
必要なもの：Dockerのアカウント

4.Dockerのコンテナにライセンスファイルを格納する。

5.hostsファイルに記載を追加する。

## 1. ReadMeとLicenseのファイルをローカルPCにダウンロードする

#### 1-1. SAP Developers

SAP DevelopersのTrials and Downloadsにて検索文字列``ABAP Platform``で検索するか、以下のURLにアクセスすると、 _ABAP Platform 1909 Developer Edition on SAP HANA 2.0_ が見つけられます。readmeファイルと、ライセンスファイルをローカルPCに保存します。インストールファイルのダウンロードをこのWebページで行うわけではありません。ローカルPCのディスクサイズは気にしなくても大丈夫です。


https://developers.sap.com/trials-downloads.html?search=ABAP+Platform
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198295/c95c8f3d-0361-a2ea-bbac-b2b36eed002d.png)

#### 1-2. ダウンロードしたファイルを展開する

``readmeliecense.zip``というファイルがダウンロードできるので、zipを展開します。その中に、``Licenses.rar``と``Readme.rar``というファイルがあるので、やはりこれも展開します。

なお、ダウンロードしたZIPファイルのファイル名が _license_ ではなく、 _liecense_ となっているので、PSCPの際にはご注意ください。


#### 1-3. readmeの記載事項を読む

readme.pdfには、ハードウェア要件から、起動したDockerコンテナの停止の方法まで記載されていますが、ローカルPCにインストールするかのような書き方になっていますので、EC2用に読み替えます。以下、readme.pdfの各節ごとにコメントを入れておきますが、Dockerのインストールの箇所をのぞけば、基本的にreadme.pdfの内容に従って進めることができます。

> **Docker account**

Dockerアカウントは必要なので、読み替え不要です。

> **Download Docker**

SUSE Linuxの場合、Dockerのダウンロードは必要ありませんが、インストール作業は必要です。後ほど出てきます。

> **Make sure Docker Engine is running**
> **Login to Docker**
> **Pull the image ABAP Platform 1909 DevEdition to your local PC**
> **Check that the pull was successful**
> **Create a container and start the ABAP system**

上記は、今回使用するAWS EC2の場合でも必要です。

## 2. ReadMeに記載のHardware Requirementに記載のスペックで、AWSのEC2のインスタンスを起動（作成）する。

すごく飛ばして、SSHでログインできたものとします。
ストレージをアタッチするとか、Elastic IPを設定するとか、セキュリティグループの設定をするとか、一通りの作業があります。


## 3. EC2のインスタンスにSSHログインし、Dockerをインストールの上、pullする。

#### 3-1. Dockerパッケージのインストール

```shell_session
:~> sudo zypper install docker
```

#### 3-2. Docker Daemonをブート時に起動するように設定

```shell_session
:~> sudo systemctl enable docker
```

#### 3-3. Docker Daemonの開始

```shell_session
:~> sudo systemctl start docker
```
#### 3-4. Dockerインストールの確認



```shell_session
:~> sudo docker run hello-world

(略)
Hello from Docker!
This message shows that your installation appears to be working correctly.
(略)

```
#### 3-5. ログインユーザにdocker daemonにアクセスするための権限を付与

ログインしている ``ec2-user`` でdockerにアクセスしたいので、 ``ec2-user`` をdockerグループに所属させるように ``usermod`` します。また、再ログインを行います。

```
:~> sudo /usr/sbin/usermod -a -G docker ec2-user
```

#### 3-6. Dockerにログイン

ここで、Dockerのアカウントが必要になります。

```
:~> docker login --username=yourhubusername -- mail=youremail@company.com
```

#### 3-7. docker pull (ABAP Platform 1909 Developer EditionをEC2のサーバにダウンロード)

```
:~> docker pull store/saplabs/abaptrial:1909
```
この作業は結構時間がかかります。

#### 3-8. ホスト名を変更する

ホスト名が、``vhcala4hci``ということが前提になっているようなので、ホスト名の設定ファイルを編集します。

```
:~> sudo vi /etc/hostname
```

viエディタで、ホスト名を``vhcala4hci``に書き換えます。

```
vhcala4hci
~
~
"/etc/hostname" 1L, 11C                                       1,10          All
```
リブートが必要なので、一度インスタンスを停止・再開をします。

#### 3-9. ライセンスファイルをホームディレクトリに格納する

ローカルPCのライセンスファイルとして、``A4H.txt`` と、``HDB.txt`` をカレントディレクトリに配置して、PuTTYをインストールするとついてくるPSCPを使ってSSHプロトコルでライセンスファイルをEC2のサーバー側にファイルをコピーします。

```
> pscp -4 -P 22  -i ./my-key-pair.ppk -r readmeliecense/Licenses ec2-user@xxxxxx.ap-northeast-1.compute.amazonaws.com:.
```
#### 3-10. Docker run

Readmeに記載されているrunコマンドは以下なのですが、ライセンスの確認や、システム設定のチェック回避をするために、もう一つ下のコマンドを使いました。


##### Readmeに記載のrunコマンド

```
docker run --stop-timeout 3600 -i --name a4h -h vhcala4hci -p 3200:3200 -p 3300:3300 -p 8443:8443 -p 30213:30213 -p 50000:50000 -p 50001:50001 store/saplabs/abaptrial:1909
```

##### 実際に使っているrunコマンド
```
:~> docker run -v A4H.txt:/opt/sap/ASABAP_license -v HDB.txt:/opt/sap/HDB_license --stop-timeout 3600 -i --name a4h -h vhcala4hci -p 3200:3200 -p 3300:3300 -p 8443:8443 -p 30213:30213 -p 50000:50000 -p 50001:50001 store/saplabs/abaptrial:1909 -skip-limits-check -agree-to-sap-license
```

##### 差分1

ライセンスファイルをEC2のサーバーのホームディレクトリに格納しておき、そのファイル名をそれぞれA4H.txt、HDB.txtとした場合、下記のオプションで指定します。runした後にdockerに入れることもできます。

```
-v A4H.txt:/opt/sap/ASABAP_license -v HDB.txt:/opt/sap/HDB_license
```

##### 差分2

このオプションを入れることで、システムパラメータ設定チェックを回避することができます。

```
-skip-limits-check
```

##### 差分3

このオプションを入れることで、インスタンス停止＆開始した後にする、docker startコマンドの際に、Acceptとの入力待ちで、一時止まらなくなります。

```
 -agree-to-sap-license
```
##### 補足

一度runをしたら、トラブルがない限り再度runをする必要はないのですが、今回セットアップ時には何度もrunをし直す必要が生じました。その際には、以下のコマンドでクリアする必要がありました。

```
:~> docker rm a4h
```

## 4. GUIでABAP Platformに接続する。

### 4-1. hostsファイルのファイルを編集

Windows10のローカルPC側で、下記のフォルダに格納されているファイルを編集し、AWS EC2へ、サーバー名でアクセスできるように以下を追記します。

> C:\Windows\System32\drivers\etc

```
99.99.99.99 vhcala4hci      vhcala4hci.dummy.nodomain
```
99.99.99.99 は、EC2のElastic IPを指定することになります。

### 4-2. GUIの設定を追加する。

GUIの接続パラメータとして以下の設定をします。

| 項目 | 設定内容 |
|---------|---|
| システムID | A4H |
| インスタンス番号 | 00 |
| アプリケーションサーバー | xxx.ap-northeast-1.compute.amazonaws.com (パブリックDNS）|


これで、GUIで接続することができます。

## 5. 停止＆再開の手順

インスタンス停止前に、docker stopをします。

```
:~> docker stop --time 7200 a4h
```

再開する際には、docker startをします。

```
:~> docker start -ai a4h
```