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とは別の話になってしまいましたね。

aws athenaの使い方

athenaとは: S3でのデータの直接分析を簡易化

AWSのヘッダから[サービス]を押下すると、AWSのサービス一覧が表示されます。
athenaは分析の下にあります。

以下のように記載があります。petabyteは凄いですね。ペタバイトは1024テラバイト、1兆バイトです。
>Amazon Athena is a fast, cost-effective, interactive query service that makes it easy to analyze petabytes of data in S3 with no data warehouses or clusters to manage.

get startedを押下します。
To query the ELB log files, you need to define a corresponding table in Athena.
ELBに対応するテーブルを定義する必要がある。

database, table nameは適当。
Location of input data setにs3のURLを入れる
s3://athena-examples-us-east-1/path/to/data/

CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
  `Date` DATE,
  Time STRING,
  Location STRING,
  Bytes INT,
  RequestIP STRING,
  Method STRING,
  Host STRING,
  Uri STRING,
  Status INT,
  Referrer STRING,
  os STRING,
  Browser STRING,
  BrowserVersion STRING
  ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
  WITH SERDEPROPERTIES (
  "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$"
  ) LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';

ELBのログって書いてあるけど、table nameはcloudfrontだ。何故だ??

エンジニアがamazon欲しい物リストを考えるとこうなる

欲しい物リスト
http://amzn.asia/0W51meS

基本物欲ないからなーーーーー 特に欲しい物ない。。
なんだろーほんとにないな。 

1位:macbook pro 123,984円 i5, 256GBくらいあれば良し。
欲しい。

2位:コーヒーメーカー 18,800円
うーん、まずまず欲しいかも。

他は。。。

そんなものかなー
絞りだしても出てこないなー
むしろ、なんか捨てたいなー。。

うーん、ないぞ。むしろ、財布はノーブランドにグレードダウンしたい。
しかし、やすっぽい財布もなかなかないなー

ということで、結論、欲しい物リストはそんなにない。

こんな感じ http://amzn.asia/0W51meS

Amazon Athena(アテナ)

即時にデータのクエリを実行。数秒で結果取得、料金は実行したクエリに対してのみ。
https://aws.amazon.com/jp/athena/

まず読み方がわからない
Athenaでアテナと読む。アセナと間違える。。

aws athenaのチュートリアル
step1 データベースを作成
step2 テーブルを作成
step3 データをクエリする
athenaでcloudfront_logsテーブルを作成したら、このテーブルに対してクエリを実行して、athenaで結果を確認できる

ん? step3が重要か? データベース作成、テーブル作成は普通のRDB操作と何もかわらんぞ。
では、実際にクエリを書いていきましょう。

Git ソースツリー(source tree)とは

Git操作はコマンドラインではなかなか作業が見にくいのですが、Git ソースツリーでは、今誰が、どのファイルを、どのように編集しているかを視覚化して見えやすいようにすることができます。

細かい操作はコマンドの方が早い などのデメリットもあるようです。

半角スペースの自動削除

<!DOCTYPE html>
<html lang="ja">
<head>
	 <meta charset="UTF-8">
	 <title>space</title>
</head>
<body>
	<div> 前後に半角スペース </div>
	<p> pタグ前後に半角スペース </p>
	<table>
		<tr>
			<td> 前後に半角スペース </td>
		</tr>
		<tr>
			<td> 前後に半角スペース </td>
		</tr>
	</table>
</body>
</html>

ん? 文頭の半角スペースは消えるが文末の半角スペースは残ってる?
なに? 期待値とちょっと違うな。。

Google FormのURLを他のユーザーに送る

割と簡単にできます。
(1)Google Formをつくる
(2)画面右上の「送信」ボタンをクリックします。

(3)ポップアップが表示されたら、メールアイコンの横のリンクアイコンをクリックします

(4)リンクURLが表示されます

ElasticIPとPublicIP

プライベートIPv4は、インターネットから到達できないIP
プライベートIPv4は、同じネットワーク内のインスタンス間の通信に使用

RFC1918

パブリックIPアドレス インターネットから到達可能なIPv4アドレス
インスタンスとインターネット間で通信するにはパブリックアドレスを使用

Elastic IPアドレス(IPv4) : アカウントに割り当てることができるパブリックIPv4アドレス
IPv6アドレス:IPv6 CIDRブロックをVPCと関連付けることができる

プライベートIPは、要するに1つのインスタンスから別のインスタンスに接続する際に使用するIPアドレス

プライベートIPとパブリックIPはサーバを再起動すると変わるが、ElasticIPは固定できる。