數(shù)據(jù)橫流時代,AWS教你如何用機(jī)器學(xué)習(xí)進(jìn)行大數(shù)據(jù)管理
經(jīng)過六十余年的發(fā)展,人工智能(AI)及 機(jī)器學(xué)習(xí)(ML)已經(jīng)成為新一輪產(chǎn)業(yè)變革的核心驅(qū)動力,其發(fā)展趨勢也成為全球關(guān)注焦點(diǎn)。
雖然目前 AI / ML 尚處于產(chǎn)業(yè)發(fā)展的早期,其技術(shù)產(chǎn)品固然方興未艾,但對于普羅大眾而言,復(fù)雜的算法、模型、背后高深的數(shù)學(xué)邏輯等都過于“遙不可及”,更不用說這些復(fù)雜的理論邏輯還要通過最前沿的計算機(jī)技術(shù)來進(jìn)行高速實(shí)現(xiàn)。
AI 是炫酷的,ML 是高深的,但這一切的實(shí)現(xiàn),最終都是由開發(fā)者們一手一腳搭建起來。作為原生的互聯(lián)網(wǎng)公司,一直以來 Amazon Web Services(AWS)都以產(chǎn)品對開發(fā)者友好為特征,對全球的開發(fā)者提供各類資源與支持,并通過各種渠道等多方位的形式持續(xù)溝通交流。
那么在這個數(shù)據(jù)橫流的世界,AWS 是如何將 ML 送到每位開發(fā)者和 BI 分析師手中的呢?
利器的打造
AWS 堅信,在不久的未來,每個應(yīng)用程序均會融入 ML 和AI 。
AWS 努力,讓 ML 成為每個開發(fā)人員的利器,讓您更輕松地運(yùn)用尖端的 ML 服務(wù),以幫助您提升業(yè)績。
數(shù)萬客戶可通過 Amazon SageMaker 享受 ML 帶來的好處。僅需在您的結(jié)構(gòu)化查詢語言 (SQL) 中添加一些語句,在 Amazon QuickSight 中進(jìn)行幾次點(diǎn)擊,即能輕松使用您的 Amazon Aurora 數(shù)據(jù)庫中的關(guān)系型數(shù)據(jù)或 Amazon S3 中的非結(jié)構(gòu)化數(shù)據(jù),為應(yīng)用程序和商業(yè)智能 (BI) 控制面板添加ML預(yù)測。Aurora、Amazon Athena 和 Amazon QuickSight 可以直接調(diào)用 Amazon SageMaker 和 Amazon Comprehend 等 AWS ML 服務(wù),因此您無需從自己的應(yīng)用程序中調(diào)用它們。這使得您可以以更直接的方式向應(yīng)用程序添加 ML 預(yù)測,無需構(gòu)建定制集成,來回復(fù)制數(shù)據(jù),學(xué)習(xí)多種獨(dú)立工具,編寫多行復(fù)雜代碼等等,甚至無需具備 ML 經(jīng)驗(yàn)。
這些新的特性允許通過 SQL 查詢和控制面板執(zhí)行尖端的ML 預(yù)測,從而使 ML 變得更加實(shí)用,更方便數(shù)據(jù)庫開發(fā)人員和商業(yè)分析師使用。在以前,您可能會耗費(fèi)多日編寫應(yīng)用程序中定制代碼,并需要考慮在生產(chǎn)環(huán)境中擴(kuò)展、管理和支持。而現(xiàn)在,任何具備編寫 SQL 能力的人,都可以在沒有任何定制的“膠合代碼”的情況下,在應(yīng)用程序中構(gòu)建和使用 ML 預(yù)測。
利器的運(yùn)用
自從出現(xiàn)互聯(lián)網(wǎng)以后,數(shù)據(jù)的體量、增速和類型就不斷地增加。很多企業(yè)面臨的問題在于,如何管理并理解此“大數(shù)據(jù)”以得到最理想的回報。
企業(yè)內(nèi)部的豎井、持續(xù)產(chǎn)生各種格式的數(shù)據(jù)和不斷變化的技術(shù)面貌讓收集、存儲、分享,以及對數(shù)據(jù)進(jìn)行分析和可視化變得困難重重。
數(shù)據(jù)湖是一種集中的存儲庫,它可以存儲任何規(guī)模的各種結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。更好的安全性、更快的部署;更好的可用性、更頻繁的特性/功能更新;更具彈性、更廣的地理覆蓋范圍,以及與實(shí)際利用率相關(guān)的成本,讓數(shù)據(jù)湖成功為企業(yè)創(chuàng)造高額商業(yè)價值。今天,小編就要來教你如何使用 Amazon EMR、Amazon SageMaker 和 AWS Service Catalog 設(shè)置 Intuit 數(shù)據(jù)湖。
1.架構(gòu)
賬戶結(jié)構(gòu)
數(shù)據(jù)湖通常采用hub-and-spoke模型,其中中心賬戶包含控制數(shù)據(jù)源訪問權(quán)限的共享服務(wù)。在本文中,我們將hub賬戶稱作中央數(shù)據(jù)湖(Central Data Lake)。
在此模式中,訪問中央數(shù)據(jù)湖的權(quán)限被分配給名為“處理賬戶”(Processing Accounts)的spoke賬戶。此模型保持了最終用戶之間的隔離,并允許在不同業(yè)務(wù)部門之間的劃分賬單。
維護(hù)兩個生態(tài)系統(tǒng)的情況十分常見:分別為預(yù)生產(chǎn) (Pre-Prod) 和生產(chǎn) (Prod)。通過阻止 預(yù)生產(chǎn)和生產(chǎn)之間的連接,數(shù)據(jù)湖管理員可以對數(shù)據(jù)進(jìn)行單獨(dú)訪問。
為了進(jìn)行實(shí)驗(yàn)和測試,建議在預(yù)生產(chǎn)賬戶內(nèi)維護(hù)基于獨(dú)立VPC 的環(huán)境,如 dev、qa 和 e2e。然后,處理賬戶 VPC 將連接到中央數(shù)據(jù)湖中的對應(yīng) VPC。
請注意,首先,我們使用 VPC對等連接連接賬戶。但隨著擴(kuò)展,我們很快就會達(dá)到 125 個 VPC 對等連接的硬性限制,這使得我們遷移至 AWS Transit Gateway。在撰寫這篇博文時,我們每周都會連接多個新的處理賬戶。
2.中央數(shù)據(jù)湖
在 hub 賬戶中可能運(yùn)行著很多服務(wù),但我們將重點(diǎn)關(guān)注與本博文最密切相關(guān)的幾個方面:攝入、清理、存儲和數(shù)據(jù)目錄。
攝入、清理和存儲
中央數(shù)據(jù)湖的關(guān)鍵組成部分是對流式數(shù)據(jù)的統(tǒng)一攝入模式。一種示例的實(shí)現(xiàn)方式是在 Amazon EC2 上運(yùn)行的 Apache Kafka 集群。(您可以閱讀另一篇 AWS 博客了解 Intuit 工程師在這方面的實(shí)現(xiàn)方式) 在處理數(shù)百個數(shù)據(jù)源時,我們已啟用通過 AWS PrivateLink 訪問攝入機(jī)制的功能。
注意:Amazon Managed Streaming for Apache Kafka (Amazon MSK) 是在 Amazon EC2 上運(yùn)行 Apache Kafka 的替代方式,但在Intuit 遷移開始時該服務(wù)還沒有發(fā)布。
除了流處理之外,另一種攝入方式是批處理,例如在 Amazon EMR 上運(yùn)行的作業(yè)。在使用這些方式攝取數(shù)據(jù)后,可以將其存儲在 Amazon S3 中進(jìn)行進(jìn)一步的處理與分析。
Intuit 處理大量客戶數(shù)據(jù),并且仔細(xì)考慮每個字段,并按照敏感級別對其進(jìn)行分類。所有進(jìn)入數(shù)據(jù)湖的敏感數(shù)據(jù)在源頭就被加密。提取系統(tǒng)會檢索加密數(shù)據(jù),并將其移入數(shù)據(jù)湖。在將數(shù)據(jù)寫入 S3 之前,使用專有的 RESTful 服務(wù)對此類數(shù)據(jù)進(jìn)行清理。在數(shù)據(jù)湖中執(zhí)行操作的分析師和工程師會使用這些屏蔽數(shù)據(jù)。
數(shù)據(jù)目錄
數(shù)據(jù)目錄是為最終用戶提供關(guān)于數(shù)據(jù)及其所在位置信息的常見方式。其中一個示例是由 Amazon Aurora 提供支持的 Hive Metastore 。另一個替代方式是 AWS Glue 數(shù)據(jù)目錄
3.處理賬戶
當(dāng)處理賬戶被交付給最終用戶時,它們包含一系列相同的資源。我們將在下文討論處理賬戶的自動化,但主要的組成部分如下:
- 通過 Transit Gateway 連接到中央數(shù)據(jù)湖
- 用于通過SSH訪問 Amazon EMR 集群的堡壘主機(jī)
- IAM 角色、S3 存儲桶和 AWS Key Management Services (KMS) 密鑰
- 使用配置管理工具的安全框架
- 支持對 Amazon EMR 和 Amazon SageMaker 進(jìn)行預(yù)置的 AWS Service Catalog 產(chǎn)品
4.數(shù)據(jù)存儲機(jī)制
一個合理的問題是,是否所有數(shù)據(jù)都應(yīng)該存儲在中央數(shù)據(jù)湖嗎,或者在多個賬戶分布數(shù)據(jù)是否可被接受?數(shù)據(jù)湖可以同時采用兩種方法的組合,并將數(shù)據(jù)位置分類為主要或次要。
中央數(shù)據(jù)湖是數(shù)據(jù)的主要位置,數(shù)據(jù)通過上文討論過的攝入管道被傳送到這里。處理賬戶可以通過直接從攝入管道或從 S3 對主要源進(jìn)行讀取。處理賬戶可以將經(jīng)其轉(zhuǎn)換后的數(shù)據(jù)重新貢獻(xiàn)到(主要)中央數(shù)據(jù)湖,或?qū)⑵浯鎯τ谧约旱馁~戶(次要)。正確的存儲位置取決于數(shù)據(jù)的類型,以及需要用到這些數(shù)據(jù)的使用者。
不允許跨賬戶寫入是一條應(yīng)該被執(zhí)行的規(guī)則。換句話說就是,IAM 主體(在大多數(shù)情況下為,由 EC2 通過實(shí)例配置文件代入的 IAM 角色)必須和目標(biāo) S3 存儲桶屬于相同的賬戶。這是因?yàn)椴恢С挚缳~戶授權(quán)—具體來說,中央數(shù)據(jù)湖中的 S3 存儲桶政策無法授予處理賬戶 A 訪問由處理賬戶 B 中的角色寫入對象的權(quán)限。
另一種可能是,由 EMR 通過自定義憑證提供者代入不同的 IAM 角色(參見 AWS 博客),但我們沒有選擇這條路線,因?yàn)镮ntuit需要重寫很多 EMR 作業(yè)。
5.數(shù)據(jù)訪問模式
大多數(shù)最終用戶都需要訪問位于 S3 中的數(shù)據(jù)。在中央數(shù)據(jù)湖和部分處理賬戶中,可能存在一系列只讀 S3 存儲桶:數(shù)據(jù)湖生態(tài)系統(tǒng)中的任何賬戶都可以從此類型存儲桶中讀取數(shù)據(jù)。
為了簡化對只讀存儲桶的S3 訪問管理,我們構(gòu)建了一種控制 S3 存儲桶政策的機(jī)制,這種機(jī)制完全通過代碼進(jìn)行管理。我們的部署管道采用賬戶元數(shù)據(jù)以基于賬戶的類型(Pre-Prod 或 Prod)動態(tài)生成正確的 S3 存儲桶政策。這些政策會被提交回我們的代碼存儲庫,以實(shí)現(xiàn)可審計性并且易于管理。
我們利用相同的方法管理 KMS 密鑰策略,因?yàn)槲覀兪褂?KMS 和客戶管理的客戶主密鑰 (CMK) 對S3 中的數(shù)據(jù)進(jìn)行靜態(tài)加密。
如下是為只讀存儲桶生成的 S3 存儲桶策略的示例:
請注意,我們會在賬戶級別授予訪問權(quán)限,而不是使用顯式的 IAM 主體 ARN。因?yàn)樽x取是跨賬戶的,所以處理賬戶中的 IAM 主體也需要權(quán)限。在這種粒度級別上對此類策略進(jìn)行自動化維護(hù)不大可行。此外,使用特定的 IAM 主體 ARN 可能對外部賬戶產(chǎn)生外部依賴關(guān)系。 例如,如果處理賬戶刪除了在中央數(shù)據(jù)湖的 S3 存儲桶策略中引用的 IAM 角色,將無法再保存存儲桶策略,從而導(dǎo)致部署管道的中斷。
6.安全性
對于任何數(shù)據(jù)湖來說,安全性都是至關(guān)重要的。 我們將提到所使用控件的子集,但不會做深入討論。
加密
可以通過多種方式在傳輸時和靜態(tài)進(jìn)行強(qiáng)制加密:
- 數(shù)據(jù)湖中的流量應(yīng)使用最新版本的 TLS(在寫作本文時是 1.2)
- 數(shù)據(jù)可以使用應(yīng)用程序級(客戶端)加密進(jìn)行加密
- KMS 密鑰可被用于 S3、EBS 和 RDS 的靜態(tài)加密
入棧和出棧
我們?yōu)槿霔:统鰲2扇〉姆椒ú⒉惶厥?,非常值得一提的是,我們發(fā)現(xiàn)重要的標(biāo)準(zhǔn)模式:
- 將堡壘主機(jī)和安全組配合使用, 將 SSH 流量限制在適當(dāng)?shù)?CIDR 范圍
- 通過網(wǎng)絡(luò)訪問控制列表 (ACL) 避免多余的的數(shù)據(jù)傳入
- 通過 VPC 終端節(jié)點(diǎn)將訪問路由到 S3 存儲桶,以避免其通過公共互聯(lián)網(wǎng)
限制入棧和出棧的策略是數(shù)據(jù)湖可以保證質(zhì)量(入棧)并防止數(shù)據(jù)丟失(出棧)的主要方面。
授權(quán)
通過 IAM 角色控制對 Intuit 數(shù)據(jù)湖的訪問,這意味著不會創(chuàng)建任何(具有長期憑證的)IAM 用戶。最終用戶會通過內(nèi)部服務(wù)被授予訪問權(quán)限,而該內(nèi)部服務(wù)則對基于角色的 AWS 賬戶聯(lián)合訪問進(jìn)行管理。定期進(jìn)行審核,以刪除不必要的用戶。
配置管理
我們使用 Cloud Custodian 的內(nèi)部分支,它是一整套預(yù)防、檢測和響應(yīng)式控件,由 Amazon CloudWatch Events 和 AWS Config 規(guī)則組成。它會報告并(可選)緩解的一些違規(guī)行為包括:
- 入站安全組規(guī)則中的未經(jīng)授權(quán) CIDR
- 公有 S3 存儲桶策略和 ACL
- IAM 用戶控制臺訪問
- 未加密的 S3 存儲桶、EBS 卷和 RDS 實(shí)例
最后,所有 Intuit 數(shù)據(jù)湖賬戶中都會啟用 Amazon GuardDuty,并由 Intuit Security 加以監(jiān)控。
7.自動化
如果說我們在構(gòu)建 Intuit 數(shù)據(jù)湖時有什么收獲的話,那就是要對一切進(jìn)行自動化。
在本博文中,我們將討論四個領(lǐng)域的自動化:
- 創(chuàng)建處理賬戶
- 處理賬戶編排管道
- 處理賬戶 Terraform 管道
- 通過 Service Catalog 進(jìn)行 EMR 和 SageMaker 部署
創(chuàng)建處理賬戶
創(chuàng)建處理賬戶的第一步是通過內(nèi)部工具發(fā)起請求。這會觸發(fā)自動化,對正確業(yè)務(wù)部門下帶有 Intuit 標(biāo)記的 AWS 賬戶進(jìn)行設(shè)置。
注意:AWS Control Tower 的賬戶工廠在我們剛開始這段旅程時還沒有發(fā)布。但您可以利用它以安全、符合最佳實(shí)踐的自助式方式對新的 AWS 賬戶進(jìn)行設(shè)置。
賬戶設(shè)置還包括自動化的 VPC 創(chuàng)建(帶有可選 虛擬專用網(wǎng)絡(luò)),以及使用 Service Catalog 實(shí)現(xiàn)完全自動化。最終用戶只需指定子網(wǎng)大小即可。
另外值得一提的是,Intuit 可利用 Service Catalog 自助部署其他常見的模式,包括入棧安全組、VPC 終端節(jié)點(diǎn)和 VPC 對等連接。以下是一個示例產(chǎn)品組合:
處理賬戶編排管道
在創(chuàng)建賬戶并對 VPC 進(jìn)行設(shè)置后,處理賬戶編排管道將會運(yùn)行。此管道會執(zhí)行處理賬戶所需的一次性任務(wù)。這些任務(wù)包括:
- 引導(dǎo)IAM 角色以用于進(jìn)一步的配置管理
- 為 S3、EBS 和 RDS創(chuàng)建 KMS 加密密鑰
- 為新賬戶創(chuàng)建變量文件
- 使用賬戶元數(shù)據(jù)更新主配置文件
- 生成腳本以編排下文要討論的 Terraform 管道
- 通過 Resource Access Manager 分享 Transit Gateway
處理賬戶 Terraform 管道
該管道管理動態(tài)且經(jīng)常更新的資源的生命周期,包括 IAM 角色、S3 存儲桶和存儲桶策略、KMS 密鑰策略、安全組、NACL 以及堡壘主機(jī)。
每個處理賬戶都有一條管道,而且每條管道都會使用一組參數(shù)化部署作業(yè)在賬戶中部署一系列層。層是 Terraform 模塊和 AWS 資源的邏輯分組,在需要重新部署特定資源時提供一種方式以縮小 Terraform 狀態(tài)文件和爆炸半徑。
通過 Service Catalog 進(jìn)行 EMR 和 SageMaker 部署
AWS Service Catalog 簡化了Amazon EMR 和 Amazon SageMaker 的設(shè)置,允許最終用戶通過嵌入式安全方式啟動 即用型EMR 集群和的 SageMaker Notebook實(shí)例。
Service Catalog 讓數(shù)據(jù)科學(xué)家和數(shù)據(jù)工程師可以采用自助式方式和用戶友好的參數(shù)啟動 EMR 集群,并為他們提供以下各項(xiàng)服務(wù):
- 引導(dǎo)操作,以便與中央數(shù)據(jù)湖中的服務(wù)實(shí)現(xiàn)連接
- EC2 實(shí)例配置文件,以控制 S3、KMS 和其他細(xì)粒度權(quán)限
- 可啟用靜態(tài)和傳輸時加密的安全配置
- 配置分類,以實(shí)現(xiàn)最佳 EMR 性能
- 啟用監(jiān)控與日志記錄的加密 AMI
- 自定義 Kerberos 連接至 LDAP
對于 SageMaker,我們使用 Service Catalog 以啟動具有生命周期配置的Notebook實(shí)例,以設(shè)置連接或初始化以下各項(xiàng):Hive Metastore、Kerberos、安全性、Splunk 日志記錄和 OpenDNS。您可以參考該 AWS 博文,以了解關(guān)于生命周期配置的更多信息。啟動具有最佳實(shí)踐配置的 SageMaker Notebook實(shí)例非常簡單,具體方式如下: