SAP on Azure デプロイ自動化フレームワーク - コントロールプレーン作成

# ブログ内容
私のブログを参考にして構築する場合は、赤点線枠のリソースが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521211/42074716-3221-a017-98e5-e74688aec2ec.png)

作業内容として、以下を実施してコントロールプレーンを作成していきます。
+ ストレージアカウントの準備
+ 作業用サービスプリンシパルの準備と権限付与
+ 構築に必要なファイルをDL＆配置
+ Terraformの変数ファイル（.tfvars）の修正
+ コントロールプレーンの作成

:::note info
コントロールプレーンとは
デプロイを一元管理するために用意しておりこの後利用していくものです。
:::

# ストレージアカウントの準備
Azure Portalからストレージアカウントを作成します。
作成手順は、今回割愛しますがデフォルト設定かつ費用がかからないような設定をしています。

コントロールプレーンを作成する際は、CloudShellからコマンドを実行して作成するためストレージアカウントを用意します。

ストレージアカウントを作成後、CloudShellを利用できる状態にします。

# 作業用サービスプリンシパルの準備と権限付与
サービスプリンシパルは以下コマンドで作成します。
**scopes**と**name**の引数のところは修正が必要です。

<details><summary>サービスプリンシパル作成</summary>

```rb
az ad sp create-for-rbac --role="Contributor" --scopes="/subscriptions/<subscriptionID>" --name="<environment>-Deployment-Account"
```
</details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521211/ffcbe563-54b1-97aa-7ddd-720e9d0663e7.png)

実行するとサービスプリンシパルの情報が表示されます。

:::note alert
この後の作業でも必要になってきますので、値を必ず記録しておいてください！
:::


作成後、以下コマンドで権限を付与します。
**assignee**と**scope**の引数のところは修正が必要です。

<details><summary>サービスプリンシパルへの権限付与</summary>

```rb
az role assignment create --assignee <appId> --role "User Access Administrator" --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>
```
</details>

# 構築に必要なファイルをDL＆配置
① Githubで公開されているファイルをDLし、ファイルを配置していきます。

<details><summary>配置先のディレクトリ作成＆ファイルDL</summary>

```rb
mkdir -p ~/Azure_SAP_Automated_Deployment
cd ~/Azure_SAP_Automated_Deployment
git clone https://github.com/Azure/sap-automation.git
git clone https://github.com/Azure/sap-automation-samples.git
```
</details>

② 今回構築する際に使用するディレクトリを作成していきます

<details><summary>ディレクトリ作成</summary>

```rb
cd ~/Azure_SAP_Automated_Deployment
mkdir -p WORKSPACES/DEPLOYER
mkdir -p WORKSPACES/LIBRARY
mkdir -p WORKSPACES/LANDSCAPE
mkdir -p WORKSPACES/SYSTEM
```
</details>

③ サンプルファイルをコピーして、今回利用するファイル名に変更します。
サンプルファイルは、「~/Azure_SAP_Automated_Deployment/sap-automation-samples/Terraform/WORKSPACES」配下にあります。

「~/Azure_SAP_Automated_Deployment/WORKSPACES/DEPLOYER/」へディレクトリの階層含めファイルをコピーします。

以下4ファイルの配置が必要です。

| 命名規則 | サンプルファイル名 | 変更後の名前 |
|:-:|:-:|:-:|
| \<environment>-\<region>-DEP00-INFRASTRUCTURE.tfvars  | MGMT-WEEU-DEP00-INFRASTRUCTURE.tfvars  | DEMO-JAEA-DEP00-INFRASTRUCTURE.tfvars  |
| \<environment>-\<region>-SAP_LIBRARY.tfvars  | MGMT-WEEU-SAP_LIBRARY.tfvars  | DEMO-JAEA-SAP_LIBRARY.tfvars  |
| \<environment>-\<region>-SAP01-INFRASTRUCTURE.tfvars  | DEV-WEEU-SAP01-INFRASTRUCTURE.tfvars  | DEV-JAEA-SAP01-INFRASTRUCTURE.tfvars  |
| \<environment>-\<region>-SAP01-X00.tfvars  | DEV-WEEU-SAP01-X00.tfvars  | DEV-JAEA-SAP01-X00.tfvars  |

ディレクトリとファイルの配置は以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521211/72cc324b-433b-1077-a8ca-020cbfbc9a86.png)

# Terraformの変数ファイル（.tfvars）の修正
コントロールプレーンを作成する際に利用するファイルは「DEMO-JAEA-DEP00-INFRASTRUCTURE.tfvars」「DEMO-JAEA-SAP_LIBRARY.tfvars」になります。

以下URLを確認し必要なパラメータの修正や追加をしていきます。

https://learn.microsoft.com/ja-jp/azure/sap/automation/configure-control-plane

<details><summary>今回DEMO-JAEA-DEP00-INFRASTRUCTURE.tfvarsで修正した項目</summary>

