最近在 Udemy 上學習 DevOps Beginners to Advanced with Projects。在此做一些關於 AWS 使用上的筆記。
Original Application Stack
- Nginx
- Apache
- Tomcat
- RabbitMQ
- Memcache
- Mysql
移轉目標
- EC2
- vm for tomcat, rabbitmq,memcache, mysql
- ELB
- nginx load balancer
- Autoscaling
- automation for vm scaling
- S3/EFS
- shared storage
- route53
- private dns service
目標架構圖
flow of execution
- Create key pairs
- Create security groups
- 此處切為三組:
- LB(取代nginx)
- APP(tomcat)
- Backend(包含rabbitmq, memcache, mysql)
- 此處切為三組:
- Launch instance with user data
- 目前還是半自動化的流程
- 手動建立intance並且於userdata中貼上環境安裝設定的shell
- Update ip to name mapping in route53
- 這邊設定一個內部DNS,讓instance之間的溝通可以用hostname
- Build application from source code
- 這邊仍是半自動化的部分,我們在local端將java的專案build完畢
- Upload to S3 bucket
- 使用aws cli上傳build的java war至APP instance
- Download artifact to Tomcat EC2 instance
- 之前在local端是使用key的方式來連接s3
- 此處instance連接S3練習使用IAM role
- 於IAM建立新的S3 access role
- 於APP instance中加入建立的role
aws s3 ls即可確認是否通過
- Setup ELB with https(cert from amazon certificate manager)
- 建立target group
- 須注意這邊是要通向app的8080port
- 建立LB
- 設定listen HTTP/HTTPS routing 至 target group
- 購買網域後於aws的certificate manager申請ssl cert
- secure listener 選用from ACM,使用剛剛的ssl cert
- 建立target group
- Map ELB endpoint to website name in DNS
- 於DNS提供商(此處是用godaddy),建立CNAME,並轉向AWS LB的domain
- Verify
- DNS的設定通常會需要一點時間
- 可以直接先access LB的domain檢查80有沒有APP出現
- Build autoscaling group for tomcat instance
- autoscaling三個步驟
- AMI
- 此處我們以app作為目標,將當前的app instance create image
- launch template
- 使用剛建立的AMI,security group 與原本的APP相同
- autoscaling group
- attach to existing load balancer
- 選擇load balancer使用的target group
- 設定scaling policy,可以使用CPU用量或是network in/out
- 設定notification
- AMI
- autoscaling三個步驟