serverless-aws-handbook

整理 serverless 運用 AWS Provider 開發 Lambda

環境準備&介紹

  • AWS - Installation
    1. 安裝 Node.js
    2. 安裝 Serverless npm install -g serverless
    3. 設定 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

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-debugging.html

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
  • Tags
    • key/value tags
      • function, override provider
      • provider

Variables

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.iamRoleStatementsprovider.iamManagedPolicies
  • 可用運 CloudFormation 語法

Custom IAM Roles

  • provider 定義的 iamRoleStatements 不再使用
  • 自定義的 role 可用用在 provider 或個別 function
    • function 沒定義 role 時,會使用 provider.role
    • function 有定義 role 時,會覆寫 provider.role
    • 每個 function 都有指定 role 時,預設的 role, policy 將不會產生

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

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

Templates

Reference

DynamoDB 資料匯出工具

由於 DynamoDB 僅提供匯出 CSV 的選項,但是編輯的時候只能用 JSON…
剛好找到了 export-dynamodb

可匯出格式: CSV, JSON

1
2
3
4
5
6
7
8
# 安裝
pip install export-dynamodb
# 未指定 output file name, 就會用 table name
export-dynamodb -t TABLE_NAME -f csv
export-dynamodb -t TABLE_NAME -f json

export-dynamodb -t TABLE_NAME -f csv -o output.csv
export-dynamodb -t TABLE_NAME -f json -o output.json
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×