【JAWS-UG関西女子会】#1 Amazon S3で静的WEBサイトをつくろう ～おまけバージョン～

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-65307172-1', 'auto');
  ga('send', 'pageview');

</script>
#はじめに
この記事はJAWS-UG関西女子会「はじめて女子応援企画！事例から学ぶもくもく＆もぐもぐ会」で
 ~~もぐもぐ~~ [^1] もくもくする際のテキストのおまけバージョンとなります。
[^1]: 節子！それは懇親会や！！


#本記事での目標

* Amazon S3で静的WEBサイトを作ること


#Amazon S3で静的WEBサイトを作る

###S3で静的WEBサイトを公開するまでのながれ

1. WEBサイト用にS3のバケットを作る
2. バケットにファイルをアップロードする
3. ファイルの公開設定をする
4. S3のwebsite endpointにアクセし、サイトが表示されることを確認する

#用語について
<dl>
  <dt>S3：</dt>
  <dd>Simple Storage Serviceの略</br>
<dd>略称だけどみんなS3って言ってる</dd><br>
  <dt>バケット：</dt>
  <dd>S3上に作るフォルダ的なもの</br>
　<dd>名前がユニークである必要あり</br>
　<dd>1アカウントあたり最大100個まで</dd><br>
<dt>オブジェクト：</dt>
<dd>ファイルのこと<br>
<dd>URLによるアドレスが付与</br>
<dd>バケット内に容量無制限で置くことができる</br>
<dd>1オブジェクトのサイズは最大5TBまで</dd><br>
<dt>バケットポリシー：</dt>
<dd>バケットに対してアクセス権限を設定するもの<br>
<dd>JSON形式で記述</dd><br>
<dt>WEBサイトエンドポイント：</dt>
<dd>S3上のオブジェクトへアクセスするためのURLのこと<br>
<dd>エンドポイントは自動的に割り当てられる</br>
<dd>※本手順では独自ドメインとの割当て方は省いています(無料枠がなく、.comドメインで$10もするので・・・)</dd>
</dl>

#Amazon S3での静的WEBサイト構築手順
##1.WEBサイト用にS3のバケットを作る

1.1.メニューからS3をクリックします
![AWS000116.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/9c33f80c-0792-b81c-5e3a-30a692e9f6a9.jpeg)

<p>　</p>
1.2.Create Bucketをクリックします。
なにか見えてるのは元々作ってたバケットなので気にしないでください
![AWS000117.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/2ec0cab6-6598-97cb-0394-8a30dab9e19f.jpeg)
<p>　</p>
1.3.Bucket Nameに好きなバケット名を入れて下さい。
世界中でユニークである必要があるので、他とかぶらなさそうなものにしてください
例では「mokumokugirls」としています
![AWS000118.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/1b9ad607-09c1-f06f-e585-bb5544a2f51f.jpeg)
<p>　</p>
1.4.バケット名を入れたらCreateボタンをクリックします
![AWS000119.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/3ba70b86-152d-66b5-d72f-f89e479dfe90.jpeg)

<p>　</p>
1.5.バケットが出来上がりました
![AWS000120.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/01de9f35-331b-db23-cb37-b702eb066977.jpeg)

##2.バケットにファイルをアップロードする

2.1.アップロード用のファイルを3つ用意します。

* index.html(サイトのトップページ)
* error.html(ファイルがないURLを指定された場合のエラーページ)
* index.htmlに貼る画像ファイル(てきとーな画像を用意して下さい)

index.htmlの中身は以下の様な感じにしました。
メモ帳等で作って下さい。
自分のだとわかりやすいように「Hello World!!」の文字列の部分を変えてみましょう。
画像ファイルの名前も合わせて下さい。

```index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

<html>

 <head>
  <title>JAWS-UG関西女子会もくもく勉強会</title>
 </head>

 <body>
  <!--文字列をオリジナルなものに変えてみましょう-->
  <span style="font-size : 100pt">Hello World!!</span></br>
  
  <!--画像ファイル名を自分で用意した画像ファイル名と合わせましょう-->
  <img src="./kansaigirls.jpg" width="500" height="500">
 </body>

</html>
```

存在しないファイル名を指定された時に表示するerror.htmlの内容は以下の様な感じにしました。
こちらも内容をわかりやすいように変えてみましょう。
画像ファイルの名前も合わせて下さい。

```error.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

<html>

 <head>
  <title>JAWS-UG関西女子会もくもく勉強会</title>
 </head>

 <body>
  <!--文字列をオリジナルなものに変えてみましょう-->
  <span style="font-size : 50pt">Sorry!! Page not found!!</span></br>

  <!--画像ファイル名を自分で用意した画像ファイル名と合わせましょう-->
  <img src="./kansaigirls.jpg" width="500" height="500">
 </body>

</html>
```

