API gateway Lambda DynamoDb Cognito
https://github.com/barosanuemailtest/space-finder-backend.git https://github.com/barosanuemailtest/space-finder-frontend.git
git init
npm init -y
npm i -D aws-cdk aws-cdk-lib constructs ts-node typescript
mkdir infra
touch infra/Launcher.ts
touch infra/SpaceStack.ts
# echo '{"app":"npx infra/Launcher.ts"}' > cdk.json
echo '{"app": "npx ts-node --prefer-ts-exts infra/Launcher.ts"}' > cdk.json
cdk synth # error related to tsconfig target
npx tsc --init
# change tsconfig.json "target": "es2016", -> "target": "ES2018",
# copy tsconfig.json from generated project
infra/Launcher.ts
import {App} from "aws-cdk-lib";
import {SpaceStack} from "./SpaceStack";
const app = new App()
new SpaceStack(app, 'Space-finder', {
stackName: 'SpaceFinder'
})
infra/SpaceStack.ts
import {Stack, StackProps} from 'aws-cdk-lib'
import {Construct} from 'constructs'
export class SpaceStack extends Stack {
constructor(scope: Construct, id: string, props: StackProps) {
super(scope, id, props);
}
}
Lambda (js) infra/SpaceStack.ts
const helloLambda = new Lambda(this, 'helloLambda', {
runtime: Runtime.NODEJS_14_X,
code: Code.fromAsset(join(__dirname, '..', 'services', 'hello')),
handler: 'hello.main'
})
services/hello/hello.js
exports.main = async function(event, context) {
return {
statusCode: 200,
body: 'hello from lambda',
}
}
Api Gateway infra/SpaceStack.ts
const api = new RestApi(this, 'SpaceApi')
const helloLambdaIntegration = new LambdaIntegration(helloLambda);
const helloLambdaResource = this.api.root.addResource('hello');
helloLambdaResource.addMethod('GET', helloLambdaIntegration);
DynamoDB infra/SpaceStack.ts
const spacesTableName = 'SpacesTable'
new Table(this, spacesTableName, {
partitionKey: {
name: 'SpaceId',
type: AttributeType.STRING,
},
tableName: spacesTableName
})