Giter Club home page Giter Club logo

cdk-serverless-lamp's Introduction

NPM version PyPI version Build

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)

cdk-serverless-lamp's People

Contributors

amazon-auto avatar chris-lee-lb avatar dependabot[bot] avatar github-actions[bot] avatar pahud avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.