S3をWebサーバーにして静的コンテンツを公開する方法を紹介します。
手順
バケットの作成
まずはバケットを作成しましょう。
マネジメントコンソールでS3のページを開きます。
バケットを作成をクリックします。
バケットの名前を入れて、リージョンを選択します。
バケット名は世界中のS3で一意である必要があります。
署名付きURLで公開する場合は、「バケットのブロックパブリックアクセス設定」はデフォルトのすべてブロックで問題ありません。
これでバケット作成は完了です。
HTMLの格納
作成したバケットを選択します。
そして、HTMLファイルをドラッグアンドドロップします。
設定が色々ありますが、画面最下部のアップロードを実行します。
複数ファイルやフォルダーまるごとアップロードすることも可能です。
公開する
署名付きURLのURLはマネジメントコンソールでは作成できず、CLIなどを利用して作成します。
CloudShellを使うと簡単にCLIを実行できます。
実行するコマンドはaws s3 presign
です。
[cloudshell-user@ip-XX-XX-XX-XX ~]$ aws s3 presign s3://website-2721ae93/index.html --expires-in 604800 --region ap-northeast-3
expires
は署名付きURLの有効期限です。(604800を指定すると、一週間有効となります。)
少しだけハマったのですが、CloudShellが東京リージョンで実行されてて、S3のバケットが大阪リージョンの場合、明示的に--region ap-northeast-3
をつけないと、無効な署名付きURLが生成されます。(生成は成功しますが、アクセスするとAuthorizationQueryParametersError
というエラーとなります)
発行された署名付きURLは、クエリパラメータに以下の文字が付与されており、コレが適切に設定されている場合のみ、ファイルにアクセスができるという仕組みです。
X-Amz-Algorithm=XXXXXXXXXX
X-Amz-Credential=XXXXXXXXXX
X-Amz-Date=XXXXXXXXXX
X-Amz-Expires=XXXXXXXXXX
X-Amz-SignedHeaders=XXXXXXXXXX
X-Amz-Security-Token=XXXXXXXXXX
X-Amz-Signature=XXXXXXXXXX