顯示具有 技術-雲端運算-AWS 標籤的文章。 顯示所有文章
顯示具有 技術-雲端運算-AWS 標籤的文章。 顯示所有文章

2014年7月22日 星期二

AWS EC2 Reserved Instance 注意事項 - 你選對AZ了嘛?

圖片來源:financialbuzz

上面是我收到這兩個月AWS 帳單的表情....靠妖怎麼那麼貴!?我不是已經用了Reserved Instance 了?使用AWS的優點是收費彈性,但是這也是恐怖的地方,如果沒有設定好,以及隨時監控,你的錢就會在無形中燃燒殆盡....



2013年12月17日 星期二

Best Practices for Amazon EMR - S3 vs HDFS



前陣子在看Amazon 出的 white paper:Best Practices for Amazon EMR 的文章時,剛好看到這段 - Data Aggregation Best Practice ,剛好講到在跑MapReduce 使用S3 和HDFS會有怎樣本質上的差異,剛好拿來當做我之前寫的 Object based storage or block device storage 的最明確的實際應用案例。

2013年10月15日 星期二

[實驗]透過IAM 給予EMR Instance 特定權限

EMR 與 S3


EMR 最大的特色之一就是跟S3的整合,EMR可以直接把S3當做HDFS來使用,而且S3到EMR Instance 之間的傳輸費用是Free,當然要好好利用一下啦。
在EMR中使用S3方法很簡單,只要使用以下指令:
hadoop fs -cat s3n://<your bucket name>/test
or
hadoop fs -cat s3://<your bucket name>/test 
這時候問題來了....那S3要設定怎樣的權限? 如何讓EMR存取?這時候就要使用IAM

Why IAM?


使用IAM的好處就如同EMR 的開發文件裡面所說的 - Configure IAM Roles for Amazon EMR
An AWS Identity and Access Management (IAM) role is a way to delegate access so IAM users or services in AWS can act on your AWS resources. You create an IAM role and assign permissions to it, such as the ability to read and write data in one of your Amazon S3 buckets. When an IAM user or a service in AWS assumes that IAM role, they gain the specified permissions to access your AWS resources.
Amazon EMR uses IAM roles so that applications running on the EC2 instances of your cluster can access your AWS resources without the need to distribute your AWS account or IAM user credentials to those EC2 instances
簡單來說就是使用IAM 的設定以後,理論上我就不需要把我的accessKey 和 secureKey 設定到每一台instance裡面,就可以直接存取AWS Resource 的資源。
不過這邊要注意的是,啟動IAM 的權限只能透過API 或是CLI ,並不能透過AWS Management Console 來啟動。
Launching a cluster with IAM roles is currently not supported in the Amazon EMR console. If you need to use IAM roles in your cluster, launch the cluster using the CLI or the API.

測試結果


明明沒有設定IAM EMR也可以存取S3啊? 設定了以後到底差別在哪裡? 原來....
如果從EMR console create cluster (沒有設定IAM),EMR會自動把會把accesskey 和 securekey 存放在core-site.xml 裡面:
    fs.s3n.awsSecretAccessKey 
    fs.s3n.awsAccessKeyId
但是如果使用IAM,並且給予S3的權限,所以在你的core-site.xml 裡面就不會有SecureKey和AccessKey的出現。


謎之音:
其實我只是要測試用stackedit 寫寫看blog~ 結果似乎不如預期...囧rz...好多效果都沒出來...是因為我把bloger搞的太花俏用太多plugin了嘛?Orz...


2013年10月6日 星期日

關於AWS Elaster MapReducer (EMR)



話說去年的這個時候參加了AWS 在台灣辦的一場workshop 寫了一篇文章 - [筆記] Technical Workshop: AWS DynamoDB and Elastic MapReduce ,但是也僅此於此,並沒有真的去使用AWS EMR。畢竟如果是為了做實驗,練習或寫程式,在自己電腦開一個VM就夠了,如果沒有真的要做啥大量運算跑到AWS上玩Hadoop感覺就會費浪不少錢,。

