一.緣起:
1.從aws小白到漸漸掌握了一些常用服務(wù)的使用吃型,發(fā)現(xiàn)SAP考試對(duì)服務(wù)的考量并不在了解功能和會(huì)使用層面就乓,而是有大量的Best Practice問題烹吵,這相對(duì)于SAA是有很大難度提升的
2.各種的服務(wù)之間到底如何協(xié)同使用才是Best Practice惧眠?--這就得說Well-Architected
二.設(shè)計(jì)原則(5大支柱):
0.原始系統(tǒng)架構(gòu)圖
1.卓越運(yùn)營
如何運(yùn)行才是卓越的,對(duì)于云計(jì)算來說那一定是運(yùn)營即代碼暴拄。按照我個(gè)人的理解一切的運(yùn)營都是可以在System Manager和CouldWatch當(dāng)中來進(jìn)行的漓滔。
1.1給EC2打標(biāo)簽是為了分類管理,在instance頁面中的tag tab可以為實(shí)例添加標(biāo)簽乖篷,如:{Environment:Production,App:Product-Catalog}
1.2資源組是相同標(biāo)簽資源的集合响驴,使用資源組可以對(duì)資源進(jìn)行批量操作。創(chuàng)建資源組使用Resource Groups & Tag Editor
1.3選擇資源組以Tag分類那伐,選擇資源類型為EC2踏施,選擇標(biāo)簽內(nèi)容為{Environment:Production,App:Product-Catalog}后石蔗,會(huì)自動(dòng)篩選出剛剛設(shè)置的兩個(gè)EC2實(shí)例
1.4連接到SSM的EC2要確保安裝了SSM代理罕邀,創(chuàng)建名為wa-lab-ssm-ec2-role的IAM role,選擇兩個(gè)AWS托管的兩個(gè)policy:CloudWatchAgentServerPolicy养距,AmazonSSMManagedInstanceCore诉探。這兩個(gè)policy能夠讓SSM連接到EC2并且在其中運(yùn)行某些命令
1.5將創(chuàng)建的IAM role應(yīng)用到兩個(gè)EC2實(shí)例上,重啟實(shí)例使得IAM role生效
1.6在node management>Inventory中可以檢查到出現(xiàn)兩個(gè)EC2實(shí)例棍厌,代表可以通過SSM鏈接到實(shí)例并且運(yùn)行命令肾胯,如果未出現(xiàn)則需要重啟它們
1.7在node management>Run Command中運(yùn)行AmazonCloudWatchAgent命令竖席,名稱選擇AmazonCloudWatchAgent,目標(biāo)選擇前步驟創(chuàng)建的資源組
1.8在node management>Run Command中運(yùn)行AmazonCloudWatch-ManageAgent命令敬肚,名稱選擇AmazonCloudWatch-ManageAgent毕荐,配置源選SSM,配置位置選wa-cw-config-file-httpd-mariadb艳馒,可選重啟選是
1.9將此json文件存放在SSM的Parameter Stored中
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_name": "messages",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/var/log/httpd/access_log",
"log_group_name": "httpd_access_log",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/var/log/mariadb/wa-db-server.log",
"log_group_name": "db_general_query_log",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/var/log/mariadb/mariadb.log",
"log_group_name": "mariadb_log",
"log_stream_name": "{instance_id}"
}
]
}
}
},
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"disk": {
"measurement": ["used_percent"],
"metrics_collection_interval": 60,
"resources": ["*"]
},
"mem": {
"measurement": ["mem_used_percent"],
"metrics_collection_interval": 60
},
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
}
}
1.10在CloudWatch的Metric中可以查看CWAgent選項(xiàng)卡中兩個(gè)EC2的指標(biāo)都顯示出來了
2.可靠性
提到可靠性憎亚,就不得不說高可用,實(shí)現(xiàn)高可用就要用到分可用區(qū)弄慰,ALB第美,Auto Scaling Group等
2.1將子網(wǎng)添加到第二個(gè)可用區(qū)
2.2使用多可用區(qū)部署RDS
2.3更新SSM parameter
2.4創(chuàng)建ALB和Auto Scaling group的目標(biāo)組
2.5使用SSM>Run Command進(jìn)行數(shù)據(jù)庫遷移,將數(shù)據(jù)庫從EC2實(shí)例遷移到RDS
2.6為EC2實(shí)例創(chuàng)建ASG
3.安全性
安全性是aws中最為看重也是最復(fù)雜的一項(xiàng)方面陆爽,因?yàn)樵诙鄠€(gè)層面實(shí)現(xiàn)安全都會(huì)使用不同的服務(wù)什往,本次主要使用CloudTrial和AWS Config對(duì)系統(tǒng)進(jìn)行監(jiān)控和檢測(cè)提升安全性
3.1啟動(dòng)CloudTrial創(chuàng)建一個(gè)新的trial存儲(chǔ)在S3中
3.2啟動(dòng)Config,選擇記錄此區(qū)域所有資源包括全局資源如IAM等慌闭,創(chuàng)建新的存儲(chǔ)桶别威,如果使用寄存的存儲(chǔ)桶需要另外設(shè)置權(quán)限允許與Config進(jìn)行通信
3.3到此我們?cè)贑loudTrail中獲得了全資源的操作監(jiān)控清單,在Config中獲得了全資源清單驴剔,并存放在了不同的S3 bucket中
3.4修改安全組規(guī)則兔港,分別修改inbound和outbound rule,配置為僅允許數(shù)據(jù)庫實(shí)例的流程與應(yīng)用程序?qū)嵗M(jìn)行流量通信
3.5啟動(dòng)VPC創(chuàng)建ACL編輯出站和入站規(guī)則并關(guān)聯(lián)到公有子網(wǎng)
3.6在CoudTrial中選擇創(chuàng)建的Trial仔拟,打開S3存儲(chǔ)桶衫樊,可以下載Json文件查看日志
3.7在AWS Config的資源清單中可以查看到新加入的ACL已出現(xiàn)在其中
4.性能效率
主要考慮彈性elastic and auto scaling,以及使用cloudWatch來監(jiān)控并指定擴(kuò)展策略
4.1在EC2中選擇ASG并創(chuàng)建動(dòng)態(tài)擴(kuò)展策略為CPU使用率達(dá)到閾值的時(shí)候自動(dòng)擴(kuò)展
4.2在CloudWatch中創(chuàng)建監(jiān)控?cái)?shù)字、圖標(biāo)和警報(bào)分別監(jiān)控EC2實(shí)例的CPU利用率
4.3通過監(jiān)控了解與預(yù)期性能的任何偏差并采取自動(dòng)化操作
4.4驗(yàn)證創(chuàng)建的警報(bào)和策略利花,可以在SSM中使用Run Command的方式來測(cè)試警報(bào)并在CloudWatch中觀察指標(biāo)變化,Command參數(shù)如下
AWS-RunShellScript科侈,
#!/bin/bash
sudo stress --cpu 8 --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1 --timeout 300s
5.成本優(yōu)化
成本是需要能在滿足業(yè)務(wù)需求的基礎(chǔ)上,不算優(yōu)化的炒事,比如通常會(huì)使用Organization整合賬單的功能來共享套餐優(yōu)惠降低整體成本臀栈。本次我們使用Config來建立rule的方式查看資源配置結(jié)果,激活合規(guī)預(yù)防控制達(dá)到整體優(yōu)化成本的目的
5.1啟動(dòng)Config挠乳,選擇特定的資源類型EC2 instance,賦予Config一個(gè)ConfigServiceRole并將其保存在S3存儲(chǔ)桶中
5.2添加role以強(qiáng)制執(zhí)行所需的標(biāo)簽权薯,使用AWS托管的required-tags規(guī)則只針對(duì)于EC2資源
5.3查看創(chuàng)建好的role,發(fā)現(xiàn)其中一個(gè)EC2由于缺少標(biāo)簽被標(biāo)記為了不合規(guī)
5.4返回EC2實(shí)例睡扬,按照config要求打上標(biāo)簽盟蚣,再次確認(rèn)role中的不會(huì)貴標(biāo)簽變?yōu)榱撕弦?guī)
5.5當(dāng)然Config除了進(jìn)行合規(guī)性檢查意外更重要的是可以激活合規(guī)性的預(yù)防控制,使得新建的每個(gè)EC2實(shí)例都是合規(guī)的
以上卖怜,做些實(shí)驗(yàn)的總結(jié)加深對(duì)Well-Architected的理解屎开。