Saturday, May 15, 2021

AWS API Gateway简介

一步一步建立第一个API + lambda application

AWS CDK 开发 API gateway

Lambda and API gateway Java example


API gateway也可以直接invoke Step function (默认为async的startExecution API,大概80ms latency,也可以invoke stopExcution, startSyncExecution),返回值为step function run id, start time等,一定要用Post。

Post在input里用$request.body支持request payload


IAM role,需要有APIGatewayInvokeFullAccess和StepFunctionFullAccess


Logging:

默认没有log,可以到Monitor->Logging去enable

需要自己创建一个log group

format需要加入$context.error.message, $context.integrationErrorMessage,否则即使是500,也不会知道是什么错误,其他log参数


Authentication & Authorization

可以用Federate + Cognito Identity pool/Cognito user pool 来Authenticate 用户,但这多数用于真正用户。另一种方法是用Lambda Authorizer作为interceptor来做验证。

作为程序用户,可以用IAM user(非AWS resource)或者IAM role(AWS resource)来验证。

需要AmazonAPIGatewayInvokeFullAccess的permission

Frontend用不checkin的方法来本地存API key 


CORS

Request有两种:simple和non simple。我的case是返回contentType=json,不是Simple所以需要CORS support。API gateway设置如下:

allow-control-allow-orgin=https://www.vtasters.com (no slash)

access-control-allow-headers=access-control-allow-origin, content-type, authorization, referer

access-control-allow-methods=POST, GET

access-control-max-age=600 (Same as Chrome)


Thursday, May 13, 2021

DocumentDB简介

Document-based database. MongoDB wrapper. 

大部分功能如index,连接方法类似于RDS,RDS上有full text search功能,支持词频搜索如shop coffee或coffee shop

DocumentDB初次setup

Terms:

Collection: Table

Transaction:

multi-doc for 4.0 above


Other features

Change stream for a collection


Setup + Cloud 9 (IDE)

https://aws.amazon.com/blogs/database/part-2-getting-started-with-amazon-documentdb-using-aws-cloud9/


Shell命令

show dbs

show collections

use mydb (will create or switch to db)

db.createCollection("metadata")   / db.mydb.createCollection("metadata")

db.metadata.insert({"name":"documentdb"})

db.metadata.findOne()

db.metadata.count()

db.metadata.find({name: "Netflix"})

db.metadata.find({name: /Netflix/}) -- like '%Netflix%' (case sensitive)

db.metadata.find({name: /^netflix$/i}) -- like '%netflix%' (case insensitive)


Java coding

import com.mongodb.MongoClient来获取数据

mongoClient.getDatabase('mydb');


DB connection

DB connection会看到是Database operation的两倍,因为会自动产生读和写两个connection,叫replica

https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-to-replica-set.html


1000 per cluster: https://docs.aws.amazon.com/documentdb/latest/developerguide/limits.html