ジャギ様のAWSチャレンジ

awsに関したことを書きます。

AWS上にMattermostを構築する(TOPページ)

インフォメーション! youtu.be

概要

AWSMattermostを以下のような構成のクラウド環境で作成します。手動で行う方法と自動で行う方法を記載します。 ゴールはMattermostのログイン画面が表示されることです。作業時間は初心者の方で2~4時間程度かかると思います。画面操作に慣れれば1~2時間程度だと思います。

実施環境

注意事項

  • 本ドキュメントを参考に作業をする場合、jagisam.comは使えません。自身で取得したドメインに読み替えてください。
  • 作業中はEC2を停止しないでください。IPが変わると動かなくなります。
  • 手動編はEC2とRDSはシングル構成で構築します。時間短縮のためです。
  • 各ページの表記方法は意図的に統一感を出してません。これはmarkdownの記事の見え方を試しているからです。
  • 手順はまっさらな状態からテストはできてないので、どこかの手順でつまずく可能性があります。

構築の流れ(手動編)

  1. Mattermost構築の流れ(手動編)Part1 ドメインの取得、ACM、Route 53 - ジャギ様のAWSチャレンジ
  2. Mattermost構築の流れ(手動編)Part2 VPC、サブネット、ルートテーブル、インターネットゲートウェイ - ジャギ様のAWSチャレンジ
  3. Mattermost構築の流れ(手動編)Part3 RDS - ジャギ様のAWSチャレンジ
  4. Mattermost構築の流れ(手動編)Part4 Lambda、Cloud9 - ジャギ様のAWSチャレンジ
  5. Mattermost構築の流れ(手動編)Part5 EC2 - ジャギ様のAWSチャレンジ
  6. Mattermost構築の流れ(手動編)Part6 ALB - ジャギ様のAWSチャレンジ
  7. Mattermost構築の流れ(手動編)Part7 SNS、CloudWatch - ジャギ様のAWSチャレンジ
  8. Mattermost構築の流れ(手動編)Part8 S3、ASM、CodeBulid - ジャギ様のAWSチャレンジ
  9. Mattermost構築の流れ(手動編)Part9 SES - ジャギ様のAWSチャレンジ
  10. Mattermost構築の流れ(手動編)Part10 Mattermost起動後の設定 - ジャギ様のAWSチャレンジ

構築の流れ(自動編)

本記事は以上です。 クラウド環境の作成の手助けになれば嬉しいです。

参考文献

本記事の作成に当たり、以下の情報も参考にさせて頂きました。ありがとうございました。

その他にたくさんのページを参考にしました、急いで作ったら掲載元がわからなくなりました。

あとがき

  • 筆者はいつも自動構築を実施しているので、逆に手動構築の手順が難しかったです。しんどいです。
  • 実際に構築の経験させてくれる方のオファー待ってます。経験積んで週末副業に繋げるのが今の目標です。
  • コストカットを取り入れてます。その方法はIPを固定しないこと。ドメインを無料で利用していること。cloudformationを利用して、リソースの作成、削除を簡単にしていること。なお、IPは固定するとかなり楽になります。
  • 当ブログはこれまでの構築時のメモを元に一週間で執筆しました。構築は別途2週間程度かけて少しずつ進めました。
  • どういう表現をすると見やすくなるかという点を考えながら執筆しました。いろいろ試した結果、基本は表で示し、分かりづらい場面に画面の画像で補足する形が良いと感じました。また画像はgifアニメーションにした方が分かりやすいです。
  • 当ブログを執筆中に、markdown(文書)では表現しずらい箇所が多々あるのと、文書だけだとつまらないので、久々にゆっくりムービーメーカーで動画にしようかなと思いましたが、今回は一旦ここで区切りとします。

Mattermost構築の流れ(手動編)Part10 Mattermost起動後の設定

  • ドキュメント書いた後に動作確認はしてません。

Mattermost起動後の設定

初期ユーザの作成(管理者ユーザの作成)

Mattermostが初めて立ち上がった画面で以下設定を行う。

設定項目 設定値
What's your email address? 自分のメールアドレス
Choose your username admin (任意です。)
Choose your password 難しめのパスワードを設定(大文字小文字記号あり)
  • この設定だけでMattermostは動かせる状態になります。他のユーザと会話がしたければこの後の設定が必要である。
  • 次に進むには、Go to System Consoleをクリック

