見出し画像

社内コミュニケーションサブツール導入!構築~導入までをエグゼ社員が行いました

こんにちは!広報チーム木内です。
今回の記事はエンジニア必読!👀

先日エグゼクションに新たな社内コミュニケーションツールが導入されました。そこで今回は、AWSで社内コミュニケーションサブツールを構築した、若手エンジニアのS.Yさん(入社1年目)にブログを書いてもらいました!👏

最後までぜひ読んでみてください!🤩




AWS ECS Fargateを使用してMattermostを構築してみた


今回ブログを書いてくれた、エンジニアのS.Yさんです💻

なぜMattermostを構築したのか? 
社内では、元々メインで使用しているチャットツールと、不具合の際に使用するサブチャットツールが用意されていました。
が、そのサブチャットツールが使いづらい・・・という意見が出たため、”この際、AWSでMattermostを構築してみようか!”ということで、この社内プロジェクトが走り始めました。

初めてのコンテナ技術だったので、紆余曲折しましたが、なんとか動作したので、そのノウハウ共有にこの記事を書きました。
一からの構築方法というよりポイントとなる点を書いていきます。
間違っている!なんだそれ!など、ツッコミどころもあるかと思いますが、大目に見ていただけると嬉しいです。

①構成

 こんな感じの構成で構築しました。ところどころ端折ってます。

構成図

 画像やテキストファイルなどの保存場所としてEFSを使用し、その他データはAuroraを使用しています。 
Secrets Managerで管理用のEC2に接続し、そこからECS Execでコンテナ内部に入ったり、5432ポートでDBを触りに行ったりします。(ECS ExecはMattermostのチーム削除など、システムコンソールからではできない操作に使用します。)
ECRにMattermostのイメージを置いて、そこからECSを起動しています。(MattermostのイメージはDockerhubから)

②構築全体の流れ

S3(.envファイル置き場)→EFS→ECR(リポジトリ作成、イメージのプッシュなど)→RDS(Aurora)→ECS→ALB→EC2(管理用)

今回は、存在するだけでお金のかかるサービスを後回しにして作成しているので、違和感があるかもしれません。
なお、IAMやVPCなどNW周り、CloudWatchやログなどの運用管理サービスは省略します。

③構築のポイント

 ・Mattermostの設定値を変更する
Mattermostのシステムコンソールの[環境]タブの設定値については、GUI上から設定を変更しても、コンテナ再起動時に設定内容が反映されず消えてしまいます。
そのため、変更したい設定はタスク定義にECSの環境変数に設定するか、envファイルとして引き渡す必要があります。
設定値に対してどの変数を設定する必要があるのかは以下のドキュメントを参照してください。


 ・参照先DBをAuroraに向かせる
参照先のDBは環境変数で設定します。
コンテナに環境変数を設定するには、タスク定義から環境変数を設定するか、S3に.envファイルを配置し、タスク定義作成時に「ファイルから追加」でS3の.envファイルのパスを指定し、環境変数を設定するかの2つ手段があります。
今回は、タスク定義から直接環境変数を設定しました。
なお、実際にこの方法で構築する場合は、この変数にはDBの認証情報が含まれているため、Secrets Managerを使用することを推奨します。
Secrets Managerを使用する方法は以下を参照してください。

<設定した環境変数>
キー:MM_SQLSETTINGS_DATASOURCE
値:postgres://{DBユーザ名}:{DBパスワード}@{エンドポイント}/{DB名}

 ・EFSに画像やテキストファイルを保存する
MattermostにアップロードされたファイルはEFSなどのコンテナ外のストレージに保存しないと、再起動時に消えてしまうので、EFSにファイルを保存するように設定します。
これをしないとテキストや画像ファイルの共有やアイコンの画像設定ができません。
Mattermostのデフォルトは、mattermost/data/配下にファイルが保存されます。
なので、コンテナマウントポイントのソースボリュームにEFSを指定し、コンテナパスにmattermost/data/を指定することで、EFSにファイルが保存されるようにします。

 ・ECSサービスのコンピューティングオプション
「キャパシティプロバイダー戦略」を選択すると、ECS Execを行うことができないため、ECS Execを行いたい場合には、「起動タイプ」を選択する必要があります。
公式ドキュメント:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/ecs-exec.html#ecs-exec-considerations

※ECS Execは現在、Auto Scaling グループのキャパシティープロバイダーを使用して起動されたタスクに対応していません。

④まとめ

 今回は社内サブチャットツールということで、あまり使用しない見込みだったため、Fargateを採用しました。
中に入っていじれるから、とりあえずはEC2か~と思われるかもしれませんが、AWS FargateでもECS Execで中に入れますし、余計なコストや管理面での手間がかかりません。落ちたら自動で上がってくる設定も簡単です。
Mattermostも無料で使用可能で、使ってみるとSlackみたいで使いやすく、モバイルアプリでも使用できるので、今回の構成はサブシステムにはもってこいだと感じました。
ただ、FreeプランのMattermostだと、AD認証ができません。サーバーに招待するにはリンクを共有するか、メールを送る必要があります。
特定の人に限定したアクセスにするためにはAWSかMattermostの設定に工夫が必要かもしれません。

AWSとコンテナの知識が多少あればすぐに構築できると思うので、勉強ついでにやってみてはいかがでしょうか。


エグゼクションではこのように、本業以外にも社内副業として色々な案件に参加するチャンスがたくさんあります✨✨
エンジニアとしてもっと実践スキルを上げたい!持っている資格を生かした案件がやりたい!と思っているそこのあなた!


私たちと一緒にエグゼクションで働きませんか?✨

エグゼクションは、新卒・中途問わず新しい仲間を募集中です!
リクルートサイトは画像をクリック👇✨
オフィス見学だけでも可!まずはお気軽にお問合せください🥰