本文深入淺出地介紹 AWS 無伺服器架構的各個導向,從建立第一個 AWS Lambda 函式開始,逐步引導讀者瞭解如何結合 API Gateway 建構 RESTful API、使用 DynamoDB 進行 NoSQL 資料函式庫操作、透過 Cognito 確保應用程式安全,以及利用 S3、Route53 和 CloudFront 進行網頁託管等。同時,本文也涵蓋了 SQS 和 SNS 訊息佇列服務的應用,以及如何使用 CloudWatch 監控和設定警示,提供開發者全方位的無伺服器應用程式開發實務。
本文內容導覽
本文共分為十章,涵蓋了無伺服器(Serverless)架構在AWS雲端平台上的各種應用和實踐。以下為各章節的簡介:
第一章:AWS無伺服器運算入門
本章介紹如何使用AWS Lambda建立無伺服器應用程式,並探討AWS IAM和AWS CloudFormation這兩個在後續章節中會頻繁使用的服務。
第二章:使用API Gateway建立無伺服器REST APIs
本章將指導讀者如何建立可靠且可擴充套件的API Gateway REST APIs,並涵蓋部分API Gateway的功能,例如跨來源資源分享(CORS)。
第三章:使用Amazon DynamoDB進行資料儲存
本章提供了Amazon DynamoDB的各種應用範例,這是一種完全託管的NoSQL資料函式庫,並探討瞭如何將DynamoDB與AWS Lambda整合,以及一些關於吞吐量組態的場景和解決方案。
第四章:使用Amazon Cognito進行應用程式安全
本章介紹如何使用Amazon Cognito進行使用者註冊、登入和使用者管理,並在後續章節中探討Cognito的實際應用,例如聯合登入。
第五章:使用S3、Route53和CloudFront進行網頁託管
本章概述了與託管網站相關的各種操作,包括註冊網域名稱、使用Amazon S3託管靜態網站、為S3儲存桶附加自訂網域,以及使用CloudFront CDN。
第六章:使用SQS和SNS進行訊息傳遞和通知
本章討論了Amazon SQS和Amazon SNS在無伺服器應用程式中如何用於程式間通訊,並探討瞭如何在AWS Lambda中觸發這些服務。
第七章:Redshift、Amazon ML和Alexa Skills
本章探討了以下服務如何為無伺服器運算在分析與自然語言處理領域帶來價值,包括Amazon Kinesis、Amazon Machine Learning和Amazon Alexa Skill Sets。
第八章:使用Amazon CloudWatch進行監控和警示
本章討論了監控和警示這兩個重要的DevOps實踐,並介紹了CloudWatch警示、CloudWatch指標和CloudWatch指標日誌篩選器。
第九章:無伺服器程式設計實踐與模式
本章探討了AWS平台上無伺服器應用的一些模式和實踐,並介紹了之前提到的一些服務如何相互作用,以及如何在實際專案中實作它們。
第十章:其他雲端供應商的服務
本章提供了對其他雲端供應商無伺服器運算的基本瞭解和入門,主要目的是探索流行的替代方案,並學習如何快速建立概念驗證演示。
如何充分利用本文
讀者應該熟悉Java、Maven、Git和Unix/Mac終端或Windows命令提示字元。若要使用JavaScript範例,還需要熟悉JavaScript。本文提供了額外的連結,以解釋所需的技術。為了充分利用本文,讀者應該至少從頭到尾閱讀一次。在閱讀本文的同時,可以按照書中的指示和儲存函式庫中的readme檔案執行提供的程式碼。範例程式碼應指定名稱或ID,讀者需要將其替換為自己建立的名稱和ID。最後,讀者應該根據本文的內容自行建立專案。
下載範例程式碼檔案
下載程式碼檔案的步驟如下:
- 登入或註冊www.packt.com。
- 選擇SUPPORT標籤。
- 點選Code Downloads & Errata。
- 在搜尋框中輸入書名,並按照螢幕上的指示進行操作。
下載檔案後,請確保使用最新版本的解壓縮軟體解壓縮或提取資料夾:
- Windows:WinRAR/7-Zip
- Mac:Zipeg/iZip/UnRarX
- Linux:7-Zip/PeaZip
本文使用的慣例
本文使用了多種文字慣例:
CodeInText:表示文字中的程式碼字詞、資料函式庫表名、資料夾名稱、檔案名稱、檔案副檔名、路徑名、虛擬URL、使用者輸入和Twitter帳號。- 程式碼區塊以特定格式顯示,例如:
Resources:
MyFirstRestAPI:
Type: AWS::ApiGateway::RestApi
Properties:
Name: Greeting API
- 當需要強調程式碼區塊中的特定部分時,相關行或專案以粗體顯示:
GreetingResource:
Type: AWS::ApiGateway::Resource
Properties:
RestApiId: !Ref MyFirstRestAPI
ParentId: !GetAtt MyFirstRestAPI.RootResourceId
- 命令列輸入或輸出以特定格式寫成,例如:
aws apigateway create-resource \
--rest-api-id c82tpsb7ka \
無伺服器運算在AWS上的起步
本章將涵蓋以下主題:
- 開始使用AWS平台
- 你的第一個AWS Lambda
- 使用AWS CLI建立你的第一個Lambda
- 使用Amazon CloudFormation建立你的第一個Lambda
- 結合AWS SDK、Amazon CloudFormation和AWS CLI使用Lambda
- 開發實踐:依賴注入和單元測試
- 使用Serverless框架建立你的第一個Lambda
簡介
雲端運算引入了按需付費的模式,並以虛擬機器和託管服務抽象化了實體伺服器。雲端運算的執行模型包括基礎設施即服務(IaaS)、平台即服務(PaaS)、軟體即服務(SaaS)和無伺服器運算(或功能即服務(FaaS))。
無伺服器運算的基礎
無伺服器運算允許我們執行函式(程式碼)而無需擔心伺服器,並且只需為執行程式碼的時間付費。儘管名稱如此,伺服器仍然存在,然而,服務提供商負責所有伺服器管理,包括啟動和停止它們以滿足請求、修補等。無伺服器運算大致介於PaaS和SaaS之間。
開始使用AWS平台
Amazon提供了免費層(Free Tier),讓您可以在生產級伺服器上開始使用AWS。免費層為您提供了許多服務和功能的免費存取,具有合理的限制。
準備工作
要使用AWS免費層,您需要一台像樣的電腦、合理的網路連線、有效的信用卡以及對電腦和網路的基本瞭解。
操作步驟
讓我們透過建立免費層帳戶來開始使用AWS平台。然後,我們將按照AWS的建議進行一些基本的IAM設定。最後,我們還將建立一個帳單警示,以跟蹤任何意外的費用。如果您已經有一個具有基本設定的工作帳戶,您可以跳過這部分內容:
前往https://aws.amazon.com並建立一個新的免費層帳戶(如果您尚未擁有):
- 提供登入憑證。
- 提供個人資訊,如地址、電話號碼和其他所需詳細資訊(如果您選擇了個人帳戶),或公司資訊(如果您選擇了公司帳戶)。
- 提供信用卡詳細資訊。
- 進行電話驗證。
- 為免費層帳戶選擇基本計劃與社群支援(或者如果您願意,可以選擇付費計劃)。
第一次登入後,建議您完成在安全狀態標題下列出的基本身份和存取管理(IAM)安全設定。如果您之前已登入,則可能不會顯示這些選項。如果是這樣,您需要從服務下拉選單手動前往IAM服務。
- 點選在您的根帳戶上啟用多因素身份驗證(MFA),並執行以下操作:
- 點選管理。
- 選擇虛擬MFA裝置。
- 在安裝了MFA相容應用程式(如Google Authenticator)的訊息上點選繼續。
- 使用Google Authenticator掃描螢幕上顯示的條形碼,並輸入兩個連續的程式碼進行確認。
- 點選建立個別IAM使用者,並執行以下操作:
- 輸入使用者名稱。
- 選擇存取型別(程式化存取和AWS管理控制檯存取)。
- 將憑證.csv檔案下載到本地機器上的安全區域。您以後無法下載它,但可以重新生成它。
- 點選在您的根帳戶上啟用多因素身份驗證(MFA),並執行以下操作:
重點解析
此段落主要介紹瞭如何開始使用AWS平台,包括建立免費層帳戶、進行基本的IAM安全設定以及建立帳單警示。重點在於透過一系列步驟指導讀者完成初始設定,以確保安全和成本控制。
使用Plantuml圖表示例:AWS IAM設定流程
@startuml
skinparam backgroundColor #FEFEFE
skinparam sequenceArrowThickness 2
title AWS無伺服器運算入門
actor "客戶端" as client
participant "API Gateway" as gateway
participant "認證服務" as auth
participant "業務服務" as service
database "資料庫" as db
queue "訊息佇列" as mq
client -> gateway : HTTP 請求
gateway -> auth : 驗證 Token
auth --> gateway : 認證結果
alt 認證成功
gateway -> service : 轉發請求
service -> db : 查詢/更新資料
db --> service : 回傳結果
service -> mq : 發送事件
service --> gateway : 回應資料
gateway --> client : HTTP 200 OK
else 認證失敗
gateway --> client : HTTP 401 Unauthorized
end
@enduml此圖示說明瞭建立AWS帳戶和進行基本IAM設定的流程,強調了關鍵步驟之間的邏輯關係。
開始使用AWS上的無伺服器運算 第1章
設定AWS帳戶與基本安全措施
在開始使用AWS上的無伺服器運算之前,首先需要設定一個AWS帳戶並實施基本的安全措施。以下是設定的步驟:
- 進入AWS管理主控台,點選右上角的使用者名稱下拉式選單,選擇「我的安全憑證」。
- 在IAM(身分與存取管理)儀錶板中,點選「使用者」,然後點選「新增使用者」。
- 為新使用者設定名稱、存取型別(建議勾選「程式設計存取」與「AWS管理主控台存取」),並設定密碼。
- 點選「使用群組指派許可權」,並指派適當的許可權給該使用者。
- 套用IAM密碼政策,以設定基本的密碼規則。
建立帳單警示以監控費用
為了避免意外產生過高的費用,建議設定帳單警示:
- 進入「我的帳單儀錶板」(點選右上角的使用者名稱下拉式選單)。
- 在「警示和通知」下,點選「立即啟用」以監控預估費用。
- 在「偏好設定」中,選擇「接收帳單警示」,然後點選「管理帳單警示連結」,這將帶您到CloudWatch。
- 在CloudWatch中,點選「帳單」,然後建立警示。
AWS主要服務與概念介紹
本章節介紹了幾個重要的AWS服務和概念,包括:
- AWS Identity and Access Management (IAM):提供安全的存取控制給AWS資源。
- Amazon CloudWatch:幫助監控應用程式、回應變化、最佳化資源利用,並提供統一的服務健康狀況檢視。
- Multi-Factor Authentication (MFA):提供額外的身份驗證層級,除了密碼外,還需要使用虛擬或實體驗證器產生的令牌進行驗證。
常見的AWS服務
本章節列出了幾個常見的AWS服務,包括:
- AWS Lambda:無需組態伺服器即可執行程式碼。
- Amazon API Gateway:無需編寫程式碼即可建立REST API。
- Amazon Simple Storage Service (S3):物件儲存服務,可用於儲存和檢索資料,也可用於託管單頁應用程式。
- Amazon DynamoDB:可擴充套件的NoSQL資料函式庫。
- Amazon CloudFront:內容傳遞網路(CDN)服務。
在AWS上開始使用無伺服器運算 第1章
專案設定與程式碼結構
在開始之前,我們需要了解AWS無伺服器運算的基礎。無伺服器運算是一種雲端運算的執行模型,允許開發者編寫和佈署應用程式,而無需管理底層的基礎設施。AWS Lambda是AWS提供的無伺服器運算服務,支援多種程式語言,包括Java。
首先,讓我們設定專案環境並建立第一個Lambda函式。假設您已經安裝了Maven和Java 8。
步驟1:設定專案結構
- 切換到程式碼倉函式庫資料夾,然後進入專案特定的父專案資料夾,並執行
mvn clean install:
cd Serverless-Programming-Cookbook
cd serverless-cookbook-parent-aws-java
mvn clean install
程式碼倉函式庫使用
每個章節都有自己的目錄(例如,第1章)。在章節的目錄中,將有每個recipe的子目錄。recipe特定的目錄名稱對應於recipe的標題。例如,本章節中標題為「Your first Lambda」的recipe,其目錄名稱為your-first-lambda。
在recipe的目錄中,有一個用於儲存所有資源的子目錄,包括AWS CLI命令,稱為resources。長的AWS CLI命令使用\符號分成多行,以提高可讀性。如果您使用的是Windows機器,可以使用^符號代替\符號,或者將命令寫成一行。
建立第一個Lambda函式
我們將建立一個根據Java的Maven專案作為我們的Lambda函式。
步驟2:建立Java專案
- 建立一個根據Maven的Java專案,並在POM檔案中宣告我們的共同父專案:
<groupId>tech.heartin.books.serverless-cookbook</groupId>
<artifactId>helloworld-lambda</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>tech.heartin.books.serverlesscookbook</groupId>
<artifactId>serverless-cookbook-parent-aws-java</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
- 在POM檔案中宣告我們需要的依賴:
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>${aws.lambda.java.core.version}</version>
</dependency>
</dependencies>
內容解密
此POM檔案組態宣告了我們的專案依賴於aws-lambda-java-core,這是AWS Lambda Java支援的核心函式庫。${aws.lambda.java.core.version}是從父專案繼承而來的屬性,代表了依賴的版本。
實作Lambda處理器
步驟3:建立Lambda處理器類別並封裝成JAR檔案
- 建立一個實作
RequestHandler介面的類別HelloWorldLambdaHandler:
package tech.heartin.books.serverlesscookbook;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public final class HelloWorldLambdaHandler implements RequestHandler<String, String> {
public String handleRequest(final String s, final Context context) {
context.getLogger().log("input: " + s + "\n");
String greeting = "Hello " + s;
return greeting;
}
}
- 封裝Lambda函式成JAR檔案:
mvn clean package
內容解密
此Java類別實作了一個簡單的Lambda函式,它接收一個字串輸入,回傳一個問候訊息。handleRequest方法是Lambda函式的入口點,它記錄輸入並建構問候訊息。Maven命令mvn clean package用於編譯、測試和封裝Lambda函式成JAR檔案。
佈署Lambda函式到AWS
步驟4:佈署Lambda處理器到AWS
- 登入AWS控制檯,導航到Lambda儀錶板。
- 建立一個新的Lambda函式,選擇「Author From Scratch」,並設定執行時為Java 8。
- 上傳JAR檔案,並設定處理器類別和方法名稱。
- 測試Lambda函式。
內容解密
這些步驟指導您如何在AWS控制檯上建立和組態Lambda函式。上傳的JAR檔案包含了我們的Lambda函式實作。測試Lambda函式時,您需要提供一個測試事件,例如一個包含您的名字的JSON物件。