0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】 Route53+ACM+CloudFront+S3で静的Webサイトの構築

Last updated at Posted at 2024-05-18

今回の意義

AWSへの知見を深める
代表的なサービスに触れるため

使用サービス

【AWS】
・AWS Certificate Manager
・Amazon CloudFront
・Amazon S3
・Amazon Route53
・AWS CLI(VSCODE)

参考資料

構成図

image.png

S3の設定

・バケットの作成
image.png

・バケット名を指定
image.png

image.png

パブリックアクセス設定のチェックを外す。
※S3バケットへの直接アクセスではなく、CloudFront経由の独自ドメインでアクセスするように設定するため後ほどONにはするが、この段階ではOFFにする。

image.png

その他はデフォルト設定のままバケットを作成
image.png

バケット名を押下
image.png

プロパティ→静的ウェブサイトホスティング→編集
image.png

有効・indexhtmlを追加
image.png

次にアクセス許可→バケットポリシー
※先ほどパブリックアクセスを許可するようにチェックを外したが、ポリシーを設定しないとパブリックアクセスは許可されない。
image.png
以下を記述
Getオブジェクト(バケット内の情報は誰でも取得可能)を許可

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Sid": "PublicReadGetObject",
          "Effect": "Allow",
          "Principal": "*",
          "Action": [
              "s3:GetObject"
          ],
          "Resource": [
              "arn:aws:s3:::test26.co.jp/*"
          ]
      }
  ]
}

次にファイルの追加を実行
以下ページに戻り、アップロードを押下
image.png

事前に準備したindex.htmlファイルを追加
image.png

※プロパティ→静的ウェブサイトホスティングに行くとURLがあるのでそこで正しくつながるかを確認
image.png
image.png

ここまでの構成図

image.png

次にVSCODE(AWS CLIインストール済み)でファイルを編集し、デプロイする

先ほどのindex.htmlファイルをVSCODE上で開く
image.png

これを以下のように変更
image.png

実行すると以下のように
image.png

ターミナルへ行き、ファイルのあるディレクトリへ移動しローカルからS3へ保存

aws s3 cp index.html s3://test26.co.jp

先ほどと同様にS3のウェブサイトホスティングのURLから開いても下記のようになっていることを確認
image.png

ここまでの構成

image.png
※Cloud9→vscode(AWS CLIインストール済み)

ファイルの作成

cssとimageファイルをそれぞれ作成
image.png

AWSファイルにfavicon(ICOファイル)、CSSにはソースファイル(空),イメージには画像ファイルを挿入(今回はLamdbaのマーク)。
image.png

そしてindex.htmlファイルを再度開き、下記のように変更

<!DOCTYPE html>

<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>初めてのAWS</title>
  <link rel="icon" href="favicon.ico">
  <link rel="stylesheet" href="css/styles.css">
</head>
<body>
  <div>
  </div class="icon">
    <img src="image/lambda.png">
      このページではAWSについて学んだことを書いていきます。
    </div>
  </div>
</body>
</html>

先ほどのファイルらを使用するように明記

実行結果としては以下のようになる
image.png

ちなみにCSSファイルに以下を書き込むと

body {
    width: 300px;
    margin-left: auto;
    margin-right: auto;
}

配置場所が変わる
image.png

これらのファイルをS3にコピーするためにファイルのあるディレクトリへ移動し、ターミナルで下記コマンドを実施(.で全ファイル。--recursiveで再帰的に)

aws s3 cp . s3://test26.co.jp --recursive

S3に追加されていることを確認
image.png

Cloudfrontの設置

image.png

オリジン名を上記のURLにして作成
image.png
image.png
こちらのドメイン名で検索すると開けることを確認
image.png

キャッシュされていることを確認するためF12でdevelopertoolを開く
image.png
ネットワークを押下
image.png
サイトのリロードをするとファイルが表示される
image.png
lamdbaファイルのx-cacheにcloudfrontがある
image.png
この状態でWindowsなのでForce Reload を実行
Windowsなのでshift + F5
※Force Reload
Force Reload は Super Reload などとも呼ばれ、 Shift + Reload や DevTools の "Disable Cache" 相当の機能を有効にすると発生するものだ。
したがって、一般ユーザによる実行ではなく、開発者が実行するという意図で実装されている。

再度確認するとCloudfront(エッジ)からcacheされていることを確認
なのでわざわざオリジン(S3)から取りに行かなくて良いということを確認
image.png

Route53で独自ドメインを取得しS3にHTTPアクセスをする

image.png

image.png

※以前作成していたため作成方法は省略
image.png

登録済みのドメイン名でホストゾーンを作成し、レコード作成を押下
と、ここで、、、
ドメイン名とS3バケット名が一致していないとエンドポイントと紐づけできないことに気づく。。。
S3をドメイン名と同じにして再度作成。(バケット、ドメイン名は以降伏せます。)

なので改めてS3を作成してレコード設定(エンドポイントとの紐づけ)を完了し下記のように
image.png

しかし、ドメイン名が停止しており、時間がかかるため以下よりハンズオン動画の内容を抜粋していく。

本来はドメイン名で検索をかけると同様の画面が表示される
image.png

最終的な構成図

image.png
ユーザーが直接S3バケットを除くことを防ぎ、HTTPS経由でS3バケットへアクセスできるようにACMで証明書を発行する。

ACMを開きドメイン名を入力

image.png

続いてドメインの検証をする。方法は任意
image.png

※以下はDNSでの検証方法でCNAMEを作成し検証する
image.png

証明が完了したらCloudFrontへ戻る
image.png

image.png

HTTPをHTTPSにリダイレクトするように設定を変更
image.png

次にGenelalで編集
image.png

ここではCNAMEの変更(先ほど追加したもの)とカスタム証明書を選択
image.png

そしてRoute53のホストゾーン編集で先ほどS3エンドポイントを指定していたAレコードのものをCloudFrontディストリビューションを選択
image.png

これでHTTPSでの通信を確認できる!!

S3への外からのアクセスを制御

S3へ戻りバケットポリシーを変更,削除する
image.png
image.png

ウェブサイトホスティングも無効化する
image.png

続いてCloudFrontへ戻りオリジンの編集
image.png
オリジンドメイン名の再入力等
image.png

以降、S3の静的ホスティングで使用していたURLではアクセス不可になる。
S3のバケットポリシーを見てもCloudFront経由でのみアクセス可能な記述に変更されている
image.png

学習点

S3バケット名とドメイン名

S3バケットとドメイン名が一致していないとS3への紐づけができないということを認識できた。
Route53以外で作成したドメイン名だとどういう設定をする必要があるかは要勉強。。

S3の仕組み

S3への理解は資格勉強時にあったが、どういった形でウェブサイトとして機能するのかを認識できる良い機会となった。またAWS CLIを使用することでバケット間のコピーなども出来ることを認識でき、効率よく作業出来る方法も学ぶこともできた。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?