[AWS] Amazon AWS 實戰筆記與心得 - 工程幼稚園

文章推薦指數: 80 %
投票人數:10人

RDS 的操作方式比較原始一點,你在Console 開好一個DB Instance 之後,你必須要先指定哪一個Security Groups 可以連進去,或者是使用CIDR/IP 去指定哪台 ... 雲端正夯,所以說把工作上的事情丟到雲端上面去也是很合理的。

至於為什麼不選種花電信的HiCloud呢?這種事情還是去擲筊會比較準。

別鬧了,沒有競爭力的台灣IDC們 電費是經營IDC的最大成本???搞錯了吧??? HiCloud的頻寬計價現況與對比AmazonAWS的簡要分析 你看完再決定你要不要用HiCloud... WhyAmazon? 跟傳統的Hosting比起來,當然可以自己控管的虛擬主機是比較有彈性的。

那或許你會說,VPS也不錯啊,的確,市面上還是有許多不錯的VPS服務商,在價格上也略顯優勢(AWS是按時計費,而大多VPS則是按月計費,例如C/P值超高的Linode)。

好處是什麼, 五花八門的服務 因為他是Amazon 壞處是什麼, 什麼都要自己來 新的東西太多學不完 其實優缺點應該不會這麼少,不過這種事情其實是見仁見智,我覺得好的地方可能大家不那麼認為。

總之也是,你用了才知道。

使用的服務 最近因為要把工作上的東西全數轉移到AWS上面,雖然之前已經有摸過一陣子,但是對於沒碰過得服務還是苦手了好一段時間。

