■ はじめに
https://dk521123.hatenablog.com/entry/2017/12/15/232236
で、 S3 でのリダイレクションを行った。 しかし、SSL通信でのリダイレクションは、 S3 の ウェブサイトエンドポイントが、 SSL 接続をサポートをしていないことから S3単体では行えない
http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff
そこで、AWS Certificate Manager / CloudFront と 組み合わせれば実現可能らしいので、 まずは、CloudFront を調べてみた また、Qwiklabs で「Introduction to Amazon CloudFront」って ハンズオンラボがあるので、試してみるといいかも。
目次
【1】Amazon CloudFront 1)目的 2)料金 【2】用語整理 1)オリジンサーバ (Origin server) 2)エッジサーバ (Edge server) 3)エッジロケーション 【3】CloudFront/ACM/S3でSSL通信でのリダイレクションを行う 【4】Amazon CloudFront を CloudWatch で監視するには
【1】Amazon CloudFront
* キャッシュサーバ * AWSでCDNを実現する
CDN(Content Delivery Network)
* デジタルコンテンツをインターネット上で 大量配信するためのネットワーク
https://www.idcf.jp/words/cdn.html
1)目的
* オリジンサーバーが直接応答するリクエストの数を減らすこと
2)料金
https://aws.amazon.com/jp/cloudfront/pricing/
【2】用語整理
* 関連する用語をまとめる。
1)オリジンサーバ (Origin server)
* 配布元のオリジナルファイルが置かれているサーバ
2)エッジサーバ (Edge server)
* キャッシュ機能をもつサーバ
3)エッジロケーション
* エッジサーバを使った AWS グローバルインフラストラクチャのコンポーネント
【3】CloudFront/ACM/S3でSSL通信でのリダイレクションを行う
前提条件
* お名前ドットコムなどで、ドメイン名を取得していること
手順概要
1)S3のリダイレクションの設定 2)AWS Certificate Manager(ACM)で証明書作成 3)Cloudfrontの設定 4)動作確認
1)S3のリダイレクションの設定
* 以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2017/12/15/232236
2)AWS Certificate Manager(ACM)で証明書作成
https://aws.amazon.com/jp/blogs/news/easier-certificate-validation-using-dns-with-aws-certificate-manager/
を見ながらやるといいかも [1] AWSマネジメントコンソールで、 リージョンを「米国東部(バージニア北部)」に指定する ★超重要★ ... ※1 [2] Certificate Manager画面まで移行し 「今すぐ始める」ボタン押下し、「証明書のリクエスト」ボタン押下 [3] 「ステップ 1:ドメイン名の追加」において、 ドメイン名を入力し「確認とリクエスト」ボタン押下 [4] 「ステップ 2: 確認方法を選択する」において、 「DNS 検証」を選択し、「確認」ボタン押下 [5] 「ステップ 3: リクエストを確認する」において、 内容を確認し、問題なければ「確定とリクエスト」ボタン押下 [6] 「ステップ 4: 検証」において、 「DNS 設定をファイルにエクスポート」リンクを押下して DNS 設定が記載されているCSVファイルをダウンロードし、 ひとまず「続行」ボタン押下 => 「NAME」「TYPE(値はCNAME)」「VALUE」が書いてあるはず => 検証が認証されるまで「検証保留中」が表示されるので、 以降の手順で、これを解決していく [7] [6]でダウンロードしたDNS 設定が 記載されているCSVファイルに記載されている値を DNS設定に反映させる => で、しばらく待つ(10~30分間?結構長い)と、 「検証状態」が「検証保留中」→「成功」になり 状態が「発行済み」になる
【お名前ドットコムで設定されている場合】
=> 以下のURLの画面遷移を参考に「DNSレコード設定を利用する」を選択し、 以下を入力し、設定する
https://www.onamae.com/guide/details.php?g=18
a) TYPE : CSVの「TYPE」の値(「CNAME」) b) ホスト名 : CSVの「NAME」の値 c) TTL : 60-86400(レコード情報の有効時間[秒]。例「3600」) d) VALUE : CSVの「VALUE」の値
※1
証明書作成する際は必ず「米国東部(バージニア北部)」リージョンで * ここを「バージニア」で作成しないと、 項目「SSL Certificate」で「Custom SSL Certificate」が グレーアウトとなり何も選択できなくなる(はまった...)
より抜粋 ~~~~~~~~~~~~ 証明書をリクエストする AWS リージョン (AWS Certificate Manager 用) ビューワーと CloudFront との間で HTTPS を必須にするには、 証明書をリクエストまたはインポートする前に AWS Certificate Manager コンソールで AWS リージョンを 米国東部(バージニア北部) に 変更する必要があります。 ~~~~~~~~~~~~
3)Cloudfrontの設定
2017/12/18現在では英語のみ [1] AWSマネジメントコンソールで、 CloudFront画面を開き、「Create Distribution」ボタン押下 [2] 「Step1: Select delivery method」において、 Webの「Get Started」ボタン押下 [3] 「Step 2:Create distribution」において、以下を入力する 【Origin Settings】 + Origin Domain Name : 静的ウェブサイトホスティングのエンドポイントを指定 ★超重要★ サジェストされる選択肢を選択せず 「【バケット名】.s3-website-【リージョン名】.amazonaws.com」を入力 + Restrict Bucket Access : Yes + Origin Access Identity : Create a New Identity + Create Read Permissions on Bucket : Yes, Update Bucket Policy 【Default Cache Behavior Settings】 + Viewer Protocol Policy : Redirect HTTP to HTTPS 【Distribution Settings】 + Alternate Domain Names : リダイレクト先のホスト名を入力する + SSL Certificate : Custom SSL Certificat => Certificate Managerで[1] 作成した証明書を選択する + Default Root Object : index.html ※ ログが必要なら「Logging : On」でもいい [4] 「Create Distribution」ボタン押下 => 「Status」(状態)が「In Progress」(進行中)で グルグルとアイコンが回っているので、 しばらく待つ(10~30分間?これも結構長い)と「Deployed」になるはず [5] 「Domain Name」を確認し(【文字列】.cloudfront.net)DNS設定を行う 【お名前ドットコムで設定されている場合】 => [1-7]と同じ画面でDNSの設定をおこなう a) TYPE : 「CNAME」 b) ホスト名 : 「Domain Name」の値(【文字列】.cloudfront.net) c) TTL : 60-86400(レコード情報の有効時間[秒]。例「300」) d) VALUE : ホスト名
4)動作確認
* ブラウザを開き、SSL(https://xxxxx.com)で、 リダイレクトできるか確認する
【4】Amazon CloudFront を CloudWatch で監視するには
http://aws.typepad.com/aws_japan/2014/11/cloudfront-up-trends-metrics-stats.html
http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/monitoring-using-cloudwatch.html
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/cf-metricscollected.html
[1] AWSマネジメントコンソールでログインし、CloudFront画面を開く [2] 右側のナビゲーションペインで、[Monitoring and Alarms]を選択 [3] 「Alarms」を開き、「Create Alarm」ボタン押下 [4] Metric で監視対象を選び、閾値を設定する Metric(メトリックス) a) Requests : リクエスト回数。 b) BytesDownloaded : ダウンロードされたバイト数。 c) BytesUploaded : CloudFront を通じてオリジンにアップロードされたバイト数。 d) TotalErrorRate : 全リクエスト中 4xx あるいは 5xx であるパーセンテージ。 c) 4xxErrorRate : 全リクエスト中 4xx であるパーセンテージ。 e) 5xxErrorRate : 全リクエスト中 5xx であるパーセンテージ。
【メモ】 S3/CloudFrontのログのCloud Watch Logで管理するには
* S3のイベント + Lambda を使って行う事が可能。方針は以下の通り。 [1] ログを CloudWatch Logsに突っ込む AWS Lambda関数を作成する [2] 対象のS3バケットのプロパティの[Events]からS3イベントを登録し、 [1]のLambdaを指定する LambdaでS3上に出力されたログをCloudWatch Logsに取り込んで監視する
https://moomindani.wordpress.com/2014/12/08/lambda-s3-cwl/
AWS LambdaのファンクションをJavaで書く(S3イベント処理編)
https://qiita.com/Keisuke69/items/23ce6652f212a7418fac
参考文献
https://qiita.com/kooohei/items/b0f099e6b9afa4b261e6
https://kuune.org/text/2016/05/12/static-website-hosting-using-aws-s3-and-cloudfront/
https://qiita.com/jasbulilit/items/73d70a01a5d3b520450f
https://qiita.com/kazuhei/items/9d72b6bbd4d82abe9e9e
https://thetimegraphy.com/set-aws-cloudfront-certificate-manager-route53/
関連記事
Amazon S3 ~ リダイレクト機能 ~
https://dk521123.hatenablog.com/entry/2017/12/15/232236
Amazon API Gateway ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/09/06/131820
ACM ~ SSL証明書無料発行 ~
https://dk521123.hatenablog.com/entry/2018/03/06/234000