A JSII construct lib to build AWS Serverless LAMP with AWS CDK
npm install cdk-serverless-lamp

!Build
cdk-serverless-lamp is a JSII construct library for AWS CDK that allows you to deploy the New Serverless LAMP Stack running PHP Laravel Apps by specifying the local laravel directory.
By deploying the ServerlessLaravel and DatabaseCluster, the following resources will be created:
1. Amazon API Gateway HTTP API
2. AWS Lambda custom runtime with Bref runtime support
3. Amazon Aurora for MySQL database cluster with RDS proxy enabled
Create a new Laravel project with AWS CDK
``sh`
$ mkdir serverless-lamp && cd serverless-lampcreate cdk and codebase directories for AWS CDK and Laravel project
$ mkdir cdk codebasecreate the new Laravel project with docker
$ docker run --rm -ti \
--volume $PWD:/app \
composer create-project --prefer-dist laravel/laravel ./codebaseinstall bref/bref and bref/laravel-bridge in the vendor
$ cd codebase
$ docker run --rm -ti \
--volume $PWD:/app \
composer require bref/bref bref/laravel-bridgeinitialize the AWS CDK project
$ cd ../cdk
$ cdk init -l typescriptinstall the cdk-severless-lamp npm module
$ yarn add cdk-serverless-lamp
Now your directories should look like this:
``
.
├── cdk
└── codebasecdk
where is for the AWS CDK and codebase for Laravel project.
Building your serverless Laravel with ServerlessLaravel construct:
Update ./cdk/lib/cdk-stack.ts
`ts
import * as cdk from '@aws-cdk/core';
import * as path from 'path';
import { ServerlessLaravel } from 'cdk-serverless-lamp';
export class CdkStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new ServerlessLaravel(this, 'ServerlessLaravel', {
brefLayerVersion: 'arn:aws:lambda:us-east-1:209497400698:layer:php-74-fpm:12',
laravelPath: path.join(__dirname, '../../codebase'),
});
}
}
`
deploy the CDK stack:
`sh`see the difference before the deployment
$ cdk diffdeploy it
$ cdk deploy
On deploy complete, the API Gateway URL will be returned in the Output. Click the URL and you will see the Laravel landing page:
Use DatabaseCluster to create the your database cluster:
`ts
import * as cdk from '@aws-cdk/core';
import { InstanceType, Vpc } from '@aws-cdk/aws-ec2';
import * as path from 'path';
import { ServerlessLaravel, DatabaseCluster } from 'cdk-serverless-lamp';
export class CdkStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const vpc = new Vpc(this, 'Vpc',{ maxAzs: 3, natGateways: 1 } )
// the DatabaseCluster sharing the same vpc with the ServerlessLaravel
const db = new DatabaseCluster(this, 'DatabaseCluster', {
vpc,
instanceType: new InstanceType('t3.small'),
rdsProxy: true,
})
// the ServerlessLaravel
new ServerlessLaravel(this, 'ServerlessLaravel', {
brefLayerVersion: 'arn:aws:lambda:us-east-1:209497400698:layer:php-74-fpm:12',
laravelPath: path.join(__dirname, '../../codebase'),
vpc,
databaseConfig: {
writerEndpoint: db.rdsProxy!.endpoint,
},
});
}
}
`
Create docker-compose.yml with the following content:
`docker-compose`
version: "3.5"
services:
web:
image: bref/fpm-dev-gateway
ports:
- "8000:80"
volumes:
- ./laravel:/var/task
depends_on:
- php
environment:
HANDLER: public/index.php
php:
image: bref/php-74-fpm-dev
volumes:
- ./laravel:/var/task
and run this command docker-compose up -d` and now you can access
_(more information can be found in bref documentation)_