Love PG , Liquor & Music

プログラマー備忘録やお酒や音楽

AWS,EC2+S3でFTPサーバーを構築

私用で結構なファイルの受け渡しが必要になったので、せっかくなのでAWS使って受け渡そうと思って軽く作ってみました。

EC2単体ではOS分引いたらだいたい5G空きがあります。S3でも5Gの無料枠がありますので合わせると10GB分のファイルサーバーとして使えます。で、S3設定で自動拡張とかもできるのでお金払えるのであれば容量無限のFTPサーバーとして使うことができます。ちなみに料金は1T月3000円くらいですが、使った分だけ課金なので500Gだったら1500円くらいになります。

 

今回作った構成はシンプルすぎるこんな感じ。

 

f:id:gwaan_so:20140616183539p:plain

 

なぜ、わざわざS3を直接公開しなかったというと

・Httpはめんどくさい

・Drop Boxとかもめんどくさい(これ以上アカウント作りたくないし)

FTPが手馴れてて楽

・S3単体じゃまともなログとれない

・勉強も兼ねてやってみよう

ってな感じです。

あと、EC2のようなコンピューティングインスタンスを連動させることにより

・アップロードしたファイルを日ごとにバックアップ

・アップロードされたファイルを圧縮して再保存(画像のサムネイル用変換とか)

・アップロードしたファイルから特定種類のものをメールで飛ばす

とかいろいろな処理と組み合わせることができます。 

かゆいところに手が届きまくれる構成、ナイスです。今後のパワーアップに期待できます。

 

ちなみにこの図はぬーらぼが出しているCacooっていうCloud上で図形書けるサービスを使って書いてみました。シンプルなので図に起こす必要は1ミリもなかったのですが使いたかったので使ってみました。http://nulab-inc.com/ja/

使いこなすとこんなネットワーク図なんかも作れるみたいです。わかりやすくて便利です。#たぶんこれはCacooのネットワーク図です。Cloud FrontでBucketにアクセスしてフラッシュとってるのでしょう。でそのFlashからAPP Access投げてるんだと思います。たぶん。なんかよくわからないですが、かっこいいです。

f:id:gwaan_so:20140616184034j:plain

 

作業中キャプチャを取り忘れましたが、大まかな流れは

1.S3インスタンス立ち上げ

2.EC2インスタンス立ち上げ(Amazon Linux

3.Security Groupの設定(←ここ重要)

4.LinuxにVSFTPインストール

5.S3をEC2にマウント(S3のマウントツール使って、AP IDとSECURITY KEYを発行してLinuxへ設定するだけ)

6.FTPの設定もろもろ(←ここちょっと重要)

になり、クライアントから接続でいるようになりました。

3と6の一部以外は特筆することはあまりないのですが、注意点としてPASVの設定をしておかないと接続できないということくらいです。

 

メモ書き程度に、

まずPASVとは

E-WordPASVモードとは 〔 パッシブモード 〕 【 passive mode 】 - 意味/解説/説明/定義 : IT用語辞典より引用すると

ファイル転送に使うプロトコルであるFTPで利用される通信モードの一つで、データ転送のためのコネクションをクライアントから発信する方式。

FTPでクライアントからサーバにファイルを送信するには、通常のモードではクライアントからサーバに接続した後、サーバからクライアントにデータ通信用の接続要求を行い、このコネクションを利用してファイル送信を行う。この方式だと、クライアントがファイアウォールの内側にあり、外部から直に接続要求を行うことができないような環境ではファイルの送信が行えない。

こうした場合に利用するのがPASVモードである。PASVモードではクライアントからサーバへ接続後、もう一度クライアントからサーバへデータ通信用の接続要求を行う。接続の方向は常にクライアントからサーバへ向かって行われるため、ファイアウォールなどがあってもFTPによるファイル転送が可能となる。その際利用されるコマンドが「PASV」であることから「PASVモード」と呼ばれる。

 とのこと。

つまり、よくわからないけどそういう動きをするのでそれようのポートを開けといてねと読み取れます。

で、vsftpd.confに下みたいな設定をしてあげます。

 pasv_enable=YES
 pasv_addr_resolve=YES
 pasv_address=[インスタンスのパブリックなIP]
 pasv_min_port=60001
 pasv_max_port=60010

そして、Security Group側で穴をあけてあげます。Firewallみたいなもんですね。

上からEC2接続用のSSHFTP接続用、PASV用です。

f:id:gwaan_so:20140616185453p:plain

いったん構築してiPhoneからアクセスしたりいろいろしてみたんですが、S3から直でアップロードしたやつをFTPでダウンロードできたりなんかできるので結構便利です。Sambaもそのうちいれようかな~

 

最後に、S3マウントするととりあえず256Tって表示がでるんですね。。。AWSぱねえ。

f:id:gwaan_so:20140616185807p:plain