ALB設定的memo
CLB vs ALB
一個比較新一個比較舊 XD
目前比較能搜尋到的都是CLB/NLB的設定
ALB官方文件比較多,不過我還是會搞混就跑去問了Support
簡單來說
1 | ALB做Redirect的部分會直接在前面ELB的機器上處理 |
1 | mulitsite domain也是直接對應好domain |
剩下功能請參閱官方網站…
轉換ElasticIP to ALB
原先設定
使用直通Elastic IP + domain (HTTP) / Let’s Encrypt (HTTPS)
Nginx強制Redirect Https1
2
3if ($host = api.com.tw) {
return 301 https://$host$request_uri;
}
設定ALB
直接設定HTTPS (443 port) Listener
並掛上先設定好的AWS Certificate
e.g.
1 | api.com.tw |
然後在ALB 設定http redict to https
http 80 to 443 Listener
如果是用CLB的話要從nginx設
如何在 ELB 中的 Classic Load Balancer 上将 HTTP 流量重定向到 HTTPS
1 | server { |
調整NGINX Vhost設定
所以要無痛轉換現有環境設定至ALB,照前面的設定完成之後
拿掉Nginx強制Redirect Https1
2
3if ($host = api.com.tw) {
return 301 https://$host$request_uri;
}
然後更換domain DNS,change domain IP to CNAME(約略1~3hr)
轉換中間影響不大。
設定ELB Log to S3 Bucket
基本上參照官方文件做就可以了 XD
Access Logs for Your Application Load Balancer
記得設定prefix,不設定也可以但是會出現奇怪route(這是support幫忙測試的)
ALB的設定在
Basic Configuration -> Attributes->Edit Attributes -> Access logs -> Enable
e.g.
api-log/folder
api-log是s3 bucket name
不過官方的policy跟我後來用的有一點不同
582318560864
是Tokyo區的Elastic Load Balancing Account ID
這在官方文件裡面有說明
1 | { |
使用GoAccess分析ELB LOG
把要抓LOG回來的那台機器掛IAMrole,給予特定S3 bucket存取權限
用aws cli sync 到local
1 | aws s3 sync s3://mybucket s3://mybucket2 |
- 使用gunzip解壓全部
e.g.
1 | gunzip 12345678_elasticloadbalancing_ap-northeast-1_app.osmLoadBalancer* |
- 使用goaccess 分析log
goaccess的似乎只有CLB的格式(不確定)
所以就在github找到了ALB的格式解法
Amazon Application Load Balancer (alb) access log format
e.g.
1 | goaccess 12345678* --log-format='%^ %dT%t.%^ %v %h:%^ %^ %T %^ %^ %s %^ %b %^ "%r" "%u" %^' --date-format='%Y-%m-%d' --time-format=%T |
或是
1 | goaccess access.log --log-format='%^ %dT%t.%^ %v %h:%^ %^ %T %^ %^ %s %^ %b %^ "%r" "%u" %^' --date-format='%Y-%m-%d' --time-format=%T |
- 其他方法
當然用s3fs直接mount也是一個解法,就不用花費local的空間
但是個人很討厭s3fs :p
- 一行搞定法
1 | aws s3 sync s3://bucketName/prefix/AWSLogs/AWS數字Account/elasticloadbalancing/ap-northeast-1/2019/05/07 /home/ec2-user/你的位置 && gunzip 檔名* && cat *.log >access.log && goaccess access.log --log-format='%^ %dT%t.%^ %v %h:%^ %^ %T %^ %^ %s %^ %b %^ "%r" "%u" %^' --date-format='%Y-%m-%d' --time-format=%T |
Reference
如何在 ELB 中的 Classic Load Balancer 上将 HTTP 流量重定向到 HTTPS
Access Logs for Your Application Load Balancer
Amazon Application Load Balancer (alb) access log format
還有強大的AWS Support工程師。