AWSを使ったWebサーバーの最もお手軽な構築（S3静的ウェブホスティング）【2024年2月】

AWSのS3というストレージを使ってWebサイトをホスティングさせる際の最小設定について手順をまとめています。
EC2等の仮想サーバーでWebサーバを構築するより手早く構築することが出来ます。Cloudfrontとの連携や独自ドメイン・SSL/TLS対応へ拡張することもできるので、とても有力な方法だと思います。
WebサーバーをLinuxで構築するのではなく、AWSのS3というストレージサービスを使ってWebサーバー機能を追加することで実現する方法なのですが、AWSとしても力を入れている使い方となっています。
## マネジメントコンソールからS3を選択肢
![スクリーンショット 2024-02-17 103107.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/cdc9936c-0464-d98b-80eb-260a86cd1702.png)

## S3バケットを作成
S3バケットはAWSグローバルでユニークである必要があるので被らない名前としてください。このハンズオンではs3webstatichostingとしていますが、私が使っているので利用できません。リージョンは任意で大丈夫です。海外に作りたければそれでもOK、ここでは東京リージョンとしています。
![スクリーンショット 2024-02-17 103659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/c972037a-4231-2388-59cd-4cb805eaf9ef.png)

パブリックアクセスのブロックをOFFとします。
![スクリーンショット 2024-02-17 103902.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/97a9546e-30bc-a0ff-e26d-dbb43510506c.png)

その他はデフォルト設定でバケットを作成します。
![スクリーンショット 2024-02-17 103956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/827853ae-08f2-fcd8-e811-7275f47dde9d.png)

## Webホスティングの設定
作成したバケットに対してWebホスティングの設定をします。作成してバケットを選択して、プロパティを選ぶと一番下に設定メニューがあります。
![スクリーンショット 2024-02-17 104905.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/22891e06-3d8c-0949-84e1-dbf5dd97f973.png)
![スクリーンショット 2024-02-17 105000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/deeda656-622a-2233-5069-f1b60635a7b4.png)
![スクリーンショット 2024-02-17 105044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/8fc026e0-9918-a7a7-0a48-9040b74829bd.png)

インデックスドキュメントを指定して変更を保存します。ここは入力しなくても動きますが、ドメインだけでアクセスした際に、デフォルトで表示されるファイルとなるので、index.htmlと指定するのが一般的です。
![スクリーンショット 2024-02-17 105129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/ecf2b9c4-7eeb-4ff2-68da-2ea933442c90.png)

## HTMLのアップロード
バケットにHTMLファイルをアップロード
![スクリーンショット 2024-02-17 105340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/3589bc91-5d56-20b3-1dc1-39e4cfd5cb8d.png)
![スクリーンショット 2024-02-17 105434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/b5ec4bc9-a84e-0365-7c7f-319bd7145382.png)

バケットのプロパティの静的ウェブサイトホスティング記載のリンクでアクセスを試みます。
![スクリーンショット 2024-02-17 110536.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/52cc585d-ac10-bed9-998f-1cfbb150b6c6.png)

残念ながら、パブリックアクセスのブロックを解除しただけの状態だとバケットが公開されていません。次のバケットポリシの設定に進んでください。
![スクリーンショット 2024-02-17 110040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/3204d165-468d-14bb-8442-34aaa4bf6764.png)

## バケットポリシの設定
バケットのアクセス許可の中からバケットポリシの編集へ進みます。
![スクリーンショット 2024-02-17 105822.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/080e8db1-92ee-f02d-49e5-cfbf87093813.png)

json形式のバケットポリシを設定します。
![スクリーンショット 2024-02-17 111154.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/646e0777-6e8e-5957-08cf-a7bf05d3f48f.png)
s3webstatichostingの部分は作ったバケットの名前に変更してください。
対象バケットに対するパブリックアクセスを許可する設定をしています。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::s3webstatichosting/*"
        }
    ]
}
```
## 表示確認
表示確認をすると公開できていることが分かります。
![スクリーンショット 2024-02-17 110536.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/a362fde7-da37-d7f6-821f-5c28e8640fb5.png)
![スクリーンショット 2024-02-17 111949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/c96cd59b-7fff-085a-d00d-de3b1948cfcf.png)

HTMLファイルだけでなく画像やjavascriptの公開も可能です。また、ファイル毎にURLを作ってくれるのでそこからのアクセスの場合はSST/TLSが適用されています。
![スクリーンショット 2024-02-17 112308.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/f031c576-2a47-bde3-2cf2-67d8359aa24e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494198/d2462014-c27d-2b81-4d01-9b6e9bd03338.png)

## S3ウェブホスティングの料金と可用性
ここまでの対応でAWS発生する料金はS3のデータ容量課金とアクセスされた場合のデータ転送量課金です。50TBまで月3円程度、10TB/月を転送して15円ぐらいなので価格破壊です。レンタルサーバーでシンプルなHPをホストしている理由が分からない。病みつきになります。

https://aws.amazon.com/jp/s3/pricing/

S3 標準 - 頻繁にアクセスするデータに一般的に使用される、あらゆるタイプのデータの汎用ストレージ
最初の 50 TB/月	0.025USD/GB

Amazon S3 からインターネットへのデータ転送送信 (アウト)
最初の 10 TB/月	0.114USD/GB

制約としては、サーバーサイドスクリプト（PHPやRubyなど）が使えないことぐらい。S3はAWSが冗長構成を多重に取ってくれているので、99.999999999%の可用性があります。

## 今後
ここから、CloudfrontというCDNサービスを組み合わせて、独自ドメイン・SSL/TLSを適用すると更に便利になるので、今後、記事を続けていく予定です。