Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »

cdk-serverless-lamp

1.4.41 • Public • Published

awscdk-jsii-template NPM version PyPI version Release

Welcome to cdk-serverless-lamp

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

Howto

Create a new Laravel project with AWS CDK

$ mkdir serverless-lamp && cd serverless-lamp
# create cdk and codebase directories for AWS CDK and Laravel project 
$ mkdir cdk codebase
# create the new Laravel project with docker 
$ docker run --rm -ti \
  --volume $PWD:/app \
  composer create-project --prefer-dist laravel/laravel ./codebase
# install bref/bref and bref/laravel-bridge in the vendor 
cd codebase
$ docker run --rm -ti \
  --volume $PWD:/app \
  composer require bref/bref bref/laravel-bridge
# initialize the AWS CDK project 
cd ../cdk
$ cdk init -l typescript
# install the cdk-severless-lamp npm module 
$ yarn add cdk-serverless-lamp

Now your directories should look like this:

.
├── cdk
└── codebase

where cdk is for the AWS CDK and codebase for Laravel project.

AWS CDK sample

Building your serverless Laravel with ServerlessLaravel construct:

Update ./cdk/lib/cdk-stack.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:

# see the difference before the deployment 
$ cdk diff
# deploy 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:

laravel-welcome

Amazon Aurora support

Use DatabaseCluster to create the your database cluster:

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,
      },
    });
  }
}

Local Development

Create docker-compose.yml with the following content:

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 http://localhost:8000.

(more information can be found in bref documentation)

Install

npm i cdk-serverless-lamp

DownloadsWeekly Downloads

69

Version

1.4.41

License

Apache-2.0

Unpacked Size

123 kB

Total Files

15

Last publish

Collaborators

  • avatar