SITE CONFIGURATION

  • 以降の設定は他ユーザへのinviteメールを送信するための設定です。

前提条件

  • SESが設定済であること

Notifications

  • 左メニューのSITE CONFIGURATIONNotificationsをクリック
  • 以下の項目だけ変更する。他はデフォルトでOK。
  • 以下を設定後、Saveボタンクリック。
設定項目
Enable Email Notifications true
Notification Display Name No-Reply
Notification From Address mattermost@jagisama.com
Support Email Address mattermost@jagisama.com

AUTHENTICATION

Email Authentication

  • 左メニューのAUTHENTICATIONEmailをクリック
  • すべてTrueにする。設定後、Saveボタンクリック。

Signup

  • 左メニューのAUTHENTICATION -> Signup をクリック。
  • 以下を設定後、‘Save`ボタンクリック。
設定項目
Enable Account Creation: true
Restrict new system and team members to specified email domains: 未設定でOK
Enable Open Server: false
Enable Email Invitations: true

ENVIRONMENT

WebServer

  • 左メニューのENVIRONMENTWebServerをクリック
  • 以下を設定後、Saveボタンクリック。その後Test Live URLをクリックする。成功するとTest successful. This is a valid URL.が表示されます。
設定項目 備考
Site URL: http://ec2-13-112-58-150.ap-northeast-1.compute.amazonaws.com:8065 作成したインスタンスのpublic DNSに読み替えること
Listen Address 8065
  • portを80に変えたかったが、単純に変えるだけではエラーになって変えられなかった。

SMTP

  • 左メニューのENVIRONMENTSMTPをクリック
設定項目
SMTP Server: Simple Mail Transfer Protocol (SMTP) settings画面のSMTP endpointの値を使う。例: email-smtp.ap-northeast-1.amazonaws.com
SMTP Server Port: 465
Enable SMTP Authentication: true
SMTP Server Username: (SMTP ユーザー名の値を使う。SESのSMTP作成時画面に表示されたものです。ファイルでダウンロードもしています。)
SMTP Server Password: (SMTP パスワードの値を使う。SESのSMTP作成時画面に表示されたものです。ファイルでダウンロードもしています。)
Connection Security: TLS
Skip Server Certificate Verification: false
Enable Security Alerts: true
  • 上記を設定後、Saveボタンクリック。次にtest connectionボタン押下し、メールが受信できることを確認する。送信に失敗したら、エラーやServer Logsの画面ををみる。 Saveボタンクリック前に実行すると動かないので注意。No errors were reported while sending an email. Please check your inbox to make sure.と表示されるとメール送信成功です。メールを確認しましょう。

これで設定は全て完了です。

Mattermostを使ってみましょう。お疲れ様でした。

inviteの操作方法メモ

左にあるメニューのInvite membersでinviteしたい人のメアドを入力する。すると相手にメールが通知され、そのメールを開くとアカウント作成画面になる。そのユーザのメアドはSESに登録しておく必要がある。

Mattermost構築の流れ(手動編)Part9 SES

  • ドキュメント書いた後に動作確認はしてません。

SES

用途

  • Mattermostでメール送信するために利用します。一人でMattermostを試験的に使う場合は必要ありません。
  • よくわからないですが、SMTP設定とidentityというものを作り、そこにメールアドレスを登録すると利用可能になります。
  • SESのデフォルト設定でメールを送信するには、事前に送信先メールアドレスの登録が必要である。Mattermostで他のユーザにinviteメール等を送るときはその人のメアド登録が必要である。当然自分のメアド登録も必要である。

画面起動

  • AWSコンソール画面の検索窓に「Amazon Simple Email Service」と入力し、Amazon Simple Email Serviceをクリックする。

SMTP settings

  • 左のメニューからSMTP settings(SMTP設定)をクリックし、Create SMTP credentials(SMTP認証情報の作成)ボタンをクリック。(最近名前が変わった)
  • 作成ボタンクリック
  • 画面に掲載された情報をテキスト等に控えておいてください。また認証情報のダウンロードボタンをクリックし、保存しておく。
  • 閉じるボタンをクリックすると設定完了
  • 最近ボタン名などが日本語化されたようですが、画像は英語となっています。

この画面の以下の項目がMattermostで必要となるので軽く目を通しておく。

  • SMTP endpoint
  • STARTTLS Port
  • TLS Wrapper Port

Create Identity(送信先のメールアドレスの登録)

設定

  • 左メニューのVerified identities(検証済み ID)をクリックし、create identity(IDの作成)ボタンをクリック

  • identity typeemail addressを選択
  • 送信したいメールアドレスを登録する。1個だけです。
  • create identityボタンをクリック
  • このあと設定したメアドにメールが送られてくるので認証ボタンを押す。検証に成功しました画面が表示されて設定完了。statusVerifiedとなる

テスト

  • 画面右上のsend test emailボタンをクリックし、メール受信できることを確認する
  • Message details の設定項目
画面名 設定項目 設定値
Message details Email format Formatted
From-address 自分メールアドレス
Scenario Custom
Custom recipient 自分メールアドレス
Subject テスト件名
Body - optional テスト本文
Configuration set - optional デフォルトのままでOK
Additional configurations
- optional
デフォルトのままでOK

他のメールアドレスの登録

Mattermostでinviteメールを送りたい場合はもう1つ自分のメールアドレスを登録してください。inviteしない場合は必要ありません。

Create Identity(送信元のメールアドレスの登録)

Mattermostのinviteのメールを自分のメールアドレスを送信元として送るのであれば必要はない。がそれだとおもしろくない。 mattermost@jagisama.comから送れるようにしたい。そういうときの設定

設定

  • 左メニューのVerified identitiesをクリックし、create identityボタンをクリック

  • identity typeDomainを選択
  • Domainjagisama.comを設定。(toki.jagisama.comでもいいのかもしれないが試してない)
  • 他はデフォルトでよい
  • create identityボタンをクリック
  • この後、CNAMEレコード3つが自動でroute 53jagisama.comに設定されstatusVerifiedになり設定完了となる。

テスト

  • 画面右上のsend test emailボタンをクリックし、メール受信できることを確認する

画面名 設定項目 設定値
Message details Email format Formatted
From-address mattermost@jagisama.com
Scenario Custom
Custom recipient 自分メールアドレス
Subject テスト件名
Body - optional テスト本文
Configuration set - optional デフォルトのままでOK
Additional configurations
- optional
デフォルトのままでOK

こうなっていればOK

Mattermost構築の流れ(手動編)Part8 S3、ASM、CodeBulid

S3

用途

  • ビルドのログを保存するためにS3をバケットを作成します。

バケット作成

  • AWSコンソール画面の検索窓に「S3」と入力→S3をクリック→バケットを作成ボタンをクリック
  • 設定は以下の項目だけでOKです。その他の項目はデフォルトのままでOK。バケット名はlambdのときと同じで一意である必要があります。
画面 設定項目 設定値
一般的な設定 バケット mattermost-codebuild
タグ(0) - オプション キー Name
値 - オプション mattermost-codebuild
  • 追記 作りはしますが手動版では使ってません。書き込み権限がなくエラーになります。自動版の手順では使ってます。

AWS Systems Manager

用途

サーバの構築にはAnsibleを利用します。AWS Systems ManagerはAnsibleがEC2にSSHログインするために使う秘密鍵を保存するために利用します。AWS Systems Managerはパスワードとか機密性の高いデータを保存する場所です。

パラメータを作成

  • AWSコンソール画面の検索窓に「AWS Systems Manager」と入力し、Systems Managerをクリックする。
  • 左メニューのパラメータストアをクリックする
画面 設定項目 設定値
パラメータの詳細 名前 ssh_private_key
説明 — Optional Save private key to ssh to EC2.
利用枠 標準
タイプ 安全な文字列
KMS キーソース 現在のアカウント
KMS キー ID alias/aws/ssm
自分がEC2にsshするときの秘密鍵の中身を張り付ける
タグ — Optional キー Name
mattermost-asm

CodeBulid

用途

  • git pushしたあとに自動で何かしてくれるものです。
  • 何かでよくあるのが、コードチェック、デプロイで、今回はこの2つを行います。

buildspec.ymlの作成

ロール作成

  • CodeBuildからAWS Systems Managerにアクセスを許可するロールを作成します。
  • AWSコンソール画面の検索窓に「IAM」と入力し、IAMをクリックする。
  • 左メニューのロールをクリック→ロールを作成ボタンをクリック
  • 設定項目は以下。短時間でロールを削除してやり直す場合はエラーになることがあるので別ロール名とするか、いくらか時間を空けた方がよい。
画面 設定項目 設定値
信頼されたエンティティを選択 信頼されたエンティティタイプ AWS のサービス
ユースケース CodeBuild
許可を追加 許可ポリシー AmazonSSMReadOnlyAccess
名前、確認、および作成 ロール名 codebuild-mattermost-role
説明 This is the role that holds access to ASM and applies to CodeBuild.
タグを追加 キー Name
値 - オプション mattermost-codebuild-role

CodeBuildのプロジェクト作成

  • AWSコンソール画面の検索窓に「CodeBuild」と入力し、CodeBuildをクリックする。
  • ビルドプロジェクトを作成するボタンをクリックする。
画面 設定項目 設定値
プロジェクトの設定 プロジェクト名 mattermost-codebuild
プロジェクト作成ボタンクリック後にThe policy is attached to 0 entities but it must be attached to a single role が表示される場合は名前を変えてください
説明 - オプショナル Code check and deploy for mattermost.
ビルドバッジを有効にする チェックを入れない
このプロジェクトが開始できる同時ビルドの数を制限する チェックを入れない
キー Name
mattermost-codebuild
ソース ソースプロバイダ GitHub
リポジトリ GitHub アカウントのリポジトリ
※OAuth を使用して接続するを選択した後、GitHubに接続ボタンをクリックします。すると表示が変わり「GitHub アカウントのリポジトリ」を選択可能です。Githubと接続済みだと最初から「GitHub アカウントのリポジトリ」が選択可能です。
forkしたGitHub アカウントのリポジトリ
ソースバージョン - オプショナル main
追加設定 (デフォルトのままでOK)
環境 環境イメージ マネージド型イメージ
オペレーティングシステム Ubuntu
ランタイム Standard
イメージ aws/codebuild/standard:6.X
※最新を選択すること
イメージのバージョン aws/codebuild/standard:6.X-XX.XX.XX
※最新を選択すること
環境タイプ Linux
(特権付与)Docker イメージを構築するか、ビルドで昇格されたアクセス権限を取得するには、このフラグを有効にします チェックを入れない
サービスロール 既存のサービスロール
ロールの ARN codebuild-mattermost-role
AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする チェックする
(追加設定) 環境変数(名前) ssh_private_key
環境変数(値) ssh_private_key
環境変数(タイプ) パラメータ
上記以外はデフォルトでOKです -
Buildspec ビルド仕様 buildspec ファイルを使用する
Buildspec 名 - オプショナル (デフォルトのままでOK)
バッチ設定 バッチ設定を定義 - オプショナル チェックを入れない
アーティファクト タイプ Amazon S3
バケット mattermost-codebuild 
※自分で作ったバケット名を入力してください。バケット名は一意です。
上記以外はデフォルトでOKです -
ログ CloudWatch Logs - オプショナル チェックを入れる
上記以外はデフォルトでOKです -

Ansible設定ファイルの修正

  • 設定ファイルでEC2とRDSエンドポイントを修正する必要があります。EC2、RDSの画面からコピペします。画像にはないですが、任意作業でalb_dnsも修正しても良いです。
  • forkしたリポジトリをcloneします。URLは読み替えてください
  • コマンドでviを書いてますが、普通にテキストエディタ使っても構いません。git cloneの方法も任意です。
# git clone
git clone https://github.com/tmoritoki0227/mattermost-cf-playbook.git

# EC2とRDSエンドポイントの修正
$ vi inventories/prod

  • この後、forkしたリポジトリcommitpushをしてください。

codebuild実行

ビルドプロジェクトを開く

  • ビルドプロジェクトの一覧から作成したプロジェクト名をクリックします。画像は例です

ビルドを開始する

  • ビルドを開始ボタンをクリック
  • ビルドが始まりますので成功(ステータスが「CREATE_COMPLETE」となる)することを祈りましょう。下の方にログが出力されます。リアルタイムには出力されません。一定期間毎にログが出ます。エラーになったら対処を行って再ビルドです。
  • 成功したら、少し間をおいてから https://toki.jagisama.com にブラウザからアクセスします。(URLは自分のドメインに読み替えてください。)Mattermostの初期画面が表示されれば構築完了です。次の手順書は任意作業となります。


動かないときの調査コマンド

  • 大抵はALBの設定だと思います。

http://ec2-52-194-187-249.ap-northeast-1.compute.amazonaws.com:8065/ をブラウザで開く。このDNSインスタンスDNS

ALBのアドレス

http://mattermost-alb-1010200182.ap-northeast-1.elb.amazonaws.com:8065/

https://mattermost-alb-1010200182.ap-northeast-1.elb.amazonaws.com:8065/

curl http://mattermost-alb-1010200182.ap-northeast-1.elb.amazonaws.com:8065

ログを見よう

 sudo tail -f /opt/mattermost/logs/mattermost.log

インスタンス上で疎通確認するとき。

curl http://ec2-3-112-205-4.ap-northeast-1.compute.amazonaws.com:8065/https://toki.jagisama.com/
curl http://ec2-52-194-187-249.ap-northeast-1.compute.amazonaws.com:8065/

メモ

以下は検証中の手順です。

webhook

画面 設定項目 設定値
プライマリソースのウェブフックイベント コードの変更がこのレポジトリにプッシュされるたびに再構築する チェックを入れる
ビルドタイプ 単一ビルド
ウェブフックシークレットキーの更新 チェックを入れない
イベントタイプ プッシュ
※プルリクエストの対応は今度
これらの条件でビルドを開始する (デフォルトのままでOK)
これらの条件でビルドを開始しない (デフォルトのままでOK)

GitHubのwebhookを設定

手動版ではS3にファイルがアップロードできていない。

権限設定が不足している。 AWS CodeBuild で AWS S3 にアップロードする方法 | 東京都渋谷区のシステム開発・アプリ開発とサーバー構築保守運用会社

Mattermost構築の流れ(手動編)Part7 SNS、CloudWatch

SNS

用途

  • これはSimple Notification Serviceといって、通知の機能です。いろんな通知機能があるのですが、本作業ではCloudWatch(監視サービス)からメール送るのために利用します。利用するにはトピックをというものを作成する必要があります。

トピックの作成

  • AWSコンソール画面の検索窓に「Simple Notification Service」と入力し、Simple Notification Serviceをクリックする。
  • 左メニューのトピックをクリックし、トピックの作成ボタンを押下する。詳細画面が起動するので次項の内容を設定し、ページ下部のトピック作成ボタンを押下することで作成できます。

詳細

設定項目 設定値
タイプ スタンダード
名前 mattermost-sns
表示名 - オプション mattermost-test

暗号化 - オプション

デフォルト設定でOK

アクセスポリシー - オプション

デフォルト設定でOK

データ保護ポリシー - オプション

デフォルト設定でOK

配信再試行ポリシー (HTTP/S) - オプション

デフォルト設定でOK

配信ステータスのログ記録 - オプション

デフォルト設定でOK

タグ - オプション

設定項目 設定値
キー Name
値 - オプション mattermost-sns

作成したトピックの確認

作成されたトピックを確認します。ARNが後ほど必要になります。

サブスクリプションの作成

  • トピックにメールアドレスを登録します。これでこのトピックを利用したときに登録したメールアドレスに通知を行うことが可能になります。
  • 作成したトピックの名前をクリック → サブスクリプションの作成ボタンをクリックします

画面 設定項目 設定値
詳細 トピック ARN mattermos-snsのARNを選択する
プロトコル Eメール
エンドポイント 自分のメールアドレス
サブスクリプションフィルターポリシー - オプション (デフォルトのままでOK) (デフォルトのままでOK)
Redrive ポリシー (デッドレターキュー) - オプション (デフォルトのままでOK) (デフォルトのままでOK)

認証メール受信確認

サブスクリプションの作成ボタンをクリックした後に、AWS Notification - Subscription Confirmationというメールを受信します。メールを開いてConfirm subscriptionをクリックします。受信できない場合は、迷惑メールになっている可能性があります。

CloudWatch

CloudWatchとは何か?

監視機能です。ここではEC2のリソースを監視することに利用します。

アラームの作成

  • AWSコンソール画面の検索窓に「CloudWatch」と入力し、CloudWatchをクリックする。
  • 左メニューのすべてのアラームをクリックし、アラームの作成ボタンを押下する。メトリクスと条件の指定画面が起動するので次の設定をgif動画見ながら行ってください。設定内容はCPU使用率が60%を超えたらメール通知する内容となっています。

  • 設定内容(項目が多かったので大事そうなものを書いてます。書いてないものはデフォルトのままでOK)

    • InstanceId: EC2の画面からコピーします
    • メトリクス名: CPUUtilization
    • 閾値: 60
    • アラーム状態トリガー: アラーム状態
    • 次の SNS トピックに通知を送信: 既存の SNS トピックを選択
    • 通知の送信先: mattermost-sns
    • アラーム名: mattermost-cpu-alerm
  • 設定画面gif版

(任意作業)CPU使用率を上げてアラートを出す方法

ssh EC2

# 負荷をかけるコマンド
yes > /dev/null &
# 確認
top

# 負荷を止めるコマンド
kill %1
# 確認
top

yes > /dev/null は1回でCPU使用率が60%を超えると思います。

  • 負荷が足りない場合はCloudWatchの画面を見ながら調整してください。

  • メール到着まで10分ぐらいかかると思います。

    • メールタイトル:ALARM: "mattermost-cpu-alerm" in Asia Pacific (Tokyo)

カスタムCSS設定

/* <system section="theme" selected="retropop"> */
@import "/css/theme/retropop/retropop.css";
/* </system> */

/* 画像の外枠黒線つける */
.entry-content img {
  border: 1px solid black;
}

/* 記事内の目次への連番付与 */
.entry-content ul.table-of-contents,
.entry-content ul.table-of-contents ul {
  counter-reset: cnt;
  list-style: none;
}
.entry-content ul.table-of-contents li:before {
  content: counters(cnt, '-');
  counter-increment: cnt;
  font-size: 0.9em;
  margin-right: 5px;
}

/* 記事内の見出しへの連番付与 */
.entry-content {
  counter-reset: cnt-h2;
}
.entry-content h2 {
  counter-reset: cnt-h3;
}
.entry-content h2::before {
  counter-increment: cnt-h2;
  content: counter(cnt-h2);
}
.entry-content h3 {
  counter-reset: cnt-h4;
}
.entry-content h3::before {
  counter-increment: cnt-h3;
  content: counter(cnt-h2) '-' counter(cnt-h3);
}
.entry-content h4 {
  counter-reset: cnt-h5;
}
.entry-content h4::before {
  counter-increment: cnt-h4;
  content: counter(cnt-h2) '-' counter(cnt-h3) '-' counter(cnt-h4);
}
.entry-content h5 {
  counter-reset: cnt-h6;
}
.entry-content h5::before {
  counter-increment: cnt-h5;
  content: counter(cnt-h2) '-' counter(cnt-h3) '-' counter(cnt-h4) '-'
    counter(cnt-h5);
}
.entry-content h6::before {
  counter-increment: cnt-h6;
  content: counter(cnt-h2) '-' counter(cnt-h3) '-' counter(cnt-h4) '-'
    counter(cnt-h5) '-' counter(cnt-h6);
}
.entry-content h2::before,
.entry-content h3::before,
.entry-content h4::before,
.entry-content h5::before,
.entry-content h6::before {
  margin: 0 0.3em;
}
#container {
width: 980px;
}
#main
{
width: 800px;
}
#box2 {
width: 130px;
}

はてなブログのブログ横幅を変更する方法 - じょうまさふみのブログ

はてなブログでコードハイライト表示する方法 - JavaScript勉強会

cd aaa
#container {
width: 980px;
}
#main
{
width: 800px;
}
#box2 {
width: 130px;
}
class Foo
  def bar'baz' # return baz
  end
end

Mattermost構築の流れ(手動編)Part6 ALB

ALB

用途

ALBはユーザからのリクエストを受けて、そのリクエストはEC2に分散するものです。 ALBにEC2に直接紐づけることはできなくて、EC2が所属するグループを作ってそのグループを紐づけるやり方になってます。そのグループはターゲットグループと呼びます。 PC等からのリクエスト→ALB→TAGETGROUP→EC2といった感じです。サイトをHTTPS化するのにもALBは必要だった気がします。

ターゲットグループの作成

  • ここではALBに登録するEC2のグループを作成します。
  • EC2の左メニューのターゲットグループをクリック

  • Create target groupボタンをクリック

  • Specify group details画面が起動するので以下の設定をしてnextボタンをクリック

    • Basic configuration
      • Choose a target type: Instances
      • Target group name: mattermost-ec2-targetgroup
      • Protocol - Port: HTTP 8065
      • VPC: mattermost-vpc
      • Protocol version: HTTP1
    • Health checks
      • Health check protocol: HTTP
      • Health check path: /
      • Advanced health check settings: (デフォルト設定でOK)
    • Attributes
      • (デフォルト設定でOK)
    • Tags - optional
      • Key: Name
      • Value: mattermost-ec2-targetgroup
  • Register targets画面が起動するので以下の設定をしてcreate target groupボタンをクリック

    • グループに追加するEC2(mattermost-server01)にチェックを入れ、 include as pending belowボタンをクリック
    • Review targetsにチェックを入れたインスタンスが表示されるので、さらっと確認します。

ALBのセキュリティグループの作成

  • これはユーザからのリクエストをALBに受けるためのセキュリティグループです。
  • AWSコンソール画面の検索窓に「セキュリティグループ」と入力→セキュリティグループをクリック→セキュリティグループを作成ボタンをクリック
画面 設定項目 設定値
基本的な詳細 セキュリティグループ名 mattermost-alb-sg
説明 Security group applied to Mattermost ALB
VPC mattermost-vpc
インバウンドルール1 タイプ HTTPS
プロトコル TCP
ポート範囲 443
ソース AnywhereIPv4
説明 - オプション Allow inbound communication on port443 from source
インバウンドルール2 タイプ HTTP
プロトコル TCP
ポート範囲 80
ソース AnywhereIPv4
説明 - オプション Allow inbound communication on port80 from source
アウトバウンドルール - -
タグ - オプション キー Name
値 - オプション mattermost-alb-sg

ALBの作成

  • EC2の左メニューのロードバランサーをクリックします。

  • ロードバランサーの作成ボタンをクリック(Create load balancerボタンをクリック)
  • Application Load BalancerCreateボタンをクリック
  • Create Application Load Balance画面が起動するので以下の設定をしてCreate load balancerボタンをクリック

How Application Load Balancers work

デフォルト設定でOK

Basic configuration

設定項目 設定値
Load balancer name mattermost-alb
Scheme Internet-facing
IP address type IPv4

Network mapping

設定項目 設定値
VPC mattermost-vpc
Mappings ap-northeast-1にチェックをいれてSubnetはpublicのものを選択
ap-northeast-1cにチェックをいれてSubnetはpublicのものを選択

Security groups

設定項目 設定値
Security groups mattermost-alb-sg
※defaultで表示されているVPCは×で削除してください

Listeners and routing

Listeners
リスナー 設定項目 設定値
Listener HTTP:80 Protocol HTTP
Port 80
Default action mattermost-ec2-group
Key Name
Value alb-listerner-port80
Listener HTTPS:443 Protocol HTTPS
Port 443
Default action mattermost-ec2-group
Key Name
Value alb-listerner-port443
Secure listener settings
設定項目 設定値
Security policy (デフォルト設定でOK)
Default SSL/TLS certificate From ACM
*.jagisama.com

Add-on services

デフォルト設定でOK

Tags - optional

設定項目 設定値
Key Name
Value - optional mattermost-alb

Summary

デフォルト設定でOK

Route 53にサブドメイン追加

  • ここはRoute53の画面の作業で、サブドメインの運用をする設定です。ALBがないと設定ができません。
  • Route53の画面を開く→ 作成したホストゾーンをクリック → レコード作成をクリックします。
画面 設定項目 設定値
レコードのクイック作成 レコード名 toki
※自分の名前でいいと思います。ブラウザからここで設定する名前+ドメインでMattermostにアクセスすることになります。例:https://toki.jagisama.com)重要なので覚えておきましょう。
レコードタイプ A-IPv4 アドレスと一部のAWSリソースにトラフィックをルーティングします。
エイリアス 〇を右側に寄せる
トラフィックのルーティング先 Application Load Balancer と Classic Load Balancer へのエイリアス
アジアパシフィック(東京)[ap-northease-1]
XXXX.masttermost-alb-XXXXX.ap-northease-1.elb.amazonaws.com
※選択できるALBは1つしかないと思います。
ルーティングポリシー (デフォルトのままでOK)
ターゲットのヘルスを評価 はい

この後、Route 53にサブドメインのAレコードが追加されます

(今回は実施しません)ALBでHTTPリクエストをHTTPSにリダイレクト

  • なくてもいいのですが、あると少し便利なので設定します。
  • 最近画面が英語表記になったようだ。画像は日本語のときのものです。
  • ロードバランサーの画面で、作成したロードバランサーをクリック → ListnersのHTTP:80をクリック → Rulesタブをクリック → Manages rulesをクリックするとルールの編集画面が表示sれます。以降は画像に沿って設定します。

↓ 
アクションの追加→リダイレクト先
こうなればOK。設定がうまくいかなくてもhttpでアクセスできないだけなので大丈夫です。

Mattermost構築の流れ(手動編)Part5 EC2

EC2

用途

Masttermostを動かすサーバとして利用します。

EC2のセキュリティグループの作成

  • これはEC2がALBと作業者のsshのアクセスを受けるためのセキュリティグループです。
  • AWSコンソール画面の検索窓に「セキュリティグループ」と入力→セキュリティグループをクリック→セキュリティグループを作成ボタンをクリック
画面 設定項目 設定値
基本的な詳細 セキュリティグループ名 mattermost-server-sg
説明 Security group applied to Mattermost EC2
VPC mattermost-vpc
インバウンドルール1 タイプ SSH
プロトコル TCP
ポート範囲 22
ソース AnywhereIPv4
説明 - オプション Allow inbound communication on port22 from source
インバウンドルール2 タイプ カスタムTCP
プロトコル TCP
ポート範囲 8065
ソース AnywhereIPv4
説明 - オプション Allow inbound communication on port8065 from source
インバウンドルール3 タイプ HTTP
プロトコル TCP
ポート範囲 80
ソース AnywhereIPv4
説明 - オプション Allow inbound communication on port80 from source
アウトバウンドルール - -
タグ - オプション キー Name
値 - オプション mattermost-server-sg

  • port22はsshを繋ぐためです。
  • port8065はALBからmattermostに繋ぐためです。
  • port80は不要かもしれません。ALBからのヘルスチェックで必要かもしれません。とりあえず入れておきましょう。

EC2の作成

  • AWSコンソール画面の検索窓に「EC2」と入力→EC2をクリック→インスタンスを起動ボタンをクリック
  • EC2は1台作成します。

名前とタグ

設定項目 設定値
名前 mattermost-server01

アプリケーションおよび OS イメージ (Amazon マシンイメージ)

設定項目 設定値
アプリケーションおよび OS イメージ
(Amazon マシンイメージ)
Amazon Linux
Amazon マシンイメージ (AMI) デフォルト(Amazon Linux 2 AMI(HVM) Kernel 5.10, SSD Volume Type)
アーキテクチャ 64ビット(x86)

インスタンスタイプ

設定項目 設定値
インスタンスタイプ t2.micro

キーペア (ログイン)

設定項目 設定値
キーペア名 (自分で使っているものを選択)

ネットワーク設定

  • 編集ボタンをクリックしてください
設定項目 設定値
VPC - 必須 mattermost-vpc
サブネット mattemost-subnet-public1-ap-northeast-1a
パブリック IP の自動割り当て 有効化
ファイアウォール (セキュリティグループ) 既存のセキュリティグループを選択する
共通のセキュリティグループ mattermost-server-sg
高度なネットワーク設定 (デフォルトのままでOK)

ストレージを設定

デフォルトのままでOK

高度な詳細

  • EC2作成時にコマンドも実行できる、ということを示すために実行してます。
設定項目 設定値
ユーザーデータ #!/bin/bash -xe
amazon-linux-extras install nginx1 -y
systemctl start nginx
上記以外はデフォルトでOKです -

EC2からデータベースのデータを作成・確認する方法

  • 前の手順でLambdaでデータを作成している場合は作業不要です。
  • ここまでにデータベースの作成が完了している必要があります。

作成したインスタンスへのSSHログイン

SSHクライアントを使ってインスタンスにログインします。

mysqlクライアントのインストール

sudo yum install mysql -y

データベース接続

mysql -h <replase me> -P 3306 -u admin -p

上記の<replase me>はRDSのエンドポイントです。RDSの画面を見て確認してください。ライターインスタンスのエンドポイントです。パスワードはadminadminです

データ作成

  • 作成済の場合はskipしてください。
# ユーザ名がmmuser。パスワードがadminadminでユーザ作成を行う。
create user 'mmuser'@'%' identified by 'adminadmin';

# mattermostというデータベースを作成
# 作業不要です。これはRDS作成時に作成済のためです。
# create database mattermost;

# mmuserというユーザにmattermostというデータベースの全権限を付与する
grant all privileges on mattermost.* to 'mmuser'@'%';

# 続いて確認作業をする場合はskipしましょう。
exit;

確認

select user, host from mysql.user;
show grants for 'mmuser'@'%';
show databases;
exit;

データベースを消したい場合

  • 削除する必要がある場合に実施します。通常は実施しません
drop user 'mmuser'@'%';
drop database mattermost;
exit;