Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

S3上にデータを保存してWebサイトを公開してみた

こんにちは、ロジカルアーツの井川です。

クラウドには便利なサービスがたくさんありますが、その中でもオンラインストレージサービスを使ったことがある方は多いのではないでしょうか。

今回はAmazonが提供するストレージサービスのS3を使ってクラウド上にデータを保存することと、静的なWebサイトのホスティングを行ってみたいと思います。

S3ってどんなサービス?

S3はAmazonが提供するオンラインストレージサービスです。"Simple Storage Service"を略してS3です。
オンラインストレージなのでどこからでもアクセスできるのはもちろんのこと、保存できるデータ容量は無制限で、HTTPSを使った安全なデータのやり取りが可能です。
保存したデータは自動的に3箇所以上のデータセンタに冗長して保存しているのでデータを損失してしまう可能性はかなり低く、その耐久性は99.999999999%、可用性はSLA99.99%で設定されています。
料金は使った分だけ発生の従量制で、最低料金はありません。
ちなみに保存しているデータ容量に対するコストは月額 約3円/GBです。 (2019年9月時点)

S3にデータを保存してみよう

S3にデータを保存するには、はじめにバケットと呼ばれるデータの入れ物を作成します。
フォルダを作ってその中にデータを保存していくようなイメージです。
今回はAWSのマネジメントコンソール上でバケットの作成から始めたいと思います。

バケットの作成

バケットを作成するを選択します。

f:id:logicalarts:20190926094404p:plain

バケットの作成画面が表示されるので情報を入力してバケットを作成します。
今回は以下の情報を入力します。

項目
バケット igawa-sample-bucket
リージョン アジアパシフィック (東京)

情報を入力したら作成を選択します。

f:id:logicalarts:20190926094409p:plain

バケットが作成できました。

f:id:logicalarts:20190926100621p:plain

ファイルのアップロード

作成したバケットにファイルをアップロードしてみましょう。
さきほど作成したigawa-sample-bucketバケットを選択します。

f:id:logicalarts:20190926101902p:plain

アップロードを選択します。

f:id:logicalarts:20190926101607p:plain

アップロード画面が表示されました。続いてファイルの追加を選択します。

f:id:logicalarts:20190926094254p:plain

ファイルが追加されたのでアップロードを選択します。

f:id:logicalarts:20190926094259p:plain

S3にファイルを保存できました!

f:id:logicalarts:20190926094304p:plain

ファイルのダウンロード

続いて、先ほど追加したファイルをダウンロードしてみましょう。
ファイルのチェックボックスにチェックを入れ、ダウンロードを選択します。

f:id:logicalarts:20190926094309p:plain

ダウンロードができました!

f:id:logicalarts:20190926102747p:plain

S3でWebサイトをホスティングしてみよう

S3はストレージサービスの機能のほかにも、静的なWebサイトをホスティングすることができます。
静的なWebサイトとは、HTMLなどで作成した常に同じ内容を表示するWebサイトのことです。
つまり、S3を使えばWebサイトをホスティングするためにサーバを用意しなくても良いのです!
S3でWebサイトのホスティングを始めるには、S3バケットをWebサイトホスティング用に設定して、そのバケットにWebサイトのコンテンツをアップロードします。

先ほど作成したigawa-sample-bucketにWebサイトホスティング用の設定を行ってみます。

静的Webサイトの有効化

静的Webサイトの有効化はバケットプロパティから行います。
プロパティを選択します。

f:id:logicalarts:20190926094313p:plain

Static website hostingを選択して、このバケットを使用してウェブサイトをホストするを選択します。

f:id:logicalarts:20190926094318p:plain

このバケットを使用してウェブサイトをホストするにチェックが入りました。
ここで表示されるエンドポイントはWebサイトのURLになります。後で使用するのでメモに控えておきます。
インデックスドキュメントにindex.htmlを設定します。保存を選択します。

f:id:logicalarts:20191002112743p:plain

Static website hostingバケットホスティングにチェックが入り有効化できました!

f:id:logicalarts:20190926094327p:plain

静的Webホスティングの有効化が完了しましたが、実はこれだけではWebサイトにアクセスすることができません。
S3は保存しているデータが意図せずパブリック(外部)からアクセスされないために、標準でバケットへのパブリックアクセスをブロックする設定が有効になっています。
Webサイトにアクセスするには、バケットへのパブリックアクセスを許可する必要があるため、アクセス制御設定を変更したいと思います。

アクセス権限の設定

バケットへのパブリックアクセスをブロックする設定を変更します。
バケットアクセス権限を選択します。

f:id:logicalarts:20190926094418p:plain

ブロックパブリックアクセスの画面が表示されました。
編集を選択します

