in cdk/lib/http-api-aws-lambda-container-stack.ts [12:116]
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const tableName = 'Movies';
//Import existing Movies DynamoDB table
const table = dynamodb.Table.fromTableName(this, 'MoviesTable', 'Movies');
//AWS Lambda Functions
const listMovieFunction = new lambda.DockerImageFunction(this, 'listMovieFunction',{
functionName: 'listMovieFunction',
code: lambda.DockerImageCode.fromImageAsset(path.join(__dirname, '../../src/movie-service'), {
cmd: [ "list.list" ],
entrypoint: ["/lambda-entrypoint.sh"],
}),
environment: {
DYNAMODB_TABLE: tableName
},
});
const getMovieFunction = new lambda.DockerImageFunction(this, 'getMovieFunction',{
functionName: 'getMovieFunction',
code: lambda.DockerImageCode.fromImageAsset(path.join(__dirname, '../../src/movie-service'), {
cmd: [ "get.get" ],
entrypoint: ["/lambda-entrypoint.sh"],
}),
environment: {
DYNAMODB_TABLE: tableName
},
});
//CloudWatch Logs Policy
const cloudWatchLogsPolicyPolicy = new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
]
});
cloudWatchLogsPolicyPolicy.addAllResources();
//Grant CloudWatch access to Lambda Functions
listMovieFunction.addToRolePolicy(cloudWatchLogsPolicyPolicy);
getMovieFunction.addToRolePolicy(cloudWatchLogsPolicyPolicy);
//Grant ReadWrite access to Lambda Functions
table.grantReadWriteData(listMovieFunction);
table.grantReadWriteData(getMovieFunction);
// Lambda Integrations
const listMovieFunctionIntegration = new apigintegration.LambdaProxyIntegration({
handler: listMovieFunction,
});
const getMovieFunctionIntegration = new apigintegration.LambdaProxyIntegration({
handler: getMovieFunction,
});
//Http Api
const httpApi = new apig.HttpApi(this, "httpApi", {
apiName: "httpApi",
createDefaultStage: true,
});
//Http Api Routes
httpApi.addRoutes({
integration: listMovieFunctionIntegration,
methods: [apig.HttpMethod.GET],
path: '/list',
});
httpApi.addRoutes({
integration: getMovieFunctionIntegration,
methods: [apig.HttpMethod.GET],
path: '/get/{year}/{title}',
});
// API and Service Endpoints
const httpApiEndpoint = httpApi.apiEndpoint;
const listMovieFunctionEndpoint = httpApiEndpoint + "/list";
const getMovieFunctionEndpoint = httpApiEndpoint + "/get/{year}/{title}";
new cdk.CfnOutput(this, "Http Api endpoint: ", {
value: httpApiEndpoint,
});
new cdk.CfnOutput(this, "Http Api endpoint - listMovieFunction : ", {
value: listMovieFunctionEndpoint,
});
new cdk.CfnOutput(this, "Http Api endpoint - getMovieFunction : ", {
value: getMovieFunctionEndpoint,
});
}