LoginSignup
4
2

More than 3 years have passed since last update.

AWS初心者(一ヶ月)がサーバレス開発 ~ S3 & Cloud Front編 ~

Last updated at Posted at 2021-03-05

AWS を触り始めて一ヶ月の人間がサーバレス開発します。

経緯

社内で「 AWS の資格の勉強するんだったら、コレ作ってみてよ」と、渡されたモノがこちら。

capture_000020.png
capture_000021.png

ふんふん、なるほど、わからん。
仕様自体はシンプルなんだけど、AWS のサービスとかわからんちん。

「で、過程を Qiita に投稿してもらうから」

脳内作戦会議

AWS を触り始めて一ヶ月の僕には荷が重いわけで。
幸いなことに、サービスは指定されているわけで。
大雑把に、フロント側、バック側、その他の3つに分けて進めれば良いんじゃないかと思うに至ったわけで。

capture_000022.png
  • 作業a : S3 & CloudFront (本記事)
  • 作業b : API Gateway & Lambda & DynamoDB
  • 作業c : CloudWatch と サービス間の接続周り

S3 & CloudFront

やりたいことはコレだ。

  • 紙芝居でオッケーな HTML を S3 に配置
  • S3 に配置した HTML を CloudFront 経由で公開

紙芝居な HTML をこんな感じで作成してみたりして。

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>抽選サイト</title>
    <link rel="icon" href="./favicon.ico">
    <link rel='stylesheet' href='./css/style.css'>
</head>

<body>
    <div class="main">
        <div class="header"> 
            <img src="./logo.png">
        </div>
        <div class="content">
            <h1>マスク抽選販売のお知らせ</h1>
            <br />
            <h3>抽選応募方法のご案内</h3>
            <br />
            <p>応募サイトにて、お名前/メールアドレス/電話番号をご入力ください。</p>
            <br />
            <button type="button" onclick="location.href='./entry.html'" class="btn-square">応募サイトはこちら</a>
        </div>
    </div>
</body>

</html>

S3 で静的ウェブサイトホスティング

まず、S3 のみで静的ウェブサイトホスティングってのをやってみる。
やってみる、と言っても公式のハンズオンとチュートリアルをトレースするだけなんだけど。

キモの静的ウェブサイトホスティングの設定は枠で囲った3箇所だけ。

static-web-hosting.png

設定が終わると静的ウェブサイトホスティングのエリアが次のようになる。

static-web-hosting2.png

表示されている URL をクリックして
capture_000002_mask.png
ぎゃー、でた。
念の為、存在しない URL を叩いてみる。
capture_000005_mask.png
静的ウェブサイトホスティングで設定したエラーページを表示してくれるのね。
メッセージが妥当でないことは目を伏せるとして。

自前で Apache をこねくり回していた若き日のソレは遠い過去ですな。

CloudFront 経由でアクセス

公式のハンズオンとチュートリアルのトレースに勤しむ。

設定はというと枠で囲った4箇所のみ。

cf_create.png

ほどなくCloudFront と S3 の紐付けが完了。

cf_created.png

Domain Name にある URL を叩くと
capture_000004_mask.png
あっさりと、でた。
ところが存在しない URL を叩くと予想外の XML 形式のレスポンスが目に映る。
capture_000008_mask.png
CloudFront 側でエラーレスポンス動作を設定しておかないとコレらしい。
HTTP エラーコードが 404 じゃなくて 403 なのが引っかかるけど。
Web の集合知によれば、S3 と CloudFront はこういうものらしい。
理解が追いつかないので思考停止気味に CloudFront の Error Pages の設定を開いて、

capture_000011.png

静的なサイトだから 403 と 404 で十分だろう、と設定を追加してみると、
capture_000009.png
いえす、でた。
ふんふん、でも、この時点では S3 への直接アクセスも可能なのよね。
CloudFront 経由でのみアクセスできるようにしたいのよね。

OAI による制限

OAI(Origin Access Identity)というのがあるらしい。
CloudFront で OAI を設定すると、S3 へのアクセスを CloudFront 経由のみに制限できるらしい。
らしいのだが、実は前段で OAI は既に設定済みなわけで。
らしいのだが、S3 に直接アクセスもできちゃっているわけで。
理解が追いつかないまま現実逃避しようとしていたら、OAI の設定に関する公式の資料中にこんな記述があったわけで。

注: この設定では、バケットで静的ウェブサイトホスティングを有効にする必要はありません。この設定では、静的ウェブサイトホスティング機能のウェブサイトエンドポイントではなく、バケットの REST API エンドポイントを使用します。

つまり、静的ウェブサイトホスティングは不要だったわけで。

ところで、S3 で静的ウェブサイトホスティングを有効にすると「ウェブサイトエンドポイント」ってのが次の形式で作られる。

  • s3-website ダッシュ (-) リージョン ‐ http://bucket-name.s3-website-Region.amazonaws.com
  • s3-website ドット (.) リージョン ‐ http://bucket-name.s3-website.Region.amazonaws.com

いま、S3 への直接アクセスに利用しているのは、この URL だ。
理解が追いついた。
S3 で静的ウェブサイトホスティングを無効化すれば、この URL は使えなくなるはず。

s3.console.aws.amazon.com_s3_home_region=ap-northeast-1.png

使えなくなったはずの URL を叩いてみると、

capture_000014.png

おーいえす。

こっちは 404 だな。

ということで今回の目的は達した。

株式会社メソドロジック
三嶋 圭 @k-mishima

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2