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


これまでの復習

  • EKSでMattermostを構築ということで少しずつ進めてきました。
  1. EKSでMattermostを構築した話:0.概要編 - Qiita
  2. EKSでMattermostを構築した話:1. VPC作成編 - Qiita
  3. EKSでMattermostを構築した話:2. EKSクラスター作成編 - Qiita
  4. EKSでMattermostを構築した話:3-1. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita
  5. EKSでMattermostを構築した話:3-2. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita
  6. EKSでMattermostを構築した話:4-1. Mattermostのインストール(helm理解編) - Qiita
  7. EKSでMattermostを構築した話:4-2. Mattermostのインストール(helm適用編) - Qiita
  8. Mattermost Configの設定 ← 今回はここ

MattermostのConfigを変更する

  • 前回(EKSでMattermostを構築した話:4-2. Mattermostのインストール(helm適用編) - Qiita)で手元にダウンロードしたhelm chartsのvalues.yamlを編集していきます。
  • 今回は他のAWSリソースと連携する箇所を編集していきたいです。
  • 具体的には以下ですね。
    1. S3連携 データを消失させないために、S3と連携させる
    2. RDS連携 データベースを切り出すために、RDSと連携させる
    3. SES連携Mattermostユーザーがパスワードを忘れた際に再設定をさせるために、SESと連携させる
    4. EFS連携Mattermostのプラグイン機能を実現するために、EFSと連携させる
    5. ALB連携 アプリケーションロードバランサーを構築するために、ALBと連携させる
    6. 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のシステムコンソール(管理者画面)でいうと以下の画面になるんですね。
  • 上記の画面をよくみると保存するのボタンがグレーアウトしているんですが、分かりますか?
  • これ、Mattermostのシステムコンソール(管理者画面)で変更できるように見えて、実は変更できないんです、、、
  • 今の設定だとこのconfigJSONがシークレットとして設定されているようで、シークレット故に変更できない、っていう状況なんですね。この辺りも考慮していく点かとは思っていますが、まだ手を付けられていないです。
    • 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に書き込んでます。シークレット扱いだからパスワード書き込んでもいい???
  • システムコンソールでいうと以下の画面に該当する部分ですね。

3. SES連携Mattermostユーザーがパスワードを忘れた際に再設定をさせるために、SESと連携させる

  • SMTPに関連する部分は314行目あたりのEmailSettingsです。
  "EmailSettings": {
    "EnableSignUpWithEmail": true,
    "EnableSignInWithEmail": true,
    "EnableSignInWithUsername": true,
    "SendEmailNotifications": true, ★
    "RequireEmailVerification": false,
    "FeedbackName": "mm-test-mail", ★
    "FeedbackEmail": "[email protected]", ★
    "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ユーザーとして作成される)のクレデンシャルを直接書き込んでます。
  • システムコンソールで確認すると以下の画像の部分です。

残りの設定は次に

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

まとめ

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

関連記事