AWSのS3を使う手順

やりたいこと

・ec2に構築したwebサービスのうち画像などの静的コンテンツはec2に置くのではなくs3におきたい。
・ec2上に構築する管理ツールなどからファイルのアップロードを行えるようにしたい。

ちなみにec2インスタンスの作成手順は以下にまとめてあります
AWSでLAMP環境を構築する手順 - とりあえずphpとか

s3の作成

1. 「ホーム」画面から「S3」をクリック ※「S3 Management Console」が開く

2. 「S3 Management Console」画面左上の「Create Bucket」ボタンをクリック ※小ウインドウが開く

3. 「Bucket Name」「Region」入力フォームよりこれらを入力して「Create Bucket」ボタンをクリック ※作成される
Bucket Nameは、作成されたs3にアップロードされた画像などのurl。以下は例
Bucket Name:image.example.com
という名前で作った場合、http://image.example.com.s3.amazonaws.com/***.jpgなどのurlでアクセスすることになる。

4. 「S3 Management Console」に、3.で追加したBucketが表示されるので、それを右クリックして「Properties」をクリック ※画面右に詳細設定画面が表示される

5. 4.で開いた画面の「Permissions」をクリックして、「Add bucket policy」をクリック ※ 小ウインドウの「Bucket Policy Editor」が開く

6. 5.で開いた「Bucket Policy Editor」の画面左下の「Aws Policy Generator」をクリック ※「AWS Policy Generator」が開く

7. 6.で開いた「AWS Policy Generator」で以下の項目を入力して「Add Statement」をクリック
Select Type of Plicy:「S3 Bucket Policy」を選択
Effect:「Allow」を選択
Principal:「*」を入力
Actions:「GetObject」を選択
Amazon Resource Name (ARN):「arn:aws:s3:::image.example.com/*」を入力

8. 7.の後に表示される「Generate Policy」ボタンをクリックすると、「Policy JSON Document」が表示されるのでそれをコピー

9. 6.の「Bucket Policy Editor」に8.の内容をペースト

ここまででs3バケットの作成が完了

s3の動作確認

「S3 Management Console」に作成されたバケット名をクリックすると、アップロード済みコンテンツ一覧の画面が表示される。
「Upload」ボタンより画像をアップロード。ここではhoge.jpgという画像をアップロードしたとして、
http://image.example.com.s3.amazonaws.com/hoge.jpgにアクセスしてみて画像が表示されればOK

ec2からs3へアクセスできるようにする

引き続きAWSの管理画面より以下を行う
1. 画面右上の「Welcome to AWS」をクリック後、「Security Credential」をクリック

2. 「Access Keys (Access Key ID and Secret Access Key)」の「Create New Access Key」をクリック

3. 2.で「Access Key ID」「Secret Access Keys」が作成されて表示されるのでこれをとっておく

以下、ec2インスタンスsshでログインしての作業

s3fsをインストール

// s3fsに必要なパッケージ
sudo yum install -y gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel openssl-devel mailcap

// s3fsのダウンロードとインストール
wget https://s3fs.googlecode.com/files/s3fs-1.74.tar.gz &&
tar xvfz s3fs-1.74.tar.gz &&
cd s3fs-1.74 &&
./configure &&
make &&
sudo make install

// 設定ファイル編集
sudo vi /etc/fuse.conf
2行目の「user_allow_othre」のコメントを外す

sudo vi /etc/passwd-s3fs
Access Key ID:Secret Access Keys
sudo chmod 640 /etc/passwd-s3fs

// s3マウント
sudo /usr/local/bin/s3fs バケット名 マウント先 -o allow_othre
sudo /usr/local/bin/s3fs image.example.com /var/www/html/image -o allow_othre //例

ちょっと長くなりましたが以上でs3が使えるようになりました。
次回はCloudFrontを利用して、s3に置いた画像をさらにキャッシュできるような手順をと思います

以上です