整理 serverless 運用 AWS Provider 開發 Lambda
環境準備&介紹
- AWS - Installation
- 安裝 Node.js
- 安裝 Serverless
npm install -g serverless
- 設定 AWS credentials
- AWS - Introduction
- 協助開發、部署 Lambda
- 管理 code, infrastructure by CloudFormation
- 支援多種程式語言
- 主要概念
- functions: AWS Lambda function
- events: 用來 trigger Lambda
- resources: Lambda 所需的 infrastructure
- services: project 單位
- plugins
- serverless.yml 可用的屬性
Quick Start
Install
User Guide
Functions
handler
指向檔案及 module- function 預設繼承 provider 屬性或是自行指定
- function 可用 array file 來分別管理
- Permission
- 利用
provider.iamRoleStatements
設定 IAM Role - 使用現有 IAM Role
provider.role
- 利用
- Environment Variables
- key-value paris
- function, override provider
- provider
- key-value paris
- Tags
- key/value tags
- function, override provider
- provider
- key/value tags
Variables
- 取代
serverless.yml
中的設定值,例如提供 secrets, 運用 multiple stage,語法 如${variableSource}
- 變數來源
- Serverless
{sls:variableSource}
- 環境變數
${env:SOME_VAR}
- CLI Options
${opt:some_option}
- 外部檔案 YAML, JSON file
- SSM Parameter Store:
${ssm:/path/to/param}
- Secrets Manager
- 參照 AWS Pseudo Parameters
- 字串變數作為布林值
- Serverless
Credentials
- serverless 需要能 access AWS resource 的權限,已進行操作管理
- 註冊 AWS Account(
廢話) - 建立 IAM user, access key,啟用 Programmatic access
- Serverless Framework Dashboard,運用 AWS Access Roles 並使用 1 小時後就失效的 access key
- 無腦方式直接賦予 IAM user AdministratorAccess 權限
- 最小權限化可參考 gist
- 使用 access key
- export AWS_ACCESS_KEY_ID, export AWS_SECRET_ACCESS_KEY
- AWS Profiles
serverless config credentials
- aws-cli
aws configure
會以 INI 格式儲存在~/.aws/credentials
IAM
Serverless 會自動建立 所有 function 共用的 IAM Role,可自行修改或建立 function 獨立用的 IAM Role
The Default IAM Role
- create, write CloudWatch logs
- VPC 有設定時,就能跟 VPC 內的 resource 都通
- 所有 service 共用的 role 設定在
provider.iamRoleStatements
或provider.iamManagedPolicies
- 可用運 CloudFormation 語法
Custom IAM Roles
- provider 定義的
iamRoleStatements
不再使用 - 自定義的 role 可用用在 provider 或個別 function
- function 沒定義
role
時,會使用provider.role
- function 有定義
role
時,會覆寫provider.role
- 每個 function 都有指定
role
時,預設的 role, policy 將不會產生
- function 沒定義
Deploy
Deploy All
update function by serverless.yml
, translate syntax to CloudFormation
- 建立 CloudFormation template
- 建立 S3 Bucket, 預設 AES256 encryption
- function code package to zip files
- 比對檔案 hash, 有不同才會進行 deploy
- zip file 上傳到 S3 Bucket
- 建立 CloudFormation 所需 resources
- 更新 CloudFormation stack
- 發布新版的 function
Deploy Function
因不仰賴 CloudFormation,較為快速
- package function into zip file
- 比對檔案 hash, 有不同才會進行 deploy
- zip file 上傳到 CloudFormation stack 指定的 S3 Bucket
AWS Events
Schedule
- 語法可參閱 Schedule Expressions for Rules
corn
rate
- 預設 enable
- 可給予 name, description
SNS
- lambda 會在訊息傳到 topic 後呼叫
- 可在不同 function 使用相同 topic
- 用 ARN 指定現有 topic,可運用 CloudFormation function 組合
- topic 在
serverless.yml
中時,要用Fn::Ref
或!Ref
取得 ARN
DynamoDB Streams
- table 資料新增、修改時,觸發 lambda
stream
僅會掛上已存在的 stream,serverless 不會新增新的 stream- 設定
batchSize
startingPosition
batchWindow
maximumRetryAttempts
parallelizationFactor
enable
CLI
Create
nodejs, python, python3, java