0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# RailsアプリをAWS EC2で運用しながらPostgreSQLバックアップをS3へ保存した話

0
Posted at

はじめに

個人開発しているRailsアプリ「TaskLink」をAWS EC2上で運用しています。

運用を続ける中で、

  • EC2が故障したら?
  • PostgreSQLのデータが消えたら?
  • 誤ってDBを壊したら?

という不安があり、バックアップ環境を構築することにしました。

今回は、

  • PostgreSQLバックアップ作成
  • AWS S3への保存
  • IAM Roleによる認証
  • ディスクフル障害からの復旧

まで行ったので、その記録をまとめます。


構成

バックアップの流れは以下の通りです。

PostgreSQL

pg_dump

gzip圧縮

AWS S3


バックアップスクリプト

#!/bin/bash

DB_NAME="tasklink_production"
BACKUP_DIR="./backups"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
FILE_NAME="tasklink_backup_$DATE.sql"

mkdir -p $BACKUP_DIR

sudo -u postgres pg_dump $DB_NAME > $BACKUP_DIR/$FILE_NAME

gzip $BACKUP_DIR/$FILE_NAME

aws s3 cp \
  $BACKUP_DIR/$FILE_NAME.gz \
  s3://tasklink-backups/

echo "Backup created and uploaded: $FILE_NAME.gz"

実行すると、

./backup.sh
upload: backups/tasklink_backup_xxx.sql.gz to s3://tasklink-backups/...
Backup created and uploaded: tasklink_backup_xxx.sql.gz

のようにS3へ保存されます。


IAM Roleを利用

最初はアクセスキーを利用する予定でしたが、より安全な方法としてIAM Roleを採用しました。

EC2へRoleを付与することで、

  • Access Key不要
  • Secret Key不要
  • 認証情報管理不要

となり、セキュリティ面も向上しました。


ハマったポイント

ディスク容量不足

作業中に以下のエラーが発生しました。

No space left on device

確認すると、

df -h
/dev/root 100%

となっており、EC2のディスクがいっぱいになっていました。

原因を調査すると、

  • swapfile
  • aptキャッシュ
  • bundle関連ファイル

が容量を圧迫していました。

不要なファイルを整理することで復旧できました。


学んだこと

今回の作業を通じて、

  • バックアップの重要性
  • IAM Roleによる安全な認証
  • EC2のディスク容量管理
  • apt / dpkg の障害対応

について学ぶことができました。

アプリを作るだけでなく、運用まで経験することで学べることが多いと感じました。


おわりに

今回構築したことで、PostgreSQLのバックアップをAWS S3へ保存できるようになりました。

次は、

  • cronによる自動バックアップ
  • S3ライフサイクル設定
  • CloudWatch監視

にも挑戦したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?