Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ieee0824/9a8234d6d690342313f5 to your computer and use it in GitHub Desktop.
Save ieee0824/9a8234d6d690342313f5 to your computer and use it in GitHub Desktop.

S3とEC2で構築するバックアップサーバー

はじめに

こんにちは高知工科大Advent Calendar 2015の5日目担当です.
今日もansible書こうかなと思ってましたが二日連続はちょっとモチベーションたもてなかったので違う内容を書いていきます.
最近ワタクシPCの容量不足問題に悩まされております.

$ df -lh
Filesystem   Size   Used  Avail Capacity  iused   ifree %iused  Mounted on
/dev/disk1  233Gi  225Gi  7.6Gi    97% 59001738 1979508   97%   /

OSもまだ`El Capitan`じゃなく`Mavericks`です. なのでそろそろ一度clean installしたいなと思ってました. clean installする前にバックアップをとりたいわけですがHDDを所有しておりません. さてどうやってtime machine環境を作りましょう?となりました. そしたら昨日ひらめいてしましました. HDDないなら`Amazon S3`に置けばいいじゃない! というわけで今回はAWSで構築するtime machine環境でやっていきます.

やってみよう

以下は今回使うものです.

  • EC2 t2.micro
  • Amazon S3
  • Netatalk
  • めげない心

まずEC2に適当なインスタンスを立ち上げます.
まぁ一番下のプランで大丈夫でしょう.
OSはAmazon Linuxで行きます.
こんな感じでできました.

EC2にマウントするためのS3の設定を作っていきます.
s3fsを使うために必要なパッケージをインストールします.

$ sudo yum -y install git automake gcc-c++ fuse fuse-devel libcurl-devel libxml2-devel openssl-devel

インストールできたらs3fsのソースコードを取得します.

$ git clone https://github.com/s3fs-fuse/s3fs-fuse.git

さてビルドしてインストールしましょう.

cd s3fs-fuse/
./autogen.sh
./configure --prefix=/usr
make
sudo make install

マウントポイントを作ります.

$ sudo mkdir /data

ここまでできたら次はS3のほうを触ります.
バケットを生成するわけですがこの時世界中の人々と被らない名前を設定する必要があります.
タイムマシンぽい名前にしておくといいと思います.
そしてS3にアクセスするためのアクセスを作ります.
やりかたはここを見るといいです.
アクセスキーができたらpasswd-s3fsに記述していきます.
配置場所は/etc/passwd-s3fsです.

$ echo "<Access Key ID>:<Secret Access Key>" | sudo tee -a /etc/passwd-s3fs
$ sudo chmod 640 /etc/passwd-s3fs

さてここまで出来たらマウントしましょう.

sudo /usr/bin/s3fs <Bucket Name> /data -o rw,allow_other,uid=<UID>,gid=<GID>,default_acl=private

マウントできたら/dataまで行ってファイルを作りs3の画面から作ったファイルが見えれば成功しています.
ちなみにdf -lhでも確認できます.

$ df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  1.3G  6.5G  17% /
devtmpfs        489M   56K  489M   1% /dev
tmpfs           498M     0  498M   0% /dev/shm
s3fs            256T     0  256T   0% /data

マウントの確認ができたらNetatalkを導入していきます.
必要なものを諸々インストールします.

$ sudo yum install -y db4-devel libgcrypt libgcrypt-devel avahi nss-mdns avahi-tools avahi-devel libacl-devel quota-devel rpm-build

rpmをダウンロードします.

$ wget http://www003.upp.so-net.ne.jp/hat/files/netatalk-3.1.7-1.2.fc24.src.rpm

rpmコマンドを使いインストールする.

$ sudo rpm -ivh netatalk-3.1.7-1.2.fc24.src.rpm

rpm-buildでrpmを作成する.

$ cd ~/rpmbuild
$ rpmbuild -bb SPECS/netatalk.spec

なんか怒られた.

error: Failed build dependencies:
	bison is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	cracklib-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	dbus-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	dbus-glib-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	docbook-style-xsl is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	flex is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	mysql-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	openldap-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	pam-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	systemtap-sdt-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	tcp_wrappers-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64
	libtdb-devel is needed by netatalk-5:3.1.7-1.2.amzn1.x86_64

パッケージ足りてないので全部入れる.

$ sudo yum -y install bison dbus-devel dbus-glib-devel cracklib-devel docbook-style-xsl flex mysql-devel openldap-devel pam-devel systemtap-sdt-devel tcp_wrappers-devel libtdb-devel

無事ビルドできるようになったのでもう一度.

$ rpmbuild -bb SPECS/netatalk.spec

あとは生成されたRPMS/x86_64/netatalk-3.1.7-1.2.amzn1.x86_64.rpmをインストールする.

$ sudo rpm -ivh RPMS/x86_64/netatalk-3.1.7-1.2.amzn1.x86_64.rpm

dbus-pythonが無いと怒られるので入れる.
installが完了したら設定ファイルを書いていく.
/etc/netatalk/afp.confにTime Machineの設定を書く.
timemachineのところは好きな名前で

[timemachine]
path = /data
time machine = yes

起動する.

$ sudo service netatalk start

ログインユーザーはunixユーザーになるので適宜作ること.

あとはEC2側のファイヤーウォールの設定のみです.
afpで使用するポートは548なので548を開きます. mac側でサーバーをマウントするには

$ open afp://ip address

できます.

後はTime Machineの設定項目からターゲットを指定するだけですね.

終わりに

これでHDDの問題はほぼ解決しましたS3の料金はS3からのダウンロードで発生するのでバックアップ用に使うにすごく良いストレージだと思います.
あとはじめVPN経由でやろうと思ったけど認証周りは暗号化されてるみたいね.
パケットの転送は知らないので調べてね.
ダメそうならVPN経由の方法も書きます.

追記

認証は暗号化されてるけどデータはされてないみたい. なのでVPNに載せましょう.
AFPとかの仕様

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment