EKSでMattermostを構築した話：5-1. Mattermost Configの設定(helmのチューニング01)

## これまでの復習
- EKSでMattermostを構築ということで少しずつ進めてきました。

1.  [EKSでMattermostを構築した話：0.概要編 - Qiita](https://qiita.com/tnagano1981/items/555301cecd3ed309fa43)
1.  [EKSでMattermostを構築した話：1. VPC作成編 - Qiita](https://qiita.com/tnagano1981/items/75408d509c0660408c97)
1.  [EKSでMattermostを構築した話：2. EKSクラスター作成編 - Qiita](https://qiita.com/tnagano1981/items/fc5d96ddf9a3b5c4fb03)
1.  [EKSでMattermostを構築した話：3-1. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/c91d27fa2e286a96b6ff)
1. [EKSでMattermostを構築した話：3-2. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/b477f3a6a21038b76db2)
1. [EKSでMattermostを構築した話：4-1. Mattermostのインストール(helm理解編) - Qiita](https://qiita.com/tnagano1981/items/9c36cf9f0a6196fcf865)
1. [EKSでMattermostを構築した話：4-2. Mattermostのインストール(helm適用編) - Qiita](https://qiita.com/tnagano1981/items/289d375135f64f5241a2)
1. Mattermost Configの設定 ← `今回はここ`

## MattermostのConfigを変更する
- 前回([EKSでMattermostを構築した話：4-2. Mattermostのインストール(helm適用編) - Qiita](https://qiita.com/tnagano1981/items/289d375135f64f5241a2))で手元にダウンロードしたhelm chartsの`values.yaml`を編集していきます。
- 今回は他のAWSリソースと連携する箇所を編集していきたいです。
- 具体的には以下ですね。
    1. `S3連携` データを消失させないために、S3と連携させる
    1. `RDS連携` データベースを切り出すために、RDSと連携させる
    1. `SES連携`Mattermostユーザーがパスワードを忘れた際に再設定をさせるために、SESと連携させる
    1. `EFS連携`Mattermostのプラグイン機能を実現するために、EFSと連携させる
    1. `ALB連携` アプリケーションロードバランサーを構築するために、ALBと連携させる
    1. `Route53連携` ALBのDNS名を自動的に指定したFQDNと紐付けるために、Route53と連携させる

### 1. `S3連携` データを消失させないために、S3と連携させる
- S3との連携設定はMattermostが機能として提供してくれているので、`values.yaml`の該当箇所を変更するだけです。
- 具体的には190行目辺りの`configJSON`の中の`FileSettings`という部分の★を付けた箇所です。

```
  "FileSettings": {
    "EnableFileAttachments": true,
    "MaxFileSize": 52428800,
    "DriverName": "amazons3",★
    "Directory": "",
    "EnablePublicLink": false,
    "PublicLinkSalt": "",
    "ThumbnailWidth": 120,
    "ThumbnailHeight": 100,
    "PreviewWidth": 1024,
    "PreviewHeight": 0,
    "ProfileWidth": 128,
    "ProfileHeight": 128,
    "InitialFont": "luximbi.ttf",
    "AmazonS3AccessKeyId": "アクセスキーID",★
    "AmazonS3SecretAccessKey": "シークレットアクセスキー",★
    "AmazonS3Bucket": "バケット名",★
    "AmazonS3Region": "ap-northeast-1",
    "AmazonS3Endpoint": "s3.amazonaws.com",
    "AmazonS3SSL": true,
    "AmazonS3SignV2": true
  },
```

- 今回は、S3用のIAMユーザーを作成してクレデンシャルを生成して、このConfigに記載するって対応をしています。が、IAMロールを使うほうがいいだろうなとは感じています、、、

#### 補足：気付いちゃったこと
- で、ここの設定をしていて気付いたのですが、上記の`Values.yaml`の中の`configJSON`の設定ってMattermostのシステムコンソール(管理者画面)でいうと以下の画面になるんですね。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/cf16e656-988c-e697-8465-c83e45fc4fad.png)
- 上記の画面をよくみると`保存する`のボタンがグレーアウトしているんですが、分かりますか？
- これ、Mattermostのシステムコンソール(管理者画面)で変更できるように見えて、実は変更できないんです、、、
- 今の設定だとこの`configJSON`がシークレットとして設定されているようで、シークレット故に変更できない、っていう状況なんですね。この辺りも考慮していく点かとは思っていますが、まだ手を付けられていないです。
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/f426577f-073e-38b7-97af-c7b21cb211d2.png)
    - Rancherから見ると`configJSON`がシークレットとして扱われていることが分かります。

### 2. `RDS連携` データベースを切り出すために、RDSと連携させる
- 次にデータベースです。デフォルトだとMySQLがdeploymentとして作られるのですが、ここをRDSにしたいです。
- 変更するのは、80行目辺りの`externalDB`です。

```
## If use this please disable the mysql chart by setting mysql.enable to false
externalDB:
  #enabled: false
  enabled: true ★

  ## postgres or mysql
  #  externalDriverType: ""
  externalDriverType: "postgres" ★

  ## postgres:  "postgres://<USERNAME>:<PASSWORD>@<HOST>:5432/<DATABASE_NAME>?sslmode=disable&connect_timeout=10"
  postgres:  "postgres://ユーザー名:DBパスワード@DBホスト名.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com:5432/mattermost?sslmode=disable&connect_timeout=10" ★
  ## mysql:     "<USERNAME>:<PASSWORD>@tcp(<HOST>:3306)/<DATABASE_NAME>?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"
  externalConnectionString: ""
```

- さらに118行目の以下の部分も変更しています。

```
## Additional env vars
extraEnvVars: # []★
  - name: POSTGRES_DB_NAME_MATTERMOST★
    value: mattermost★
  - name: MM_SQLSETTINGS_DRIVERNAME★
    value: "postgres"★
  - name: MM_SQLSETTINGS_DATASOURCE★
    value: postgres://ユーザー名:DBパスワード@DBホスト名.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com:5432/mattermost?sslmode=disable&connect_timeout=10★
```

- ここでもRDSの情報を直接configに書き込んでます。シークレット扱いだからパスワード書き込んでもいい？？？
- システムコンソールでいうと以下の画面に該当する部分ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/68e77a73-9581-6e1b-a499-24702f834cb0.png)


### 3. `SES連携`Mattermostユーザーがパスワードを忘れた際に再設定をさせるために、SESと連携させる
- SMTPに関連する部分は314行目あたりの`EmailSettings`です。

```
  "EmailSettings": {
    "EnableSignUpWithEmail": true,
    "EnableSignInWithEmail": true,
    "EnableSignInWithUsername": true,
    "SendEmailNotifications": true, ★
    "RequireEmailVerification": false,
    "FeedbackName": "mm-test-mail", ★
    "FeedbackEmail": "mm-mail@srv.stylez.co.jp", ★
    "FeedbackOrganization": "",
    "SMTPUsername": "アクセスキーID", ★
    "SMTPPassword": "SES設定時のSMTPユーザーのパスワード", ★
    "EnableSMTPAuth": true, ★
    "SMTPServer": "email-smtp.ap-northeast-1.amazonaws.com", ★
    "SMTPPort": "465", ★
    "ConnectionSecurity": "TLS", ★
    "InviteSalt": "",
    "SendPushNotifications": true,
    "PushNotificationServer": "https://push-test.mattermost.com",
    "PushNotificationContents": "generic",
    "EnableEmailBatching": false,
    "EmailBatchingBufferSize": 256,
    "EmailBatchingInterval": 30,
    "SkipServerCertificateVerification": false
  }
```

- ここでもSESの設定をするとできるSMTPユーザー(IAMユーザーとして作成される)のクレデンシャルを直接書き込んでます。
- システムコンソールで確認すると以下の画像の部分です。

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/50fcf57c-63bb-d7c5-b0e1-2faa0f47dded.png)

### 残りの設定は次に
- EFSの設定が`values.yaml`以外にも用意しないといけない部分があるので、以下の残りの3つは次回にします。
    - 4.`EFS連携`Mattermostのプラグイン機能を実現するために、EFSと連携させる
    - 5.`ALB連携` アプリケーションロードバランサーを構築するために、ALBと連携させる
    - 6.`Route53連携` ALBのDNS名を自動的に指定したFQDNと紐付けるために、Route53と連携させる

## まとめ
- `values.yaml`の編集をすることで理想とする構成に近づけていきました。
- 今回説明した箇所はMattermostのシステムコンソール(管理者画面)から設定変更ができる想定のものでしたが、`configJSON`がシークレットとして設定されているため、システムコンソールから変更が加えられないという状況でした。
- シークレット扱いだからこそ、クレデンシャル情報を記載することもできるのですが、もっと良い方法があるような気もします。
- また、Mattermostを運用する人が、これまでシステムコンソールで変更していた設定が、設定ファイルを変更しないといけない、しかも`values.yaml`というのは少し抵抗があるかもしれません。
    - この運用という観点も考慮した構成を今後は検討していきたいです。

## 関連記事
-   [EKSでMattermostを構築した話：0.概要編 - Qiita](https://qiita.com/tnagano1981/items/555301cecd3ed309fa43)
-   [EKSでMattermostを構築した話：1. VPC作成編 - Qiita](https://qiita.com/tnagano1981/items/75408d509c0660408c97)
-   [EKSでMattermostを構築した話：2. EKSクラスター作成編 - Qiita](https://qiita.com/tnagano1981/items/fc5d96ddf9a3b5c4fb03)
-   [EKSでMattermostを構築した話：3-1. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/c91d27fa2e286a96b6ff)
-   [EKSでMattermostを構築した話：3-2. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/b477f3a6a21038b76db2)
-   [EKSでMattermostを構築した話：4-1. Mattermostのインストール(helm理解編) - Qiita](https://qiita.com/tnagano1981/items/9c36cf9f0a6196fcf865)
-   [EKSでMattermostを構築した話：4-2. Mattermostのインストール(helm適用編) - Qiita](https://qiita.com/tnagano1981/items/289d375135f64f5241a2)