f:id:logicalarts:20190926094422p:plain

パブリックアクセスをすべてブロックのチェックを外します。

f:id:logicalarts:20191003183720p:plain

すると子項目のチェックも外れました。

f:id:logicalarts:20191003181250p:plain

子項目はアクセスコントロールリストとバケットポリシーのパブリックアクセスをブロックする設定です。
この子項目をすべて有効にするとパブリックアクセスをすべてブロックの状態になります。

どちらもバケットのアクセス権を管理する機能ですが、それぞれの制限を組みあわせて設定できます。

  • アクセスコントロールリスト
    • パブリックアクセスを許可する新しいアクセスコントロールリストをブロックする
    • パブリックアクセスを許可する既存のアクセスコントロールリストを無視する
  • バケットポリシー
    • パブリックアクセスを許可する新しいバケットポリシーをブロックする
    • パブリックアクセスと別のAWSアカウントからのアクセス(クロスアカウントアクセス)を許可する既存のバケットポリシーを無視する

今回は全ての項目のチェックを外したままで保存を選択します。
※環境に合わせて必要な設定はオンにしてください

f:id:logicalarts:20191004143435p:plain

設定を更新するには、確認フィールドに"確認"の入力が必要になります。
入力して確認を選択し先に進みましょう。

f:id:logicalarts:20190926094241p:plain

ブロックパブリックアクセス設定が変更できました。

バケットポリシーの設定

次はバケットポリシーを設定しましょう。バケットポリシーを選択します。

f:id:logicalarts:20190926094339p:plain

バケットポリシーエディターが空の状態で表示されました。

f:id:logicalarts:20190926094344p:plain

パブリックアクセスを許可する以下のバケットポリシーを入力します。
"Resource"の値はバケット名によって変わります。名前の異なるバケットに設定する場合はigawa-sample-bucketを変更して下さい。

{
   "Version":"2012-10-17",
   "Statement":[{
    "Sid":"PublicReadForGetBucketObjects",
         "Effect":"Allow",
      "Principal": "*",
       "Action":["s3:GetObject"],
       "Resource":["arn:aws:s3:::igawa-sample-bucket/*"
       ]
     }
   ]
 }

入力が完了したら保存を選択します。

f:id:logicalarts:20190926094348p:plain

バケットポリシーが更新され、igawa-sample-bucketバケットに対するパブリックアクセスが許可されました。

f:id:logicalarts:20190926094354p:plain

バケットの一覧画面を確認するとバケットのアクセスステータスが公開になりました。

f:id:logicalarts:20190926094359p:plain

Webサイトのコンテンツをアップロード

バケットにWebサイトのコンテンツをアップロードしましょう。
以下の内容でindex.htmlファイルを作成します。

<html>
<head>
<meta charset="UTF-8">
<title>S3の静的なWebサイトホスティング</title>
</head>
<body>
Hello world!
</body>
</html>

作成したindex.htmlファイルをigawa-sample-bucketバケットにアップロードします。

f:id:logicalarts:20190926094331p:plain

アップロードが完了したら静的Webサイトの有効化でメモに控えておいたエンドポイントにアクセスしてみます。

f:id:logicalarts:20190926094335p:plain

アップロードしたindex.htmlファイルの内容が表示されました!

S3の利用料金

データを保存したりWebサイトをホスティングできるのは便利ですが、料金はどのぐらい掛かるのか気になります。
料金表を確認してみました。

aws.amazon.com

基本的には以下内容の合計がS3の利用料金になります。

  • ストレージ料金
    • 保存しているデータの容量
  • リクエスト料金
    • PUT、COPY、POST、または LIST リクエス
    • GET、SELECT および他のすべてのリクエス
  • データ転送料金
    • Amazon S3 からインターネットへのデータ転送(アウト)

例として、1ページあたり20個(総サイズ2MB/ページ)のファイル数のページが全10ページの月間10,000PVのWebサイトを例に計算してみましょう。

f:id:logicalarts:20191002151437p:plain

月額合計:$ 2.359

*1. 画像を含めた1ページあたりのファイルサイズの合計が2MB×10ページとして計算
*2. 2MB/ページ×10,000PV/月=20GBとして計算
*3. 画像を含めた1ページあたりのファイル数20個×10,000PV/月=200,000として計算

アクセス数によってはサーバをレンタルしてWebサイトを運営するよりもランニングコストを抑えることができそうです!

まとめ

クラウドストレージならどこからでもデータにアクセスできるのが便利ですね。
S3を使って簡単にWebサイトを公開できることにも驚きました。
この記事がAWSをお試しいただくきっかけになれば幸いです。

参考サイト