API Gateway 作為 AWS 雲端服務的核心元件之一,在現代 Web 應用程式開發中扮演著至關重要的角色。它不僅簡化了 API 的建立和管理,更提供了豐富的功能來確保 API 的安全性、效能和可擴充套件性。本文將探討 API Gateway 的核心元件,包括資源、方法和階段,以及如何利用這些元件構建 RESTful API 和 WebSocket API。同時,我們也將探討 API Gateway 與 AWS Lambda 和其他 AWS 服務的整合,如何透過 CloudFormation 範本簡化佈署流程,以及如何設定 API Gateway 的安全功能,包括身份驗證和授權機制。此外,文章還將涵蓋 API Gateway 的效能最佳化策略,例如快取機制和流量控制,以及如何利用 CloudWatch 監控 API 的執行狀況。最後,我們將探討 AWS S3 儲存服務的整合應用,以及如何利用 S3 最佳化 API Gateway 的效能和資料管理。
AWS API Gateway 的核心元件與應用
AWS API Gateway 是建構現代化 Web 應用程式的重要服務,提供多種功能以支援不同型別的 API 和應用場景。本章節將探討 API Gateway 的核心元件、不同型別的 API、以及如何與其他 AWS 服務整合。
API Gateway 的主要元件
API Gateway 由多個關鍵元件組成,這些元件共同協作以實作高效、安全的 API 管理。
1. 資源(Resources)
資源是 API Gateway 中的基本單位,代表 API 的邏輯結構。每個資源可以對應到後端服務的一個特定功能或資料實體。資源透過路徑(Path)來標識,例如 /users 或 /products。
2. 方法(Methods)
方法定義了可以對資源執行的 HTTP 請求型別,如 GET、POST、PUT、DELETE 等。每個方法都可以組態特定的整合、請求和回應模型,以及授權設定。方法決定了請求如何被處理以及回應如何生成,從而實作對 API 行為的精細控制。
3. 階段(Stages)
階段代表 API 的不同版本或環境,例如開發、測試和生產。每個階段可以有自己的設定,包括日誌記錄、流量控制和佈署歷史。階段允許開發者在隔離的環境中管理和測試 API,然後再佈署到生產環境,提供了一種版本控制的機制,確保變更可以在不影響線上應用的情況下進行測試和驗證。
RESTful APIs 與 WebSocket APIs
AWS API Gateway 支援兩種主要的 API 型別:RESTful APIs 和 WebSocket APIs,它們分別適用於不同的通訊需求。
1. RESTful APIs
RESTful APIs 適用於傳統的 Web 應用程式,客戶端與伺服器透過 HTTP 方法進行通訊。它們是無狀態的,遵循 Representational State Transfer(REST)原則,適合進行 CRUD 操作和根據資源的互動。RESTful APIs 易於快取、擴充套件和安全,因此成為許多應用的首選。它們適合客戶端和伺服器可以獨立運作且通訊模式為請求-回應的場景。
2. WebSocket APIs
WebSocket APIs 則支援即時、雙向的通訊,透過維持一個持久的連線來實作連續的資料交換。這使得它們非常適合需要即時更新的應用,如聊天應用程式、即時儀錶板和遊戲平台。WebSocket APIs 提供低延遲的通訊能力,並能處理大量的並發連線,從而提升互動式和動態使用者經驗,進一步擴充套件了 API Gateway 的功能。
與 AWS Lambda 和其他 AWS 服務的整合
將 API Gateway 與 AWS Lambda 和其他 AWS 服務整合是建構無伺服器應用的關鍵。API Gateway 作為一個橋樑,允許 HTTP 請求觸發 Lambda 函式,從而實作可擴充套件的 API 而無需管理基礎設施。它提供了身份驗證、授權和流量控制功能,以確保安全的存取。此外,與 DynamoDB、S3 和 SNS 等服務的整合,使得開發者能夠在 AWS 生態系統內建構多樣化和全面的無伺服器解決方案。
設定 AWS API Gateway
設定 API Gateway 可以透過 AWS 管理主控台或使用 CloudFormation 範本來完成。以下是一個使用 CloudFormation 範本的範例:
AWSTemplateFormatVersion: '2010-09-09'
Description: Practical Serverless App API Gateway
Resources:
ApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
ApiKeySourceType: HEADER
Description: Practical Serverless App API Gateway
Name: serverless-api
ApiGatewayResource:
Type: AWS::ApiGateway::Resource
Properties:
ParentId: !GetAtt ApiGatewayRestApi.RootResourceId
PathPart: 'practical-aws'
RestApiId: !Ref ApiGatewayRestApi
ApiGatewayMethod:
Type: AWS::ApiGateway::Method
Properties:
ApiKeyRequired: false
AuthorizationType: NONE
HttpMethod: GET
Integration:
ConnectionType: Mock
ResourceId: !Ref ApiGatewayResource
RestApiId: !Ref ApiGatewayRestApi
ApiGatewayModel:
Type: AWS::ApiGateway::Model
Properties:
ContentType: 'application/json'
RestApiId: !Ref ApiGatewayRestApi
Schema: {}
程式碼解析:
AWSTemplateFormatVersion和Description分別提供了 CloudFormation 範本的版本和描述。Resources部分定義了要建立的資源,包括一個名為serverless-api的 API Gateway 和一個名為practical-aws的資源。Type: AWS::ApiGateway::RestApi指定了 API Gateway 的資源型別。Properties部分包含了 API Gateway 的組態,如 REST API 的名稱。Type: AWS::ApiGateway::Resource和Type: AWS::ApiGateway::Method分別指定了 API Gateway 資源和方法。- 範例中使用了 Mock 整合來模擬後端回應。
API Gateway 的安全功能
API Gateway 提供了一系列強大的安全功能,以保護 API 免受未授權的存取並確保資料傳輸的安全。這對於無伺服器應用程式尤為重要。它提供了身份驗證、授權、流量管理和 API 監控等功能,以維護資料的完整性和保密性。透過使用 AWS IAM、Amazon Cognito 和 Lambda Authorizers,可以實作精確的存取控制。此外,流量限制和速率限制可以防止濫用,而與 Amazon CloudWatch 的整合則提供了全面的日誌記錄和監控功能,使開發者能夠建構安全的 API。
身份驗證與授權
API Gateway 提供了多種身份驗證和授權選項,包括 IAM、Cognito 和 Lambda Authorizers,以確保 API 的安全性。
- IAM 身份驗證:AWS IAM 提供了一種安全的方法來控制對 API Gateway 資源的存取。開發者可以使用 IAM 策略來指定誰可以存取 API 以及他們可以執行哪些操作。IAM 身份驗證適用於內部 API 或與其他 AWS 服務整合的場景,利用 AWS 強大的安全框架來管理許可權和存取控制。
綜上所述,AWS API Gateway 為建構現代化 Web 應用程式提供了強大的支援,無論是 RESTful APIs 還是 WebSocket APIs,都能滿足不同的應用需求。透過與其他 AWS 服務的整合,開發者可以建構出既安全又可擴充套件的無伺服器應用程式。
AWS API Gateway 的安全與效能最佳化
AWS API Gateway 提供多種強大的功能來確保API的安全性和效能。透過正確的設定和最佳化策略,開發者能夠保護後端服務免受濫用,同時提供快速且可靠的API回應。
身份驗證與授權機制
AWS API Gateway 支援多種身份驗證和授權機制,以滿足不同的安全需求。常見的方法包括:
- IAM 角色:利用 AWS IAM 角色進行精細的許可權控制,適用於內部或企業級應用。
- Amazon Cognito:提供可擴充套件的使用者目錄和身分聯合功能,適合公共面對的API,能夠與外部身分提供者(如 Google 或 Facebook)無縫整合。
- Lambda Authorizers:透過自定義的 Lambda 函式實作靈活的授權邏輯,例如 Token 驗證或 IP 白名單控制,適用於複雜的認證場景。
這些機制確保只有授權的使用者能夠存取API,同時保持強大的安全控制。
流量控制與速率限制
為了防止API濫用和後端服務過載,AWS API Gateway 提供流量控制(Throttling)和速率限制(Rate Limiting)功能。開發者可以設定特定時間範圍內的請求限制,以確保公平使用並保護後端服務。API Gateway 允許組態帳戶級別和API特定的流量控制,提供精確的流量管理。
def lambda_handler(event, context):
# 簡單的速率限制範例
if exceed_rate_limit(event['requestContext']['identity']['sourceIp']):
return {
'statusCode': 429,
'body': 'Too Many Requests'
}
# 處理請求
return {
'statusCode': 200,
'body': 'OK'
}
def exceed_rate_limit(ip_address):
# 實作速率限制邏輯
# 例如:檢查過去一分鐘內該 IP 的請求次數
request_count = get_request_count(ip_address, time_window=60)
return request_count > MAX_REQUESTS_PER_MINUTE
內容解密:
此範例程式碼展示了一個簡單的 Lambda 函式,用於檢查請求是否超出設定的速率限制。主要步驟包括:
exceed_rate_limit函式檢查特定 IP 在指定時間視窗內的請求次數。- 若超出限制,則傳回 HTTP 429 狀態碼,表示請求過多。
- 若未超出,則繼續處理請求,傳回 HTTP 200 狀態碼。 此實作能夠有效防止單一來源對API進行濫用攻擊。
日誌記錄與監控
AWS API Gateway 與 Amazon CloudWatch 緊密整合,提供全面的日誌記錄和監控功能。CloudWatch 可收集詳細的指標,如請求次數、延遲和錯誤率,使開發者能夠監控API的健康狀態並及時發現潛在問題。透過設定 CloudWatch 警示,開發者可以在特定閾值被突破時接收通知,以便主動應對效能下降或安全事件。
CORS 設定與跨域請求處理
為確保安全性,瀏覽器實施了跨源資源分享(CORS)策略,限制網頁應用從不同網域請求資源。在 AWS API Gateway 中,需要正確組態 CORS 以允許來自不同網域的合法請求。
對於 REST API,需要手動建立 OPTIONS 方法來處理預檢請求,並在實際方法(如 GET、POST)的回應中包含適當的 CORS 標頭。
@startuml
!theme aws-orange
title CORS跨域請求處理流程
actor "瀏覽器\n(不同網域)" as browser
participant "API Gateway" as apigw
participant "OPTIONS方法\n處理器" as options
participant "Lambda函式" as lambda
database "資源API" as api
== CORS預檢請求階段 ==
browser -> apigw : OPTIONS請求\n(Preflight Request)
note right
預檢請求標頭:
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type
end note
apigw -> options : 路由到OPTIONS方法
activate options
options -> options : 驗證來源網域
options -> options : 檢查允許的方法
options -> options : 檢查允許的標頭
options --> apigw : 回傳CORS標頭
note left
CORS響應標頭:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST,PUT,DELETE
Access-Control-Allow-Headers: Content-Type,Authorization
Access-Control-Max-Age: 3600
end note
deactivate options
apigw --> browser : 200 OK + CORS標頭
browser -> browser : 驗證CORS標頭
note right: 檢查是否允許跨域請求
== 實際請求階段 ==
browser -> apigw : 實際API請求\n(POST/GET/PUT/DELETE)
note right
請求標頭:
Origin: https://example.com
Content-Type: application/json
Authorization: Bearer token...
end note
apigw -> apigw : 驗證請求
apigw -> lambda : 觸發Lambda函式
activate lambda
lambda -> api : 處理業務邏輯
api --> lambda : 返回資料
lambda --> apigw : 回應資料
deactivate lambda
apigw -> apigw : 添加CORS標頭
note left
響應CORS標頭:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: X-Custom-Header
end note
apigw --> browser : 200 OK + 資料 + CORS標頭
browser -> browser : 接收並處理回應
== 錯誤情況 ==
group CORS驗證失敗
browser -> apigw : 請求 (錯誤的Origin)
apigw --> browser : 403 Forbidden\n(缺少CORS標頭)
note right
錯誤原因:
• Origin不在白名單
• 缺少必要標頭
• 方法不被允許
end note
end
note bottom
CORS配置最佳實踐:
• 明確指定允許的網域,避免使用 *
• 限制允許的HTTP方法
• 設置適當的Max-Age減少預檢請求
• 謹慎使用Allow-Credentials
• 記錄CORS相關錯誤以便排查
end note
end note
@enduml
此圖示詳細展示了API Gateway處理CORS跨域請求的完整流程,分為兩個主要階段:
CORS預檢請求階段:瀏覽器首先發送OPTIONS請求進行預檢,API Gateway的OPTIONS方法處理器驗證來源網域、允許的方法和標頭,然後回傳相應的CORS標頭。瀏覽器驗證這些標頭以確定是否允許進行實際的跨域請求。
實際請求階段:通過預檢後,瀏覽器發送實際的API請求(如POST、GET等),API Gateway觸發Lambda函式處理業務邏輯,並在回應中添加CORS標頭,確保瀏覽器能夠接收並處理跨域回應。
圖中also包含了錯誤情況的處理,當CORS驗證失敗時(如Origin不在白名單中),API Gateway會返回403 Forbidden錯誤。底部的註解提供了CORS配置的最佳實踐建議。
效能最佳化策略
為了提供快速且可靠的API回應,開發者應實施多種效能最佳化策略,包括:
- 快取機制:利用 API Gateway 的快取功能減少後端負載並降低延遲。
- 流量控制:合理設定流量控制,防止API過載。
- 監控與調優:持續監控API效能,並根據 CloudWatch 指標進行調優。
透過這些策略,開發者能夠提升API的效能和可靠性,為使用者提供無縫的使用體驗。
API Gateway 快取策略最佳化
在現代雲端架構中,效能最佳化是確保應用程式高效執行的關鍵。AWS API Gateway 提供了強大的快取功能,可以顯著提升 API 的回應速度並降低後端服務的負載。本文將探討 API Gateway 的快取策略及其最佳實踐。
為何需要快取?
快取是一種透過儲存經常存取的資料來減少重複請求後端服務的技術。如圖 此圖示 所示,API Gateway 的快取機制可以顯著提高 API 的效能。
圖表翻譯:
此圖示顯示了 API Gateway 快取的工作原理。當客戶端傳送請求時,API Gateway 首先檢查快取中是否存在有效的回應。如果存在,則直接傳回快取的結果,而無需呼叫後端服務。這種機制顯著減少了後端負載並提高了回應速度。
組態 API Gateway 快取
要在 API Gateway 中啟用快取,需要在階段(Stage)層級進行組態。開發人員可以根據具體需求設定快取的有效期(TTL)、資料加密以及快取容量等引數。如 此圖示 所示的範例範本,展示瞭如何組態 API 快取。
StageName: Test
MethodSettings:
- ResourcePath: "/*"
HttpMethod: "*"
CachingEnabled: true
CacheTtlInSeconds: 300
CacheDataEncrypted: false
ThrottlingBurstLimit: 2000
ThrottlingRateLimit: 1000
CacheClusterEnabled: true
CacheClusterSize: "0.5"
內容解密:
此範例組態啟用了 API Gateway 的快取功能,並設定了相關引數:
CachingEnabled: 啟用快取功能。CacheTtlInSeconds: 設定快取的有效期為 300 秒。CacheDataEncrypted: 設定是否加密快取資料,此處為false。ThrottlingBurstLimit和ThrottlingRateLimit: 用於控制請求的頻率限制。CacheClusterEnabled和CacheClusterSize: 設定快取叢集的啟用狀態和大小。
快取策略的最佳實踐
- 精細化快取控制:根據請求引數、標頭或查詢字串來快取回應,以確保只儲存必要的資料。
- 快取失效管理:透過快取鍵策略管理快取失效,確保不會向客戶端提供過期的資料。
- 監控與分析:利用 Amazon CloudWatch 監控 API 效能,找出瓶頸並進行最佳化。
AWS S3 簡介
Amazon Simple Storage Service(S3)是 AWS 提供的一種高效能的物件儲存服務,用於儲存和檢索大量資料。其高永續性、可用性和安全性使其成為企業和開發人員的首選雲端儲存方案。S3 的物件儲存架構將資料以物件的形式進行管理,每個物件包含資料本身、元資料和唯一識別符。這種結構非常適合處理大量的非結構化資料,如媒體檔案和日誌。
S3 的核心架構
S3 的架構圍繞儲存桶(Buckets)和物件(Objects)展開。儲存桶是儲存物件的容器,而每個物件由檔案及其元資料組成,並透過唯一的鍵在儲存桶中進行識別。這種設計使得 S3 能夠與其他 AWS 服務無縫整合,提供靈活的資料管理和強大的擴充套件能力。
S3 的主要特點與優勢
- 版本控制:S3 的版本控制功能允許使用者儲存、檢索和還原每個物件的不同版本。這對於需要稽核軌跡和歷史資料分析的應用程式尤為重要。
- 生命週期策略:透過自動將資料轉移到不同的儲存類別,S3 的生命週期策略有助於最佳化成本和效能。例如,可以將資料從 S3 Standard 轉移到 S3 Glacier,以降低長期儲存的成本。
- 安全特性:S3 提供多層次的安全措施,包括伺服器端加密、存取控制列表(ACLs)和儲存桶策略。這些功能確保資料免受未授權存取,並滿足合規性要求。
AWS S3 儲存服務詳解:架構、應用與實務操作
AWS S3(Simple Storage Service)是亞馬遜雲端服務(AWS)中極為重要的物件儲存服務,提供了高度可擴充套件、持久且安全的資料儲存解決方案。S3 的設計旨在滿足各種規模的企業需求,從簡單的資料儲存到複雜的大資料分析,都能提供強大的支援。
AWS S3 的主要特點
可擴充套件性與彈性:S3 允許使用者根據需求動態調整儲存容量,無需預先投資硬體設施。這種彈性使企業能夠專注於核心業務,而無需擔心儲存空間不足的問題。
資料永續性與可用性:S3 提供高達 99.999999999% 的資料永續性和 99.99% 的服務可用性。這意味著資料幾乎不會遺失,且隨時可供存取。
安全性:S3 提供多層次的安全措施,包括資料加密(靜態與傳輸中)、存取控制(ACL、Bucket Policy、IAM)、以及版本控制,確保資料的安全性和完整性。
全球基礎設施:S3 的全球基礎設施支援跨多個區域的資料儲存,並與 AWS CloudFront 整合,加速全球內容傳遞,減少延遲並提升使用者經驗。
易用性:S3 提供直觀的使用者介面和多種操作工具(包括 AWS 管理主控台、CLI 和 SDK),讓技術和非技術使用者都能方便地進行資料管理。
AWS S3 的主要應用場景
資料儲存、備份與復原:S3 是企業進行資料儲存、備份和災難復原的理想選擇。其高永續性和版本控制功能確保了資料的安全和可還原性。
內容分發與託管:S3 可用於託管靜態網站、分發多媒體檔案和全球內容傳遞。與 CloudFront 的整合進一步最佳化了內容傳遞的效率。
大資料分析與資料湖:S3 能夠儲存大量結構化和非結構化資料,是建立資料湖的理想選擇。它支援大資料分析和機器學習工作負載,並與 Amazon Athena 和 AWS Glue 等服務無縫整合。
災難復原:S3 的跨區域複製功能允許自動將資料複製到多個 AWS 區域,確保在災難發生時業務能夠持續運作。
AWS S3 的運作原理
要充分利用 S3 的功能,瞭解其核心元件和運作機制至關重要。S3 的基本架構包括 Bucket(儲存桶) 和 Object(物件)。
Bucket 和 Object
- Bucket(儲存桶):是 S3 中用於存放 Object 的容器,每個 Bucket 都有一個全域唯一的名稱,並且需要在特定的 AWS 區域內建立。Bucket 可容納無限數量的 Object。
@startuml
!theme aws-orange
package "AWS S3 儲存架構" {
package "全球基礎設施" {
cloud "AWS Region: us-east-1" as region1 {
package "Availability Zone 1" as az1 {
storage "S3 Storage 1" as storage1
}
package "Availability Zone 2" as az2 {
storage "S3 Storage 2" as storage2
}
package "Availability Zone 3" as az3 {
storage "S3 Storage 3" as storage3
}
}
cloud "AWS Region: ap-northeast-1" as region2 {
storage "S3 Storage (複製)" as storage_replica
}
}
package "Bucket 1: my-website-bucket" as bucket1 {
folder "靜態網站檔案" as web_folder {
file "index.html" as obj1
file "style.css" as obj2
file "script.js" as obj3
}
folder "images/" as img_folder {
file "logo.png" as obj4
file "banner.jpg" as obj5
}
}
package "Bucket 2: my-data-bucket" as bucket2 {
folder "documents/" as doc_folder {
file "report-2024.pdf" as obj6
file "data.csv" as obj7
}
folder "backups/" as backup_folder {
file "backup-20240101.tar.gz" as obj8
file "backup-20240201.tar.gz" as obj9
}
folder "logs/" as log_folder {
file "access-log-20240301.log" as obj10
}
}
package "Bucket 3: my-archive-bucket" as bucket3 {
folder "archive/" as archive_folder {
file "old-data-2023.zip" as obj11
note right: Glacier儲存類別
}
}
package "S3 功能層" {
[版本控制] as versioning
[生命週期策略] as lifecycle
[跨區域複製] as replication
[加密] as encryption
[存取控制] as access_control
[靜態網站託管] as website
[事件通知] as events
}
package "整合服務" {
[CloudFront CDN] as cdn
[Lambda函式] as lambda
[API Gateway] as apigw
[Athena查詢] as athena
[EMR分析] as emr
}
actor "使用者" as user
actor "開發者" as developer
}
' 儲存複製關係
storage1 -[hidden]- storage2
storage2 -[hidden]- storage3
storage1 .right.> storage_replica : 跨區域複製
' Bucket 到儲存的關係
bucket1 --> storage1 : 儲存於
bucket2 --> storage2 : 儲存於
bucket3 --> storage3 : 儲存於
' 功能應用
bucket1 --> versioning : 啟用版本控制
bucket2 --> lifecycle : 生命週期管理
bucket2 --> replication : 跨區域複製
bucket1 --> encryption : 伺服器端加密
bucket1 --> access_control : IAM + Bucket Policy
bucket1 --> website : 靜態網站
bucket2 --> events : S3事件通知
' 服務整合
bucket1 --> cdn : 內容分發
bucket2 --> lambda : 事件觸發
bucket1 --> apigw : API訪問
bucket2 --> athena : SQL查詢
bucket2 --> emr : 大數據分析
' 使用者存取
user --> cdn : HTTPS請求
cdn --> bucket1 : 取得靜態內容
developer --> apigw : API呼叫
apigw --> lambda : 觸發函式
lambda --> bucket2 : 讀寫物件
note right of bucket1
Bucket屬性:
• 全域唯一名稱
• 區域級別資源
• 無限儲存容量
• 支援多種儲存類別
• 可設定公開/私有
end note
note right of obj1
Object屬性:
• Key (唯一標識)
• Value (資料內容)
• Metadata (元資料)
• Version ID (版本號)
• ACL (存取控制)
end note
note bottom of versioning
版本控制:
• 保留所有版本
• 防止意外刪除
• 支援回滾
• 每個版本獨立計費
end note
note bottom of lifecycle
生命週期策略:
Standard → Standard-IA
→ Intelligent-Tiering
→ Glacier → Deep Archive
自動轉換降低成本
end note
note bottom of encryption
加密選項:
• SSE-S3 (AWS管理)
• SSE-KMS (KMS管理)
• SSE-C (客戶管理)
• 客戶端加密
end note
note bottom
S3 儲存類別:
• Standard: 頻繁訪問
• Standard-IA: 不頻繁訪問
• One Zone-IA: 單區域
• Intelligent-Tiering: 自動分層
• Glacier: 歸檔
• Glacier Deep Archive: 深度歸檔
end note
end note
@enduml
此圖示詳細展示了AWS S3的完整儲存架構,包括:
全球基礎設施:展示S3如何在多個可用區域(AZ)中複製資料以確保高可用性,以及跨區域複製功能。
Bucket結構:三個不同用途的Bucket範例:
- my-website-bucket:儲存靜態網站檔案和圖片
- my-data-bucket:儲存文件、備份和日誌
- my-archive-bucket:使用Glacier儲存類別歸檔舊資料
Object層級:每個Bucket包含多個資料夾和物件,展示實際的檔案組織結構。
S3功能層:包括版本控制、生命週期策略、跨區域複製、加密、存取控制、靜態網站託管和事件通知等核心功能。
服務整合:展示S3如何與CloudFront、Lambda、API Gateway、Athena和EMR等AWS服務整合,實現內容分發、事件驅動處理、查詢分析等功能。
使用者存取:展示終端使用者透過CDN訪問靜態內容,開發者透過API Gateway和Lambda函式進行程式化訪問的完整流程。
圖中的註解詳細說明了Bucket屬性、Object屬性、版本控制、生命週期策略、加密選項和各種儲存類別,幫助理解S3的完整功能特性。
- Object(物件):是 S3 中實際儲存的資料實體,包括資料本身、後設資料和唯一的識別鍵(Key)。Object 可以是任何型別的資料,如文字、影像或影片。
資料一致性模型
S3 採用強大的資料一致性模型,以確保資料的完整性和可用性。對於新物件,S3 提供強讀後寫一致性,確保資料一旦寫入即可立即讀取。對於更新和刪除操作,S3 採用最終一致性模型,這意味著變更需要一些時間來傳播,但最終所有副本都會保持一致。
import boto3
# 初始化 S3 客戶端
s3 = boto3.client('s3')
# 上傳新物件
response = s3.put_object(
Bucket='example-bucket',
Key='example-object.txt',
Body='Hello, World!'
)
print("物件上傳成功:", response)
內容解密:
此 Python 程式碼範例展示瞭如何使用 boto3 函式庫將新物件上傳至 S3 Bucket。其中:
s3.put_object方法用於上傳物件。Bucket引數指定了目標 Bucket 名稱。Key引數定義了物件在 Bucket 中的唯一識別鍵。Body引數包含了要上傳的實際資料。 此範例展示了 S3 在處理新物件上傳時如何提供強讀後寫一致性,確保資料一旦寫入即可被立即存取。