對於我的認知來說,AWS EMR 是job-oriented的Service ,適合的情境是把已經有明確要分析的資料存放(或將要存放)在S3,然後透過EMR去S3 撈取資料來分析,此時EMR的強項就是可以快速的幫你開啟一組設定好的Hadoop Cluster (如果想要加速?開啟的Instance數量由你決定),所以我們只需要專注於程式的撰寫,而不用擔心管理的問題。

但是如果是一組要長期間運行(Long Run Hadoop Cluster),要考慮的點可能就不只這些了,可能必須先了解搭配的作業系統是什麼?是哪一家的Hadoop (商業支持度)?是否有好的管理介面?....等問題。

這也難怪Neflix 自己打造了一套建立在EMR上面的Hadoop Cluster 管理介面Genie

source: viethip

HDInsight on Azure 的異軍突起



剛好今年Hadoop Taiwan 2013 微軟的Talk 用雲端實現巨量資料的商業智慧–HDInsight on Azure 引起了我的注意,主要是:

1. HDInsight 他使用的Hortonwork 的Distribution (雖然是Windows 版,用起來可能會不太順手~:P)
2. 在來他的設計就是For Long run Cluster  不像AWS是Job oriented

不過很可惜的是居然沒有把ambari 也包含在裡面,對於一個long run cluster 管理介面還是很重要的,目前他的管理介面看起來還是有點陽春

(有興趣的朋友可以看,資策會的蘇老師寫了一系列詳盡的介紹HDInsight Tutorial)

既然微軟的Azure 也朝這方向前進了,讓我不禁好奇算是領導品牌的AWS EMR 目前有沒有什麼進展?以及想要更加了解他的架構與規劃。


關於Hadoop 的版本


AWS EMR 主要有兩種Distribution 可以選用,一種是Community 版的Apache Hadoop,另一個則是MapR的版本(需要額外收費)。根據我的推測,MapR 應該就是用來彌補商業營運( Long run cluster )的版本。

不過再更深入研究MapR版本前,讓我們先看看到底EMR 所使用的Community 版本的內容吧,實驗方法如下:

先利用EMR介面隨便選一個Example Job(例如word count)開啟了一組Cluster,對於EMR的設定來說只有三種角色的Instance,內容配置如下:

1. Master (包含Name Node 和 Job Tracker)
2. Slave with Data (包含Data Node 和 Task Tracker)
3. Slave  without Data (只有Task Tracker )

而這三種角色分別擁有不同的Security Group ,Default 的設定只允許Master 可以透過SSh登入,其他Slave 的角色是不允許的 (不過可以自行透過Security Group 設定來開啟)。

透過SSH 登入 Master 後 (登入帳號:Hadoop),讓我非常驚訝,因為作業系統不是我們所熟悉的CentOS而是Debian:

debian squeeze
Linux ip-172-31-16-224 3.2.30-49.59.amzn1.i686 #1 SMP Wed Oct 3 19:55:00 UTC 2012 i686 GNU/Linux


而Hadoop 版本則是1.0.3 with YARN (這又是另我驚奇的一點),不過最讓我驚奇的則是EMR居然已經改用JDK 1.7了!?  (請參考:何時Hadoop 才能正式轉換至 JDK7 ?)

> java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode)


真是處處驚奇啊....然後不管是設定檔放置的位置,與設定的方法與傳統熟悉的都不太一樣,所以很明顯的這就不是要讓你自己方便管理的設計,他們也不預期讓你近來亂搞~:P

所以我才大膽的假設MapR 版本才是真的設計來當做Long run Cluster的版本,畢竟官網上是這樣介紹MapR的:


  • Enhanced ease-of-use and reliability for Apache HBase applications
    • Instant Recovery
    • Zero HBase Administration
    • Continuous Low Latency
    • Full Data Protection with Snapshots
    • Business Continuity with Mirroring
  • Industry-standard interfaces
    • NFS
    • ODBC
  • Management
    • Deployment
    • MapR Control System (MCS)
    • CLI and REST API:

看樣子也得另外花時間好好玩玩看一下MapR 是不是如同他宣稱的這麼厲害~:P

另外想要更深入了解EMR的人也可以參考官方提供的Best Practices for Amazon EMR