這裡就當作是筆記可能比較恰當一點(笑 AmazonS3,AmazonEC2 這個應該不用特別說明吧?AmazonS3就是一個地方讓你可以放東西用的(籠統,而AmazonEC2則是提供虛擬主機的地方。

好處是,在同一個區域(Amazon把各種服務依照區域(Region)分割開來,S3與EC2之間互相存取檔案是不收費的。

所以,我們就可以從EC2上面,利用Amazon提供的SDK來將檔案放到S3去作儲存的動作。

而且,這個動作所需要的時間,以目前工作上最大檔案12MB來看,大概不用一秒。

另外附註一提的是,從Flickr,Picasa,Facebook爾等大型網站,利用cURL取得相片檔案(均取最大原始圖檔,透過EC2抓取,再轉存到S3,大概一秒。

Dropbox則例外,從EC2上傳到Dropbox並沒有想像中的快(笑 AmazonRDS 這是Amazon所提供的關聯式資料庫服務,說實在的,他的價格並沒有想像中的便宜。

各位可以去參考AmazonRDS的價目表。

雖然說Amazon也有提供nosql的資料表可用,不過目前實際工作需求,還是以關聯式資料表為主。

RDS的操作方式比較原始一點,你在Console開好一個DBInstance之後,你必須要先指定哪一個SecurityGroups可以連進去,或者是使用CIDR/IP去指定哪台機器可以連線。

當然,所謂的連線就是mysql-u-p-h這種方式。

當然啦,你也可以在你的機器上面放phpMyAdmin來連線就是了。

至於說RDS的效能,這裡有篇有趣的文章可以參考一下, MySQLonAmazonRDSpart1:insertperformance MySQLonAmazonRDSpart2:DeterminingPeakThroughput 或許你會想說,既然我已經有EC2了,那我架在EC2上面就好了嘛,關於這點,這裡也有一系列文章可以參考,我個人是覺得,這種事情沒有必要一定要用在哪裡,端看個人需求。

像我就有弄一台FreeBSD專門跑MySQL這樣 HighavailabilityforMySQLonAmazonEC2-Part1-Intro HighavailabilityforMySQLonAmazonEC2-Part2-Settinguptheinitialinstances HighavailabilityforMySQLonAmazonEC2-Part3-ConfiguringtheHAresources HighavailabilityforMySQLonAmazonEC2-Part4-Theinstancerestartscript HighavailabilityforMySQLonAmazonEC2-Part5-Theinstancemonitoringscript 作者好像還有Part6,7還沒寫,可以持續關注一下! AmazonSES 這是Amazon比較新一點的服務,全名是AmazonSimpleEmailService,這樣說你應該就知道他是作什麼用的了,用來作為廣發大量謎樣廣告信的好工具,這個工具目前還在beta,不過他也beta好一陣子了,不知道什麼時候會正式把beta拿掉。

使用方法其實蠻奇妙的,你要先設定認證過的送件者(VerifiedSenders),然後,可以透過API呼叫,或是經由SES裡面的SMTP的設定,來發送信件。

是的,只能透過API來發送而已喔(啾咪 AmazonRoute53 他就是一個DNS,而且還不算是很便宜的DNS(笑倒,選用他的原因很簡單,速度快,設定方便,而且也是Amazon的一環,而且當設定超過一個數量,價格還會有優惠。

實際應用 這是筆記文!真的!因為人老多忘事,所以一定要寫下來才行。

AmazonEC2建立AMI 以前要用ec2commandlinetool,現在在Console裡面按右鍵就做完了(喂。

我們要建立AMI當然是會有特殊需求的,通常就是所需要的環境建立好之後,再把我們目前的主機(EC2)整台打包成一個私有的AMI來使用。

好處是,當我們同樣的機器有大量需求的時候,我們就只要打開打開打開,佈署佈署佈署,上線上線上線。

當我們沒有用到的時候,就關機關機關機,甚至你要特密內特Terminate掉也可以。

通常AMI有分兩種,一種是S3-backed,另一種是EBS-backed。

以前在作AMI的時候,只能作S3-backed的,所以過程上就相對的複雜很多(比較麻煩一點。

現在Console有改了,可以用滑鼠右鍵在Instance上,點CreateImage(EBSAMI)一鍵搞定,而且還是EBS-backed的呢。

當然,神人Hank也有特別寫文紀錄,強烈推薦! creatingEBS-backedAMIsfromrunninginstances 我昨天就是照著步驟作的啦,但是後來發現右鍵可以一鍵搞定讓我有股淡淡的哀傷。

是的,一鍵搞定他也是照Hank所說的方式去作,一樣會有個snapshot在裡面。

後來我也實作了S3-backedAMI,但是,啟動速度跟EBS-backed不能比啊(遮臉。

雖然我已經不用S3-backedAMI,不過這裡還是簡單紀錄一下, 首先你要有, AccessKeyID SecretAccessKey cert-xxxxxxxxxx.pem pk-xxxxxxxxxxx.pem 最後兩組pem要自己去建立,在SecurityCredentials裡面,X.509Certificates去建立一組。

然後把他下載下來這樣。

然後,就去開一台EC2,把你需要的環境全部建立好之後,然後切去/mnt底下(歐,mirco的機器好像沒有/mnt這個地方,所以你可能需要自己開EBS掛一組Volumes來用,開EBS請注意區域問題,跨區不能讀取喔! 然後呢,你需要把剛剛的pem傳上去(用scp或是sftp隨你,接著,你的環境中需要安裝ec2-api-tools喔! 如果你的Ubuntu找不到ec2-api-tools的話,請加入此PPA ppa:awstools-dev/awstools 網址是, awstoolsdevelopmentteam 建立IMAGE $ec2-bundle-vol-d/mnt/-ccert-xxxxxxxxxx.pem\ -kpk-xxxxxxxxxx.pem-u\ -rx86_64-pMY_AMI 其中-rx86_64是指你的系統是64bit的,如果你是安裝32bit的作業系統,請使用-ri386這樣。

然後在你的AccountActivity可以看到,右上角的WelcomeXXXX底下那一串數字就是了。

傳到S3上面去,請注意區域(Region)的問題!你的EC2如果在美東,你丟上S3就把bucket開在美東,畢竟傳輸不用錢嘛(笑 上傳IMAGE到S3 $ec2-upload-bundle-b\ -mMY_AMI.manifest.xml-a\ -s 傳完之後呢,再去S3找你的manifest網址,大概會長這樣, https://.s3.anazonaws.com/MY_AMI.manifest.xml 但是,當你要去AMIs註冊的時候,他要你提供的卻是長這樣, http://s3.amazonaws.com:80/[____________________] 我當時是填入/MY_AMI.manifest.xml然後就完成了這樣。

AmazonElasticLoadBalancing 他叫做負載均衡(以下簡稱ELB,通常這件事情在實體機器上,我們都自己作,像是利用Nginx的backend/upstream去作掉這樣。

而Amazon所提供的ELB,則是會依照伺服器的健康狀態,來幫你將流量轉向其他的EC2上面去。

當然,你就必須要有一台以上一模一樣的EC2來給他使用,不過,我們沒事當然不會開那麼多機器來用,所以,這件事情有沒有必要見仁見智。

不過! 如果你會使用到自動擴展(AutoScaling)的話,你就得要設定ELB,一來省事,二來他搭配CloudWatch可以有比較彈性的變化。

關於ELB的說明,官方文件非常清楚,圖文並茂,大家可以參考一下, GetStartedwithElasticLoadBalancing 自動擴展服務 剛剛說ELB來搭配CloudWatch作自動擴展,這邊就來說一下。

監控的部份,當我的服務負載過高的時候,需要增加機器來負荷突然增加的流量,所以會需要AmazonCloudWatch來作AutoScaling的觸發動作。

首先你需要下載AutoScalingCommandLineTool還有CludeWatchCommandLineTool來幫你作一些設定。

首先是要建立一個啟動的設定檔(launchconfig $as-create-launch-config\ --image-id\ --instance-type\ --key\ --group\ --monitoring-disabled OK-Createdlaunchconfig 其中要說明一下, 這個設定檔的名字,請自己取 --image-id請用你自己建立的AMI,不然你開一台空機器是沒有用的 --instance-type你這台機器要開多大的Instance --key這很重要,如果你要使用SSH連線的話 --group這就是SecurityGroups啦,一些連接埠設定的那些東西 --monitoring-disabled就是我開Instance把monitoring關掉的意思 然後我們可以用指令來查一下, $as-describe-launch-configs LAUNCH-CONFIGmy_scalingami-0009527m1.small 好了之後呢,我們要建立一下自動擴展的群組, $as-create-auto-scaling-group\ --launch-configuration\ --availability-zones\ --min-size1\ --max-size5\ --load-balancersmy_ELB OK-CreatedAutoScalingGroup 就是群組名稱,自己取 --launch-configuration這是剛剛你作的設定檔 --availability-zones你的Instance要在哪些地區啟動 --min-size最少開幾台 --max-size最多開幾台 --load-balancers指定你的ELB 然後,在設定自動擴展的條件, $as-put-scaling-policy\ --auto-scaling-group\ --adjustment=1\ --typeChangeInCapacity\ --cooldown300 你的條件名稱,自己取 --auto-scaling-group剛剛設定的群組名稱 --adjustment當觸發這個條件的時候,要啟動幾台Instance --type這裡的設定跟你的AmazonCloudWatch設定有關 --cooldown條件動作之間的冷卻時間(笑,單位是秒 上述的指令呢,會給你這些東西, arn:aws:autoscaling:ap-northeast-1:889000449203:scalingPolicy:7c3658e4-cf5c-4275-8be9-d52802317a0b:autoScalingGroupName/my_scaling_group:policyName/my_scaling_policy 注意!當你做完as-put-scaling-policy的時候,你的EC2就會自動啟動機器,數量是你剛剛指定的min-size,而使用的AMI也是你指定的那一個。

當然,我們要搭配CloudWatch來作,所以, $mon-put-metric-alarmmyHighCPUAlarm\ --comparison-operatorGreaterThanThreshold\ --evaluation-periods1\ --metric-nameCPUUtilization\ --namespace"AWS/EC2"\ --period600\ --statisticAverage\ --threshold60\ --alarm-actions<.....>\ --dimensions"AutoScalingGroupName=" OK-CreatedAlarm 關於mon-put-metric-alarm的話,大抵上是這樣, --comparison-operator這個說明文件有,四個值這樣 --evaluation-periods意思是當n次的比對成立時,去驅動Alarm動作 --metric-name這個可以去Console裡面的CloudWatch新增一個Alarm看看(笑 --namespace這個一定要設定,至於值,大抵上就是跟EC2或是RDS有關(端看你所使用的服務 --period多少時間偵測一次,單位是秒 --statistic有五種可以選,在CloudWatch裡也有 --threshold比較值就是CPUUtilization如果大於這個值,就會執行Alarm --alarm-actions就是當Alarm發生的時候,要作什麼動作 --dimensions單純的說明(的樣子,就是類似這個Alarm的描述這樣 所以上面那個指令我們可以這樣來理解他, 建立一個名稱為myHighCPUAlarm的警報 --comparison-operatorGreaterThanThreshold使用GreaterThanThreshold來比對 --evaluation-periods1當發生(觸發)1次事件的時候,啟動(執行)警報動作 --metric-nameCPUUtilization這個警報器要比對的標的叫做CPUUtilization --namespace"AWS/EC2"使用"AWS/EC2"的命名空間 --period600每600秒檢測一次 --statisticAverage使用Average這個狀態來檢測 --threshold60當標的CPUUtilization超過這個數值的時候觸發事件 --alarm-actions<.....>這個警報器觸發的時候要執行的事件 --dimensions"A..."這個警報器的警報訊息(描述) 這樣我們就做好自動增加機器的一個步驟了!結束了?不,我們很忙的時候開了機器,但是不忙的時候要關機啊,機器要算錢的嘛。

關機如法炮製,我們一樣設定一個policy上他去關掉一台機器, $as-put-scaling-policy\ --auto-scaling-group\ --adjustment=-1\ --typeChangeInCapacity\ --cooldown300 arn:aws:autoscaling:ap-northeast-1:885400449203:scalingPolicy:7c3658e4-cf5c-4275-8be9-d52802317a0b:autoScalingGroupName/my_scaling_group:policyName/my_scaling_policy 然後建立另一個Alarm,差別只在於--comparison-operator與--threshold而已, $mon-put-metric-alarmmyHighCPUAlarm\ --comparison-operatorLessThanThreshold\ --evaluation-periods1\ --metric-nameCPUUtilization\ --namespace"AWS/EC2"\ --period600\ --statisticAverage\ --threshold10\ --alarm-actions<.....>\ --dimensions"AutoScalingGroupName=" OK-CreatedAlarm 那麼這樣一來,他就會在CPU使用量高於75%時,增加一台EC2,然後低於10%的時候關閉一台EC2,這樣再搭配ELB的話,就能做到自動擴展囉! 然後,剛剛的as系列動作,如果你要針對你已經作過的config或是group作修改,必須先把已經啟動的東西停下來才行,這裡稍微簡單說明一下, $as-suspend-processes $as-describe-auto-scaling-instances INSTANCEi-33caa533my_scaling_groupap-northeast-1bInServiceHEALTHYmy_scaling $as-terminate-instance-in-auto-scaling-group\ --instancei-33caa533\ --no-decrement-desired-capacity-f $as-delete-auto-scaling-group $as-delete-launch-config 以上,是刪除configuration與group的流程,請先記得suspend,不然你就算把Instances全部關掉,他還是會很貼心的幫你全部開回來喔(啾咪 提醒 要使用ec2-api-tools或是其他的commandlinetools的時候,請留意一下一些環境變數的問題。

上述幾個工具,都會牽扯到區域(REGION)的問題,所以要小心。

這裡提供我在使用的環境變數設定,給大家參考一下, exportEC2_PRIVATE_KEY=`pwd`/pk-xxxxxxxxxxxxxxxxxxxxx.pem exportEC2_CERT=`pwd`/cert-xxxxxxxxxxxxxxxxxxxxx.pem exportEC2_REGION=ap-northeast-1 exportAWS_ELB_HOME=`pwd`/ELB exportAWS_AUTO_SCALING_HOME=`pwd`/AutoScaling exportAWS_CLOUDWATCH_HOME=`pwd`/CloudWatch exportJAVA_HOME=/usr/lib/jvm/java-6-openjdk exportPATH=$PATH:$AWS_ELB_HOME/bin:$AWS_AUTO_SCALING_HOME/bin:$AWS_CLOUDWATCH_HOME/bin 其中,EC2_REGION就是你自己的區域,請記得改。

然後,我把ELB,AutoScaling,CloudWatch這三個工具下載下來,目錄換成那樣,如果你要照上面的用,也請記得修改。

另外,JAVA_HOME大家可能不太一樣,也別忘記改。

結語 好Amazon,不用嗎? 什麼HiCloud的,不要再相信沒有根據的說法了 Home Twitter FB IG [CSS]Flex/GridLayoutModules,part14 中秋連假寫稿好像有點不太應景,所以今天不會講太多東西,最後把Grid單元的對齊稍微補一下,連假嘛,大家輕鬆一點。

不過武漢肺炎肆虐,大家還是小心為上。

單元的對齊如同前些日子提及的,其實就只有兩種,第三種是縮寫不太想把他算進來。

資料的部分就不再次貼過來,忘記的人請參考 [CSS]Flex/GridLayoutModules,part13 單元對齊跟留白的部分今天會繼續,定位的問題基本上不出亂子的話就如同昨天說明的。

當然,如果再加上對齊跟留白,如果不小心也是會爆炸的。

對於留白問題,我一律設定為0(欸不是。

填滿(stretch)與留白(margin)我們現在已經會操作單元軌道來框住 [CSS]Flex/GridLayoutModules,part12 今天繼續來講Grid單元,昨天提到了對齊基本用法,今天繼續來講對齊與留白。

不過一開始,還是先解釋清楚關於格線與單元之間的事情。

總覺得15天就會結束了說(笑)。

單元與格線Grid容器提供了格線系統,然後每個格線將內容區塊化(



請為這篇文章評分?