#はじめに
S3とはSimple Storage Serviceの略で、その名の通りファイルをアップロードして保存することができるストレージサービスです。
しかしS3は単なるストレージサービスではなく、HTMLファイルをアップロードして簡単なWEBページを作成することができます。
#簡単な用語の説明
・バケット……オブジェクトを格納するためのコンテナのこと。いわゆる頂点となるフォルダ。
・オブジェクト……S3バケットに格納されるデータのこと。ファイルなど。
#用意するもの
次のHTMLファイル
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
This is Test Page!
</body>
</html>
#手順
S3のコンソールを開きます。バケットを作成
をクリックします。
バケット名はグローバルに一意である必要があります。つまり他のどんなS3バケットと名前が被ってはいけません。
リージョンはアジアパシフィック(東京)
を選択します。
今回は外部に向けてWEBページを公開したいので「パブリックアクセスのブロック」はオフにします。
他の設定はデフォルトのままでバケットを作成します。
バケットが作成されたのでバケットを開きます。
オブジェクトをアップロードします。
ファイルを追加
で用意したindex.htmlをアップロードします。
アップロードが成功しました。
バケットのプロパティを開きます。
下へスクロールして静的ウェブサイトホスティングを編集します。
静的ウェブサイトホスティングを有効にします。
インデックスドキュメントは「index.html」とします。
変更の保存
をクリックします
これだけではまだブラウザから目的のページにアクセスできません。
試しにオブジェクトのURLからアクセスしてみます。
このようなエラーが返されます。これはS3バケットの権限が足りていないため生じるエラーです。
バケットのアクセス許可
を開きます。
下へスクロールし、バケットポリシーを編集します。
画像のようにポリシーを記述します。
このJSONテキストは公式ドキュメントから参照可能です。
xxxxxxxx
の部分がバケット名です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::xxxxxxxx/*"
]
}
]
}
各項目を簡単に見て行きましょう。
Version
は「ポリシーを処理するために使用される言語構文ルール」を指定します。2012-10-17
が現行バージョンです。
Statement
はポリシーの主要な要素です。
Sid
はステートメントIDの略で、ポリシーの任意の識別子です。
Effect
はステートメントの結果を許可するか拒否するかを指定します。許可する場合はAllow
、拒否する場合はDeny
です。
Principal
は「リソースへのアクセスを許可または拒否するユーザー、アカウント、サービス」などを指定します。*
はワイルドカードで、誰でもアクセスできることを意味します。
Action
は対象(リソース)に対して許可または拒否したいアクションを指定します。GetObject
はS3からオブジェクトを取得できるアクションです。その他アクションはこちら(英語版公式ドキュメント)。
Resource
はバケットやオブジェクトなどのARN(Amazon Resource Name)を指定します。バケットのARNの後ろに/*
と追記してあげることでバケットに格納されているオブジェクトすべてを指定しているわけです。
さて、WEBページを公開する準備は整いました。
オブジェクトURLからページを開いてみましょう。
無事に表示されました。
#参考
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com