Update:

The latest Amazon EMR AMI version contains the following pre-installed software:
  • Hadoop 1.0.3 
  • Java 1.7 
  • Perl 5.10.1 
  • Python 2.6.6 
  • R 2.11 
  • hbase-0.92.0 (開Hbase 必須要開VPC)  
  • hive-0.11.0   
  • pig-0.11.1.1  



2013年4月2日 星期二

從 Amazon Virtual Private Cloud (VPC) 到 CloudStack 的 VPC

圖片來源:techcrunch


前一陣子看到一篇不錯的文章 "Anyone To Create A Virtual Private Cloud Showing Again How Enterprise Tech Is Obsolete",想說是不是應該來寫一篇關於VPC的介紹。

AWS 的 Virtual Private Cloud (VPC) 對於Startup公司或一般小公司可能很少用過,也不太需要用到,因為Startup公司的Service 通常直接就在EC2上了,此外Startup公司通常也不會有內部系統 (大多可以直接利用許多雲端服務,如:Google App, Microsoft office 360,Trello...等)。

但是對於許多中大型企業就不是這樣了,中大型企業通常都會有自己的內部系統與機房,因此他們就必須要考量的點就比較多了,比如說轉移成本,資安考量...等,所以通常會優先考量把本來就對外營運的Service移到Public Cloud 上,但是內部系統繼續留在公司內部機房。但時候對於MIS和IT來說可能就會頭痛了 ,因為必須要管理兩套網路環境與兩套系統,更不用說這兩套系統可能還必須溝通,所以這個時候企業就可以考慮使用AWS VPC (當然前提是你使用的Public Cloud 是 Amazon~XD)

AWS 的VPC 主要分成幾種模式:

主要用意就是幫助企業把私有網路環境延伸到Public Cloud,也就是同時可以享受Public Cloud的彈性與優勢,另一方面又可以保有公司私有/內部網路的架構與設定。

下圖是我整理最常見的使用架構,VPC與內部網路透過VPN Gateway 的方式串接


圖片來源:自行整理


不過這時候另一個問題來了,那如果公司內部想要架構跟AWS一樣方變得Private Cloud,那我該怎麼做?這時候就一定得來推薦CloudStack了,話說 CloudStack 4.0 主要新增功能之一就是增加類似 AWS VPC的功能,那CloudStack 的VPC 和 AWS的VPC有啥差異?可以混在一起用嘛?

欲知詳情?歡迎來參加由趨勢所舉辦的 Cloudstack TW Design Camp....
(要知道下一次舉辦的時間,請多留意TCloud 的Facebook 粉絲團的消息唷~)

延伸閱讀:
[1] Amazon Virtual Private Cloud Connectivity Options
[2] Connecting a Single Customer Router to Multiple VPCs
[3] Connecting Multiple VPCs with EC2 Instances (SSL)
[4] Connecting Multiple VPCs with Astaro Security Gateway
[5] Connecting Multiple VPCs with EC2 Instances (IPSec)
[6] Amazon VPC介紹與建置-簡介


2012年12月12日 星期三

CloudFormation 教學 - 如何透過CloudFormer產生現有系統設定Template


相信對於許多IT和MIS來說,覺得最麻煩的應該就是要不停的做許多重複工作(比如說 Deploy service & Config network setting...等動作),而更討厭的是如果這個動作又不能被寫成Script自動化,今天要來介紹的神兵利器就是AWS 的CloudFormation。

還記得前一陣子我去參加AWS workshop 寫了一篇 "SaaS Template AWS CloudFormation" ,那時候我的結語是這個東西好威啊!但是該如何客製化產生template,或者是該如何把現有的環境設定輸出成template,是需要研究的功課。不過後來因為就都在忙其他的事情就沒有深入研究了,最近剛好跟同事提到有這個玩意,請他去研究一下,這才知道原來AWS大神已經都把工具做出來了!(謎之音:又少了一個可以周邊服務可以開發了...Orz...)


下面是我Step by Step 的貼圖教學,其實說穿了不值錢,真的很簡單!!




首先,先來到CloudFormation 的服務首頁,如果第一次使用會看到兩個選項:

第一個是Create New Stack  所謂的Stack 就是Template的意思,一個Stack會包含了你整個架構的設定,比如說你要建置一個HA 的 Web Service,內容應該會包含ELB、Instance x2、DB Server、IP設定..等 。

第二個是Lanch CloudFormer,這則是今天要介紹的重點,如何透過CloudFormer這個服務,把你目前系統的配置轉換成Template (Json的格式)。


其實產生CloudFormer也是利用CloudFormation的概念,利用AWS事先建立好的Stack去產生一台Instance,這個Instance裡面就有一個Web Service用來幫我產生template
(用自己去產生自己...很像繞口令)


在這邊他會要你選擇這個stack是不是要允許他設定IAM (權限設定),在這個案例是把它勾選起來,在其他案例就要小心了,因為如果你用了別人的template去產生一個架構,難保他不會偷偷開了一個權限和後門。


這一步可以略過,看你有沒有要加什麼tag


最後他會顯示出來,這個stack預計要產生怎樣的內容。


按下continue,就會回到CloudFormation的頁面,這時你就可以看到cloudformation 正在透過template產生你的stack (整個系統),越大的架構會需要花越多的時間請耐心等候~~


這時候你就可以來點一下下面的tab,由Event這一頁就可以看到目前正在啟動哪些Service,還有那些Service已經啟動好了。


在這邊就可以看到這個Template (Json格式的內容)



當整個Stack都啟動後,請回到EC2 找到剛剛啟動的Instacne ,並且查看他的public DNS or IP。最後連到那個網址,就會看到下面的 AWS CloudFormer 畫面。


首先你要先選擇你要產生的Template 是要Clone那個Region.


第一步:只是要你選擇一些描述這個Template是用來作什麼的

 第二步:選擇是否要clone DNS設定 (在這邊我沒設定所以是空的)

 第三步: 選擇你的網路設定,是否要有固定IP,是不是有LoadBalance...等

第四步:設定你要Clone 那些Instance 的設定 (如果你的Instance 在VPC,則他會自動把VPC的設定都一起Clone)

 第五步:是否要Clone Auto Scaling 的設定

第六步:是否要Clone EBS或是RDS..等設定
 第七步:選擇防火牆設定

 第八步:選擇是否要Clone Auto Scaling Trigger的條件


最後一頁,就是Summary,顯示出來你到底選擇那些Service要產生template,在這邊我只有選擇一個Instance跟一個防火牆設定。



將將~最後就產生出CloudFormation 的 Template啦,你可以直接Copy 這個Json下來,如果你按下Save Template,則會把這個template 存到S3裡面
如果你迫不及待想要測試你剛剛產生的Template,只要再跑依次Launch Stack就可以把你剛剛Template 所Clone的架構都產生出來,是不是很方便呢!?


感想:Amazon實在太威了,更新速度又如此之快,要其他廠商怎麼跟他拼~:P


2012年10月9日 星期二

[筆記] Technical Workshop: AWS DynamoDB and Elastic MapReduce

話說今年六月的時候有寫過一篇"要使用大象,真的得養頭大象嗎?為何不使用AWS EMR",但是我得先自首,寫完這篇以後就根本沒有時間去研究了,科技日新月異,我只覺得大象離我越來越遠了......(不要走~~)。話說這個月剛好有時間,就想說把Hadoop 架起來玩玩看(Cloudera CDH4),結果沒遇到什麼問題就裝好了,而且還附帶精美完整的Cloudera manager Dashboard和監控畫面,只能驚嘆科技日新月異,只要短短幾個月沒跟上就差很多了...(感嘆貌~)

好這都不是重點~XD 重點是這個星期剛好Amazon 有舉辦 AWS DynamoDB and Elastic MapReduce 的 Technical Workshop,當然就二話不說立馬報名~



由於這次講的主題是針對產品的技術Detail 去介紹和探討,如果對NoSQL 不認識或不了解,可能會容易聽不懂吧?我在這邊嘗試著整理我有記錄到的筆記再加一些我的記憶。

DynamoDB


