AWS Lambda

快速架起一個微服務

- Jimmy

你將會學到

  • 什麼是 Serverless
  • 初探 AWS
    • AWS IAM
    • AWS Lambda
    • AWS API Gateway
    • AWS DynamoDB
  • Framework
  • 使用 Lambda 架起一個微服務

Serverless ?

無伺服器?

歷史演變

2001

2013

什麼是 Serverless

  • 開發者不需費心管理伺服器
  • 程式碼皆在雲端上運行
  • 事件觸發

WHY?

  • 降低維護成本
  • 自動化的擴展能力
  • 簡單的管理

最重要的是.....

實際案例

可口可樂使用的6臺EC2 T2.M虛擬機器,一年下來總體成本為12,864美元;然而在使用AWS Lambda的情況下,使用量每月3千萬次,一年總體成本是4,490美元,成本省了65%,相當驚人。

初探 AWS

整體架構

AWS IAM

AWS Identity and Access Management (IAM)

IAM 是 AWS 用來管理權限的服務
我們會運用 IAM 的 KEY 來操作 AWS

  • Users
  • Groups
  • Role
  • Policies

*為了安全性會針對帳號給予相對應的權限

AWS Lambda

Lambda 是一種 Serverless 的服務

一個 Lambda 只有一個程式進入點

  • 用自訂邏輯擴展其他 AWS 服務
  • 完全自動化的管理
  • 不用擔心硬體上的風險
  • 自動調整規模
  • 按使用量付費
  • 靈活的資源模式

AWS API Gateway

讓開發人員輕鬆發佈、維護、監控和保護任何規模的 API

  • 建立、部署和管理 API
  • 彈性
  • API 生命週期管理
  • 產生 SDK
  • 監控
  • 權限控制

DynamoDB

  • 非關連式資料庫
  • 全受管
  • 自動調整規模
  • 隨時備份還原

快速部署的 Framework

現行有許多框架,serverless、apex、apex/up、claudia 幫助我們快速部署服務,省去繁瑣的 cli 操作與時間。

Serverless

Serverless 這個不只可以用在 AWS 還有 Azure、GCP、Cloudflare 等。

 

功能最齊全也相對來說最複雜,設定以 yml 格式為主

# serverless.yml

service: users

provider:
  name: aws
  runtime: nodejs6.10
  stage: dev # Set the default stage used. Default is dev
  region: us-east-1 # Overwrite the default region used. Default is us-east-1
  profile: production # The default profile to use with this service
  memorySize: 512 # Overwrite the default memory size. Default is 1024
  deploymentBucket:
    name: com.serverless.${self:provider.region}.deploys # Overwrite the default deployment bucket
    serverSideEncryption: AES256 # when using server-side encryption
  deploymentPrefix: serverless # Overwrite the default S3 prefix under which deployed artifacts should be stored. Default is serverless
  versionFunctions: false # Optional function versioning
 

apex

apex 專注於打包、部署以及管理 Lambda 上,屬於一包專案管理多隻 Lambda 的工具,適合大型專案或有多功能專案使用。

設定為 JSON 格式

project.json // 專案設定
functions
├── bar // lambda 名稱
│   ├── function.json // lambda 設定
│   └── index.js // lambda 程式
└── foo
    ├── function.json
    └── index.js

apex/up

UP 部署時會依據程式碼一併幫你部署好 API Gateway,提供了開箱即用的體驗,屬於一包專案管理單隻 Lambda,適合小專案或單一功能使用。

設定一樣為 JSON 格式

up.json // 專案設定
app.js // 程式碼
component
├── foo.js
└── bar.js

claudia

claudia 與 apex/up 很相似,不過是使用 claudia-api-builder 套件部屬與管理 API Gateway

設定一樣為 JSON 格式

claudia.json // 專案設定
app.js // 程式碼
component
├── foo.js
└── bar.js

該如何規劃你的專案?

monolithic function

vs

single-purposed function

Serverless

By jimmy8646

Serverless

  • 12