[AWS CloudFront] 使ってみる

ユーザへの配信を行うサーバを「エッジサーバ」といい、CloudFrontドメイン(*.cloudfront.net)のようなCloudFrontドメインへアクセスさせることにより、CloudFrontのエッジサーバを経由した配信が行える。

ユーザがCloudFrontにアクセスすると、最寄りのエッジサーバIPが返される。このIPにアクセスして、高速な配信が受けられる。

# CloudFrontの使い方
### ディストリビューション作成
Create Distribution

origin-domain-pathは適当に、s3の laravel8-test.s3.amazonaws.com にします。

その他の項目はデフォルトのまま。項目だけ一応見ておく。
– Origin Settings
Enable Origin Shield, Origin ID, Restrict Bucket Access, Origin Connection Attempts, Origin Connection Timeout, Origin Custom Headers
– Default Cache Behavior Settings
Path Pattern, Viewer Protocol Policy, Allowed HTTP Methods, Field-level Encryption Config, Cached HTTP Methods, Cache and origin request settings, Cache Policy, Origin Request Policy, Smooth Streaming, Restrict Viewer Access, Compress Objects Automatically, Lambda Function Associations, Enable Real-time Logs
– Distribution Settings
Price Class, AWS WAF Web ACL, Alternate Domain Names(CNAMEs), SSL Certificate, Supported HTTP Versions, Default Root Object, Standard Logging, S3 Bucket for Logs, Log Prefix, Cookie Logging, Enable IPv6, Comment, Distribution State

ファイルパスを叩く
d2*.cloudfront.net/hoge.jpg
-> S3と同じ画像が表示される。

sugeeeeeeeeee
画像はキャッシュされる
-> 更新のない画像で、海外からのアクセスが多い場合に高速化を発揮する
-> 逆に、更新が多い場合は、キャッシュした画像は更新されない

なるほど、根本的な使い方を勘違いしてたかも

古いCloudFront APIバージョンの廃止

古いCloudFront APIバージョンの廃止があるらしい。

Full list of versions to be deprecated on June 6, 2019:
2008-06-30, 2009-04-02, 2009-09-09, 2009-12-01, 2010-03-01, 2010-05-01, 2010-06-01, 2010-07-15, 2010-08-01,  2010-11-01, 2012-03-15, 2012-05-05,  2012-07-01, 2013-05-12, 2013-08-26, 2013-09-27, 2013-11-11, 2013-11-22, 2014-01-31, 2014-05-31, 2014-08-31, 2014-10-21,  2014-11-06, 2015-04-17, 2015-07-27, 2015-09-17, 2015-12-22

For more information regarding this deprecation and the actions you should take, refer to our Developer Forum post here:
https://forums.aws.amazon.com/ann.jspa?annID=6697

で、CloudFrontを使っているから、って調べていたんだが、CloudFrontとCloudFront APIは違うんだね。すげー勘違いしていた。。。CloudFront APIは、その名の通り、CloudFrontにAPI接続する仕様。

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.316.0.min.js"></script>
<script>
var config = new AWS.Config({
	accessKeyId : xxxxxxxxxxxxxxx,
	secretAccessKey : xxxxxxxxxxxxxxx,
	region : xxxxxxxxxxxx
});
cloudfront = new AWS.CloudFront(config)
</script>

うーん、なんだかなー

AWS cloudfrontによるアクセスログの解析

AWS cloudfrontによるアクセスログの解析をしたい

まずS3にバケットを作成します
バケット名は適当にaccess-logdataとします。

続いてcloudfrontを開きます

あれ、なんか英語だ。。 

Select a delivery method for your content
Create a web distribution if you want to:なのでWebを選択

Create Distribution
– origin domain name, origin path?
 

なんだこれは。。
viewer protocol policy, allowed http methodなど細かく設定できるようです。
すげーなこれは。

Amazon CloudFrontとは?

AWS CoudFrontは、CDNサービス
DDos軽減のため、Shield, S3のオリジンとしてELB、edgeなどと連携

DDos攻撃とは、複数のコンピュータから標的のサーバに、ネットワークを介した大量の処理要求を送ることでサービスを停止させてしまう攻撃。

— フラッド型
プロトコルを攻略して大量データを送り付けることで、攻撃対象が処理できない状態に持ち込む

— 脆弱性型
サーバやアプリケーションの脆弱性を利用して不正処理を行わせる

F5アタック:httpリクエストはキャッシュを保存せずに情報をリクエストできる

CloudFrontの料金

CloudFrontの料金を見てみましょう。
cloudfront

ページ中段のオンデマンド料金(GB単位)
10TBまで 0.110USD
10TB-50TB 0.105
50-150TB 0.090
150-500TB 0.08
500TB-1024TB 0.060
1PB-5PB 0.050
5TB超 0.04
ん? GB単位ってことは、3GBで3.4USDくらい!? なんかCDNにしては高いような気がする。

HTTPメソッドのリクエスト料金 1万件あたり0.060USD
100万リクエストで6ドル? 100万リクエストなんて、直ぐに行くでしょうから、これもそこそこ高いような。。

専用IPカスタムSSL 毎月600ドル
SSL証明書だと、ものによるが、1年で数万もかからないのに、謎に高いな。
CRSなんて簡単につくれるのに、いやーなビジネスのにおいがしますね。

オリジンサーバーからCloudFrontへオリジンフェッチ
エッジロケーションへのデータ転送が無料? 

Webソケットは無料
インターネットでは、TCP/IPと呼ぶ通信プロトコルを使用するが、そのTCP/IPを利用するには特別な出入り口が必要なる。その出入口がソケット
電話番号や郵便のようなイメージ

ソケット通信を使用すると、HTTPよりも下を使用することができる。
なんか、Cloudfrontとは別の話になってしまいましたね。