一開始講師Jidesh 先定義怎樣的情境該使用NoSQL (for high throughput),什麼時候還是該用SQL (specific data with structure attribute),然後才開始進入主題介紹DynamonDB,不過講師還是建議大家有時間的話還是先去看 Amazon CTO - Werner Vogels 所寫文章 和介紹paper (PDF)。

DynamoDB 的定位很明確,就是專門處理 High throughput , Small size item (
64k item size limit, 1KB metering for throughput),特色如下:
  • 沒有Schema 的概念,就只有很簡單Key-value pair的table
  • 兩種Hash Key 模式 :Single Key & Composite key (Range key) 
  • No index Query API ,only scan API

此外Jidesh 花了很多時間在解釋Dynamo DB 神奇的 partition (or Sharding?)機制,簡單來說他們是透過ring 的概念去做資料的hash,所以會盡量的把資料分散到各個node,但是如果有某筆資料存取特別頻繁(hot data),Jidesh 會建議可以把Key 再次分散,比如說Key=a,改成Key=a1,a2,a3....等,不過我也有問他那目前有提供任何的機制去監控hot data access嘛?結果目前是還沒有的,所以看樣子只能透過經驗法則,如:
  • 如發現系統效能變慢
  • 發現資料存取throughput 太大
這時再去找是否request 都hit 到同一個partition,這時候就要把某個key切分出來,或是把這些資料移到另一個table.....(感覺很難追蹤..@@)

目前也有提供免費試用方案(Free tier),詳情請見官網:

● 10 reads/sec and 5 writes/Sec
    - Metering is done in 1KB blocks
    - 10, 1KB items equivalent to 1,10KB item
● Scan and Edit Tables in the AWS console

Elastic MapReduce

在介紹EMR之前,Jidesh 先重新介紹了一下Big Data ,其種講到幾個重點:
  • 3Vs (Volume & Velocity & Variety)
  • Big Data  到底要收集什麼,越來越難定義,越來越多東西都要收集,事後再來分析
  • New model is collect as mush as possible. "Data-First " Log everything!
  • Collect & store & analyze & share
此外他們還別強調Amazon的 hadoop 是有特別調教的,在所有Distrubtion裡面是最厲害的~:P




後面就是最刺激的Live Demo 啦,教材都有放在網站上,這次講的題目是:

後記:

所以EMR有兩種用法,一種是開了只做短暫的分析,另一種是開了就拿來做長期使用,真的跑Hadoop的Service 在上面,不過這時候價錢就會是考量了....

Reference:
[1] AWS Elastic MapReduce Document

2012年9月27日 星期四

SaaS Template AWS CloudFormation



今天去參加Amazon 的 workshop 才赫然發現,原來心目中理想的SaaS Template Amazon已經有提供類似的功能叫做CloudFormation,CloudFormation 是透過Json的格式來描述整個SaaS 要佈署的內容與配置,所以以後只要費一次供配置好你的系統架構,之後就可以快速的複製,就如同上圖的梗,一個複製兵如果撐不起服務,那就多開幾個複製兵就好了~XD

流程如下圖所示,有興趣的可以去玩玩看,教學連結"Howto"

 Source: AWS

如果剛開始不知道怎麼編輯,可以參考這裡有提供sample template,不過看樣子似乎目前沒有Editor tools,所以對於一般人來說只能先研究template然後再做修改,不過看起來有點困難,得花點時間研究看看,看有沒有辦法做一個圖形化的template editor,或是把現有的group export 成template。

越是深入使用AWS,越發現許多架構與功能的設計巧思與眉角,這些功能與服務真的都是累積了無數大型系統維運的經驗,以及解決客戶問題所累積出來的技術門檻,到底台灣的IaaS要怎麼追的上呢...Orz...

延伸閱讀:

2012年8月15日 星期三

Openstack 跟AWS EC2 的API相容性測試

Source: Star Trek - Captain's Log
『太空,人類的終極邊疆。星艦企業號的旅程就是為了探索陌生的新世界,去尋找宇宙中的新生命與新文明,勇敢航向人類足跡從未踏至的領域。』
不知道為什麼就很想用這個梗,大概我跟也迷航在Openstack的功能與設定裡面了...Orz..不知道何時雲端運算會變成銀河運算或是宇宙運算....(誤)