<p>　</p>
2.2.できあがったバケット名のリンクをクリックします。
![AWS000121.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/159bc7f0-fede-426c-516e-64e292949f0b.jpeg)


<p>　</p>
2.3.「Upload」ボタンをクリックします。
![AWS000122.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/034530c6-8264-b873-3a00-420d1177b313.jpeg)

<p>　</p>
2.4.アップロードするファイルを選んで・・・
![AWS000123.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/12247c34-d75f-4ab5-0fd3-c8da0effabc3.jpeg)

<p>　</p>
2.5.「Drag and drop files and folders to upload here」の枠内にドラッグアンドドロップして
「Start Upload」ボタンをクリックします。
![AWS000124.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/da0b108a-88a9-d836-dac8-dbd79c93eacb.jpeg)


<p>　</p>
2.6. ファイル3つともTransfersタブ上で「Done」となったことを確認します。
![AWS000125.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/64388f45-2ea0-9172-cdc7-c9b83e425949.jpeg)


##3.ファイルの公開設定をする

###3.1.WEBサイト公開設定をする
3.1.1.「Properties」ボタンをクリックします。
![AWS000126.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/2ef15c71-0d66-3d62-7f5c-d5965d69f57d.jpeg)

<p>　</p>
3.1.2.「Static Website Hosting」をクリックして設定項目を展開し「Enable website hosting」をチェックします。
Index DocumentとError Document欄には先ほどアップロードしたindex.htmlとerror.htmlと入力します。
入力が終わったら「Save」ボタンをクリックします。
![AWS000126_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/73ddc273-d805-2dde-9718-489d831e9f1c.jpeg)

<p>　</p>
###3.2.バケットポリシーを設定する
3.2.1.同じ「Properties」内で「Permissions」をクリックして設定項目を展開し「Add bucket policy」をクリックします。
![AWS000127.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/4fc8b9b6-4287-0193-7649-212df8ca3f6d.jpeg)

<p>　</p>
3.2.2.バケットポリシーエディターが開きます。
ポリシーはJSON形式で書くのですが、AWS公式ツールでAWS Policy Generatorを使うと
自動生成してくれるので便利です。
エディターの左下にある「AWS Policy Generator」リンクをクリックします。
![AWS000144.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/8f1d4398-a95e-90ce-dbc8-25e1c4009149.jpeg)

<p>　</p>
3.2.3.ジェネレーター画面で以下のように入力し「Add Statement」ボタンをクリックします。

<dl>
<dt>Step 1: Select Policy Type</dt><br>
<dd>Select Type of Policy → "S3 Bucket Policy"を選択</dd><br>
<dt>Step 2: Add Statement(s)</dt><br>
<dd>Effect → "Allow"<br>
Principal → "*"<br>
AWS Service → "Amazon S3"を選択<br>
Actions → "GetObject"のみ選択<br>
Amazon Resource Name (ARN) → "arn:aws:s3:::バケット名/*"を入力</dd>
</dl>

![AWS000128.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/36ac161e-efb4-1481-9f67-b9e747eb0c65.jpeg)

<p>　</p>
3.2.4.内容に間違いがなければ、画像のように設定項目が反映されます。
「Generate Policy」ボタンをクリックします。
![AWS000129.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/10ba7bda-f5d7-3930-4aaf-a0a4c3750219.jpeg)

<p>　</p>
3.2.5.バケットポリシーが生成されるので全文をコピーします。
![AWS000130.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/d4149ad5-ee2b-5830-d5ed-bf3fe560159c.jpeg)

<p>　</p>
3.2.6.コピーしたバケットポリシーをエディターに貼り付けて「Save」ボタンをクリックします。
![AWS000131.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/afb1eb04-9b6f-0307-484f-7d4aaf466b19.jpeg)

<p>　</p>
3.2.7.保存が完了したら「Add bucket policy」となっていたのが「Edit bucket policy」と変わります。
![AWS000131_1.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/7710a223-2a7b-2ad5-dbe2-34782e49d314.jpeg)

##4.S3のwebsite endpointにアクセし、サイトが表示されることを確認する

4.1.Propertiesの「Static Website Hosting」に表示されているEndpointがS3WEBサイトのURLとなります。
クリックして表示されるか確かめましょう。
![AWS000132.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/aefe34cc-06b4-516a-6cdd-286f337c4171.jpeg)

<p>　</p>
4.2.ブラウザのURL欄がエンドポイントのURLと同じになっているかと思います。
![AWS000133.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/484c97a0-c077-3b41-3502-ce3bfb81d987.jpeg)

<p>　</p>
4.3.エンドポイントURLの後ろに存在しないファイル名を打ち込んでみましょう。
エラーファイルの内容が表示されるかと思います。
![AWS000145.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/02e1ca9d-1b56-448c-f0ba-26d577353cac.jpeg)