いよいよAWSシリーズも最終回。
今まではEC2でのインスタンスの起動やAMIの話でしたが、今回はAmazon Web Serviceの中でもS3についてお話したいと思います。
目次
Amazon S3とは
Amazon S3はAmazon Web Serviceの開発者向けストレージサービスです。
ストレージサービスと聞くとDropboxを想像する方が多いと思います。
DropboxはWindowsやスマートフォンなどのクライアントが使用するデバイスにアプリが提供され、扱いやすく作られていますが、S3はクライアントデバイスではなくWeb上で完結し、Amazon Web Serviceと連携しやすいように作られている点で大きな違いがあります。
DropboxはS3上で作られている・・・なんていう噂も聞きますね。
S3を使ってみる
さて、何はともあれまずはS3を使ってみましょう。
扱い方はシンプルで、S3内にバケットという箱を作って使用するイメージになります。
Amazon Web Service内のS3にアクセスし「バケットの作成」をクリックします。
バケット名を設定し、リージョンを指定し作成します。
これでバケットが作成されました。
作成したバケットを開き、アップロードボタンをクリックします。
ここにファイルをドラッグアンドドロップするとファイルがアップロードできます。簡単ですね!
EC2からS3バケットへ接続するための準備
冒頭でS3はAmazon Web Serviceとの連携しやすいと書きましたが、先ほど作成したS3のバケットへEC2からアクセスできるようにしたいと思います。
S3へアクセス可能なユーザーの作成
Identity and Access Management(IAM)で専用ユーザーを作成
Identity and Access Managementの管理画面からS3接続用の専用ユーザーを作成します。
ここでは「nedia-s3」としました。
S3の権限付与
再度ユーザー管理画面から先ほど作成したユーザー名をクリックし、ユーザーの詳細画面へアクセスします。
「ポリシーのアタッチ」をクリックし「AmazonS3FullAccess」を選択しアタッチします。
s3fsのインストール
EC2からS3バケットをマウントするために、s3fsを使えるようにします。
1 2 3 4 5 6 7 8 9 |
# cd /usr/local/src # wget https://s3fs.googlecode.com/files/s3fs-1.74.tar.gz # yum install libcurl-devel # yum install libxml2-devel # yum install fuse fuse-devel # yum install openssl-devel # ./configure prefix=/usr # make # make install |
これでs3fsというコマンドが使用できるようになりました。
passwd-s3fsの作成
Acess Key IDとSecret Access Keyが以下のものだとします。
Access Key ID:XXXXXXXXXXXXXXXXXXXX
Secret Access Key:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1 2 |
# echo 'XXXXXXXXXXXXXXXXXXXX:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' > /etc/passwd-s3fs # chmod 600 /etc/passwd-s3fs |
EC2からS3バケットをマウントしバックアップ
S3バケットのマウント
使えるようになったs3fsコマンドを使用してs3バケット「nediatest」をマウントします。
1 2 |
# mkdir /mnt/backup # s3fs nediatest /mnt/backup/ -o rw,allow_other |
マウントが完了したので確認。
1 2 |
# df -h | grep s3fs s3fs 256T 0 256T 0% /mnt/backup |
なんと256TBのS3バケットがマウントされました。
ここまでできれば、マウント済S3バケットに対してrsyncを実行しバックアップが取得できます。
1 |
# rsync -av --delete /home/ /mnt/backup/home/ |
これをうまくスクリプト化すればバックアップの自動化ができますね。
EC2を使わずS3のみで静的ホームページを公開する
ここまででS3を使用したバックアップはできましたが、S3では簡易WEBサーバ機能がありますのでこれも使ってみたいと思います。
まずS3管理画面からWeb公開用のバケットを作成します。ここでは「blognedia-web」としました。
このバケットを右クリックしプロパティを開きます。
「静的ウェブサイトホスティング」の項目から「ウェブサイトのホスティングを有効にする」にチェックを入れます。
- インデックスドキュメント:index.html
- エラードキュメント:error.html
として保存します。
S3バケットポリシーの作成
次に、ポリシーを作成します。
バケットポリシーは以下のAWS Policy Generatorで作成ができます。
http://awspolicygen.s3.amazonaws.com/policygen.html
■ Step 1: Select Policy Type
- Select Type of Policy → “S3 Bucket Policy”を選択
■ Step 2: Add Statement(s)
- Effect → “Allow”
- Principal → “*”
- AWS Service → “Amazon S3″を選択
- Actions → “GetObject”のみ選択
- Amazon Resource Name (ARN) → “arn:aws:s3:::バケット名/*”を入力。
今回は「arn:aws:s3:::blognedia-web/*」としました。
入力が完了したら「Add Statement」ボタンをクリックし、更に「Generate Policy」をクリックして進めると以下のようなポリシーが作成されました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Id": "Policyxxxxxxxxxxxxx", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmtxxxxxxxxxxxxx", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::blognedia-web/*", "Principal": "*" } ] } |
バケットポリシーの適用
作成したバケットポリシーをWEB公開用バケットに適用します。
先ほどと同様にWEB公開用バケットのプロパティを開き、「アクセス許可」をクリックします。
バケットポリシーエディターに作成したバケットポリシーを貼り付け保存します。
完了したら、公開用バケットにindex.htmlをアップロードしておきます。
再度「静的ウェブサイトホスティング」の項目を表示し、エンドポイントと書かれているURLにアクセスすると先ほどアップロードしたindex.htmlが表示されます。
もちろん動的なページは表示できませんが、静的なページのみのホームページ作成であればEC2などでインスタンスを構築する必要はなく、S3だけで済んでしまいますのでお手軽です。
最後に
4回に渡ってお送りしたAWSシリーズいかがでしたか。
AWSにはEC2やS3以外にも多くのサービスがありますので、また次の機会に解説ができればと思っています。
それではまた!