Mattermostの運用において、データのバックアップは欠かせない要素です。しかし、EC2、RDS、S3と複数のリソースが絡むと、管理が煩雑になり、設定漏れやデータ不整合のリスクがつきまといます。
そこで活用したいのが AWS Backup です。今回は、全リソースを中央管理型で効率的に保護し、「安全性・コスト・運用性」を最大化する設計と構築手順を解説します。
1. バックアップ戦略:3本の柱
本設計では、Mattermostを構成する「アプリ・DB・ストレージ」の3つのレイヤーに対し、保持期間を 7日間 に最適化して適用します。
| バックアップ対象 | 主要な役割 | 保持期間 | 復元方式 | 運用のポイント |
| EC2 (App Layer) | アプリサーバー | 7日間 | スナップショット | 迅速なサーバー再構築を優先 |
| RDS (Data Layer) | データベース | 7日間 | PITR & スナップショット | 秒単位でのデータ復旧が可能 |
| S3 (Storage Layer) | 添付ファイル | 7日間 | スナップショット | DBとのデータ整合性を保持 |
💡 ポイントは「時刻同期」
すべてのバックアップ実行時間を 日本時間 02:00 (JST) に統一しています。これにより、復元時にDBとS3のファイル状態を同じ時点に揃える 「クラッシュ一貫性」 を担保し、データ不整合のリスクを最小化しています。
2. 各リソースの詳細設定手順
① EC2 バックアップ(アプリケーション層)
- 独立管理 (Isolation): EC2専用のプランを分離することで、設定変更時の影響範囲(Blast Radius)を限定します。
- 自動検知:
Backup: trueというタグを持つインスタンスを自動で保護対象に含める設定を採用し、手動設定の漏れを防ぎます。
② RDS Aurora バックアップ(データ層)
システムの要であるDBには、最も柔軟な復旧手段を用意します。
- 継続的バックアップ (Continuous): ポイントインタイムリカバリ(PITR)を有効化。過去7日間であれば、任意の時点(秒単位)に復元可能です。
- クラスター単位の保護: インスタンスではなくクラスター単位で保護をかけることで、フェイルオーバー時も途切れることなくデータを守ります。
③ S3 バックアップ(ストレージ層)
ユーザーが投稿した画像やファイルを確実に保護します。
- 必須条件: AWS Backup for S3を利用するため、対象バケットの 「バージョニング」を有効 に設定します。
- サービスOpt-in: AWS Backupの設定画面で「S3」が有効(Enabled)になっていることを確認します。
3. 【IaC】CloudFormation テンプレート
手動設定ミスを排除するため、CloudFormationによる一括構築を推奨します。
YAML
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Mattermost Project - Backup Infrastructure'
Parameters:
ProjectName:
Type: String
Default: mattermost-prod
RetentionDays:
Type: Number
Default: 7
Resources:
# 1. バックアップボールト(保管場所)
BackupVault:
Type: AWS::Backup::BackupVault
Properties:
BackupVaultName: !Sub '${ProjectName}-vault'
# 2. EC2用プラン (JST 02:00 実行)
EC2Plan:
Type: AWS::Backup::BackupPlan
Properties:
BackupPlan:
BackupPlanName: !Sub '${ProjectName}-ec2-plan'
BackupPlanRule:
- RuleName: 'EC2-Daily-7Day'
TargetBackupVault: !Ref BackupVault
ScheduleExpression: 'cron(0 17 * * ? *)'
Lifecycle:
DeleteAfterDays: !Ref RetentionDays
# 3. RDS用プラン (PITR有効)
RDSPlan:
Type: AWS::Backup::BackupPlan
Properties:
BackupPlan:
BackupPlanName: !Sub '${ProjectName}-rds-plan'
BackupPlanRule:
- RuleName: 'RDS-Daily-7Day'
TargetBackupVault: !Ref BackupVault
ScheduleExpression: 'cron(0 17 * * ? *)'
EnableContinuousBackup: True
Lifecycle:
DeleteAfterDays: !Ref RetentionDays
# 4. S3用プラン (JST 02:00 実行)
S3Plan:
Type: AWS::Backup::BackupPlan
Properties:
BackupPlan:
BackupPlanName: !Sub '${ProjectName}-s3-plan'
BackupPlanRule:
- RuleName: 'S3-Daily-7Day'
TargetBackupVault: !Ref BackupVault
ScheduleExpression: 'cron(0 17 * * ? *)'
Lifecycle:
DeleteAfterDays: !Ref RetentionDays
4. 運用のポイントと確認事項
タグ付けによる自動化
各リソースに以下のタグを付与するだけで、バックアップが開始されます。
- Key:
Backup| Value:true
動作確認リスト
- AWS Backupコンソールの「Backup jobs」でステータスが
Completedか? - 「Protected resources」に対象のリソースが表示されているか?
- S3バケットの「バージョニング」が有効になっているか?
5. 環境のクリーンアップ手順
プロジェクト終了時などに環境を削除する際は、以下の順序で行うことで課金を確実に停止できます。
- リカバリポイントの削除: バックアップボールト内のスナップショットをすべて削除します。
- スタックの削除: CloudFormationスタックを削除します。
- S3バージョンの整理: 不要な場合は古いバージョンをライフサイクルルールで削除します。
まとめ
バックアップ設計で大切なのは、「もしもの時に確実に戻せること」、そして「運用コストが低いこと」です。
今回ご紹介したAWS BackupとCloudFormationを組み合わせた構成は、特定のサービスに依存せず、EC2・RDS・S3を利用するあらゆるシステムに適用可能です。ぜひあなたの環境でも試してみてください!