```rb
environment = "DEMO"
Location = "japaneast"
Control_plane = "Japan East"
firewall_deployment = false
use_webapp = false
management_network_address_space = "10.170.20.0/25"
```
</details>

<details><summary>今回DEMO-JAEA-SAP_LIBRARY.tfvarsで修正した項目</summary>

```rb
environment = "DEMO"
Location = "japaneast"
```
</details>

# コントロールプレーンの作成
作成する際に利用するコマンドと引数は以下になりますが、、、
デプロイする際のコマンドがどうも違うように見受けられました。

:::note alert
「deploy_controlplane.sh」ではなく、「prepare_region.sh」を使用します。
:::

CloudShellをBashに切り替えてサンプルコマンドを書き換えて実行します。

<details><summary>サンプルコマンド</summary>

```rb
az logout
az login --service-principal -u "appId" -p "password" --tenant "xxxxxxxxxx"
cd ~/Azure_SAP_Automated_Deployment/WORKSPACES

export subscriptionId="xxxxxxxxxx"
export         spn_id="サービスプリンシパルのappId"
export     spn_secret="サービスプリンシパルのpassword"
export      tenant_id="サービスプリンシパルのテナントid"
export       env_code="DEMO"
export    region_code="JAEA"
export DEPLOYMENT_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"
export CONFIG_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/WORKSPACES"
export SAP_AUTOMATION_REPO_PATH="${HOME}/Azure_SAP_Automated_Deployment/sap-automation"
export ARM_SUBSCRIPTION_ID="${subscriptionId}"
export ARM_TENANT_ID="${tenant_id}"
export ARM_CLIENT_ID="${spn_id}"
export ARM_CLIENT_SECRET="${spn_secret}"

${DEPLOYMENT_REPO_PATH}/deploy/scripts/prepare_region.sh       \
        --deployer_parameter_file DEPLOYER/${env_code}-${region_code}-DEP00-INFRASTRUCTURE/${env_code}-${region_code}-DEP00-INFRASTRUCTURE.tfvars  \
        --library_parameter_file LIBRARY/${env_code}-${region_code}-SAP_LIBRARY/${env_code}-${region_code}-SAP_LIBRARY.tfvars  \
        --subscription "${subscriptionId}"  \
        --spn_id "${spn_id}"  \
        --spn_secret "${spn_secret}"  \
        --tenant_id "${tenant_id}"  \
        --auto-approve
```
</details>

実行に30分くらい時間がかかりますが、正常終了すると以下ログが表示されます。

<details><summary>結果</summary>

```rb
####################################################################################
#                                                                                  #
#                                                                                  #
#  Please save these values:                                                       #
#     - Key Vault: DEMOJAEADEP00user<3桁のID>                                      #  
#     - Deployer IP:                                                               #
#     - Storage Account: demojaeatfstate<3桁のID>                                  #   
#                                                                                  #
####################################################################################
# Control Plane Deployment #

Date : "xxxxxxxxxx"

## Configuration details ##

| Item                    | Name                       |
| ----------------------- | -------------------------- |
| Environment             | DEMO                       |
| Location                | japaneast                  |
| Keyvault Name           | DEMOJAEADEP00user<3桁のID> |
| Deployer IP             |                            |
| Terraform state         | demojaeatfstate<3桁のID>   |
```
</details>

リソースグループが「DEMO-JAEA-DEP00-INFRASTRUCTURE」、「DEMO-JAEA-SAP_LIBRARY」と2つ作成されておりそれに紐づくリソースも作成されていることが確認できます。

以上で、コントロールプレーンの準備が完了しましたのでログイン確認をしてみましょう。
ログイン方法は以下URLを確認しBastion経由でログインをしてみてください。

https://learn.microsoft.com/ja-jp/azure/sap/automation/deploy-control-plane?tabs=linux#manually-configure-the-deployer-using-azure-bastion

ログインまでできましたら以下コマンドを実行して、TerraformとAnsibleをインストールしましょう！

<details><summary>TerraformとAnsibleのインストール</summary>

```rb
cd ~/Azure_SAP_Automated_Deployment/sap-automation/deploy/scripts
./configure_deployer.sh
```
</details>

:::note alert
TerraformとAnsibleは最新バージョンになっていることを確認ください。
最新バージョン出ない場合はアップデートしてください。
:::


# 所感
スクリプトを触り慣れていない私にとってはとても難易度が高かったですが、今回の検証で以下分かりました。

+ 「deploy_controlplane.sh」を利用すると『DEMO-JAEA-SAP_LIBRARY』のリソースが作成されなかったため、「prepare_region.sh」を使用しなければならない。
+ Terraformのバージョンが古かったため、最新バージョンにアップデートしなければならない。
+ Ansibleは最新バージョンでしたがこちらも合わせてアップデートが必要

# 次回予告
作成したコントロールプレーンからSAPシステムのインフラ領域を作成していきます。次回「ワークロードゾーン」の作成の記事を投稿します！