艦長日誌:

          測試目標:讓MeshCloud可以介接Openstack
           API 版本: aws-java-sdk 1.3.10
OpenStack版本: Openstack-essex release
           測試環境: Ubuntu 12.04.1 LTS
           測試對象:呼叫 openstack API http://x.x.x.x:8773/services/Cloud/


這幾天都在測試Openstack-essex 跟AWS EC2 的API相容性,發現很多API並不如官網所宣稱的那麼相容,或者應該說可以呼叫,但是很多行為與細節跟AWS並不一致,目前遇到的問題如下:

1. 無法RunInstance 同時使用BlockDeviceMapping去產生Volume
2. 不管透過API還是Dashboard去產生的Instance 都無法把Root Device 掛載EBS
3. 同2 所以Instance 關閉後,Instance就會自動被刪除
4. Attach Volume 必須掛載在/dev/vdx下面 (跟Amazon不一樣)

5. 無法import Key (Bug #755819)
此外目前最大的問題是Openstack dashboard 很多設定的功能都沒有,必須透過下指令(如:nove-manage),但是下指令修改後,卻又跟dashboard不同步。

之前許多網路新聞都說已經有很多廠商直接使用openstack,如果不是他們有特別的客製化,那就是還有許多設定我不知道或是設定錯誤...Orz... (不過我懷疑~:P)

官網列出來的比較表如下:

EC2 API method
實際測試
AllocateAddress
(./)
無法測試
AssociateAddress
(./)
無法測試
AttachVolume
(./)
ok
AuthorizeSecurityGroupIngress
(./)

BundleInstance
{X}

CancelBundleTask
{X}

CancelSpotInstanceRequests
{X}

ConfirmProductInstance
{X}

CreateImage
{X}

CreateKeyPair
(./)
ok
CreatePlacementGroup
{X}

CreateSecurityGroup
(./)
ok
CreateSnapshot
(./)

CreateSpotDatafeedSubscription
{X}

CreateTags
{X}

CreateVolume
(./)
ok
DeleteKeyPair
(./)
無法測試
DeletePlacementGroup
{X}

DeleteSecurityGroup
(./)

DeleteSnapshot
(./)

DeleteSpotDatafeedSubscription
{X}

DeleteTags
{X}

DeleteVolume
(./)
ok
DeregisterImage
(./)
無法測試
DescribeAddresses
(./)
空的
DescribeAvailabilityZones
(./)

DescribeBundleTasks
{X}

DescribeImageAttribute
(./)

DescribeImages
(./)
ok
DescribeInstanceAttribute
{X}

DescribeInstances
(./)
ok
DescribeKeyPairs
(./)
ok
DescribePlacementGroups
{X}

DescribeRegions
(./)

DescribeReservedInstances
{X}

DescribeReservedInstancesOfferings
{X}

DescribeSecurityGroups
(./)

DescribeSnapshotAttribute
{X}

DescribeSnapshots
(./)

DescribeSpotDatafeedSubscription
{X}

DescribeSpotInstanceRequests
{X}

DescribeSpotPriceHistory
{X}

DescribeTags
{X}

DescribeVolumes
(./)
會有warn
DetachVolume
(./)
ok
DisassociateAddress
(./)
無法測試
GetConsoleOutput
(./)
空的
GetPasswordData
{X}

ImportKeyPair
(./)
UnknownError
ModifyImageAttribute
(./)

ModifyInstanceAttribute
{X}

ModifySnapshotAttribute
{X}

MonitorInstances
{X}

PurchaseReservedInstancesOffering
{X}

RebootInstances
(./)
ok
RegisterImage
(./)

ReleaseAddress
(./)
無法測試
RequestSpotInstances
{X}

ResetImageAttribute
{X}

ResetInstanceAttribute
{X}

ResetSnapshotAttribute
{X}

RevokeSecurityGroupIngress
(./)

RunInstances
(./)
部分ok
StartInstances
(./)
ok
StopInstances
(./)
等同Terminate
TerminateInstances
(./)
ok
UnmonitorInstances
{X}