搜尋全站文章

沒有找到相關文章

試試其他關鍵字或檢查拼寫

找到 0 篇文章 • 包含部落格、筆記、旅遊文章

Medium GitHub LinkedIn

【DVA-C02】Serverless Lambda

作者頭像
Sam

2025年7月24日

5分鐘閱讀

【DVA-C02】Serverless Lambda

Lambda 簡介

Serverless 是什麼

Serverless 是一種雲端運算模型,它允許開發者編寫程式碼,而不需要管理伺服器。

Lambda vs EC2

特性EC2Lambda
運算單位虛擬伺服器 (Virtual Server)虛擬函數 (Virtual Function)
資源限制受限於 RAM 和 CPU受限於執行時間(短時間)
執行方式持續運行按需執行(On Demand)
擴展性需手動介入新增/移除實例(Instance)自動擴展
適用場景長時間運行、需完整控制的應用短時間、事件驅動、無伺服器管理的應用

Lambda 應用情境

  • S3 — Create Thumbnail by Lambda -> S3 Bucket

  • API Gateway

  • SQS

  • SNS

  • BridgeEvent

  • RDS

Lambda 的非同步應用(Synchronous Invocation)

Synchronous Invocation: 同步調用,客戶端等待 Lambda 函數的響應。

invoke

response

invoke

invoke

response

response

SDK/CLI

Lambda Function

Client

API Gateway

Lambda Function

Embedded Lambda as HTTP Handler

  • 可以使用 ALB、API Gateway 等服務來調用 Lambda 函數。

使用 ALB 調用 Lambda 函數

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/my-target-group/123456789012" }, "httpMethod": "GET", "path": "/lambda", "queryStringParameters": { "name": "John" }, "handler": { "connection": "keep-alive", "host": "lambda.us-east-1.amazonaws.com", "userAgent": "ELB-HealthChecker/2.0", "xForwardedFor": "127.0.0.1", "xForwardedPort": "443", "xForwardedProto": "https", "xForwardedHost": "lambda.us-east-1.amazonaws.com", "xForwardedPrefix": "/lambda", "xForwardedQueryString": "name=John", "xForwardedUri": "/lambda?name=John" } } }

回應響應格式

{ "statusCode": 200, "body": "Hello, John!", "headers": { "Content-Type": "text/plain" }, { "body": "<html><body>Hello, John!</body></html>", "isBase64Encoded": false } }

事件監聽(Event Soucres Mapping)

符合規則時觸發

事件來源

EC2 狀態變化

S3 事件

自定義應用程式

定時排程

🚌 Amazon EventBridge

(事件總線)

🚀 AWS Lambda Function

(事件處理)

📋 事件規則

(Event Rule)

• 事件模式匹配

• 路由規則

Lamdba 可以搭配 EventBridge、 SQS 監聽特定資源的排程,例如:

  • AWS 服務事件:例如,是否有新的檔案上傳到 S3 Bucket、監聽 EC2 狀態
  • 自定義事件:例如,使用 API Gateway 監聽特定事件
  • 排程事件:類似於 Linux 的 cron job,可以設定定時觸發事件。

Lamdba Layers:用來儲存依賴

安全性:VPC、IAM 設置

限制

  • Execution
    • Memory allocation: 128MB - 10GB
    • Maximum execution time: 900 seconds(15 minutes)
    • Environment variables: 4KB
    • Disk cache: 512MB
    • Concurrency: 1000
  • Deployment
    • Lambda function deploymnent package size: 50MB
    • Size of uncompressed deployment code and dependencies: 250MB
    • Can use the /tmp directory to load other files at startup
    • Size of environment variables: 4KB

Storqge

項目用途存取速度資料持久性定價方式適合的場景
Ephemeral Storage
(/tmp 空間)
Lambda 執行期間的暫存空間(最多可擴充到 10GB)極快(本地磁碟)不持久(函式結束即清除)依申請大小與執行時間計費暫存大型檔案、處理壓縮檔
Lambda Layers共用程式碼、函式庫的機制,用來抽離通用依賴快(隨 Lambda 初始化)與 Lambda 綁定期間有效無額外費用,但部署大小受限共用函式庫、第三方 SDK
Amazon S3物件儲存服務,可供 Lambda 讀寫中等(透過 API)持久依存取頻率與儲存容量計費存放輸入輸出資料、大型檔案備份
Amazon EFS可掛載在 Lambda 上的檔案系統(支援多個函式共享)快(比 S3 快)持久依使用容量和 I/O 效能模式計費需要共享狀態、模型、或大型檔案

Lambda Concurrency Issue

  • 如果沒有限制 Lambda 的並行數,可能會導致 Lambda 函數被過度使用,導致成本上升。

  • 冷啟動 (Cold Start) 是指當 AWS Lambda 函數在一段時間沒有被調用後,第一次被調用時所需經歷的一個額外延遲。

探索更多精彩內容

繼續閱讀,了解更多技術與個人經歷的精彩文章。