@cpmech/az-cdk

AmaZon AWS-CDK tools

Usage no npm install needed!

<script type="module">
  import cpmechAzCdk from 'https://cdn.skypack.dev/@cpmech/az-cdk';
</script>

README

Constructs and stacks for the AmaZon-AWS CDK

az-cdk implements some constructs for use with the fantastic AWS CDK tool.

Installation

npm install @cpmech/az-cdk

Examples

Website

Creates Route53, S3, and Cloudfront resources, in addition of taking care of all permissions.

NOTE: The hostedZoneId and certificateArn are optional - in this case, a new Route53 zone is created.

import { App, Stack } from '@aws-cdk/core';
import { WebsiteConstruct } from '@cpmech/az-cdk';

const app = new App();

const stack = new Stack(app, 'WebsiteStack');

new WebsiteConstruct(stack, 'Website', {
  domain: 'mydomain.com',
  comment: 'My Awesome Website',
  hostedZoneId: '<hosted-zone-id>',
  certificateArn: '<arn-of-certificate>',
});

Cognito

Creates a Cognito user pool, in addition of taking care of all permissions.

import { App, Stack } from '@aws-cdk/core';
import { CognitoConstruct } from '@cpmech/az-cdk';

const app = new App();

const stack = new Stack(app, 'CognitoStack');

new CognitoConstruct(stack, 'Cognito', {
  emailSendingAccount: 'info@mydomain.com',
  poolName: 'my-users',
});

Receive Emails (SES, SNS, and SQS)

Creates S{E,N,Q}S resources to receive emails, in addition of taking care of all permissions.

import { App, Stack } from '@aws-cdk/core';
import { ReceiveEmailSQSConstruct } from '@cpmech/az-cdk';

const app = new App();

const stack = new Stack(app, 'EmailsStack');

new ReceiveEmailSQSConstruct(stack, 'EmailSQS', {
  emails: ['admin@mydomain.com', 'tester@mydomain.com'],
});

Lambda and API Gateway (service)

Creates lambda functions and the API Gateway, in addition of taking care of all permissions.

NOTE: customDomain is optional.

import { App, Stack } from '@aws-cdk/core';
import { LambdaApiConstruct, LambdaLayersConstruct } from '@cpmech/az-cdk';

const app = new App();

const stack = new Stack(app, 'ServiceStack');

new LambdaApiConstruct(stack, 'API', {
  gatewayName: 'API',
  cognitoId: '<cognito-user-pool-id>',
  lambdas: [
    {
      filenameKey: 'index',
      handlerName: 'handler',
      httpMethods: ['GET', 'POST'],
      route: 'helloworld',
    },
  ],
  layers: new LambdaLayersConstruct(stack, 'Layers'),
  customDomain: {
    prefixedDomain: 'api.mydomain.com',
    certificateArn: '<arn-of-certificate>',
    r53HostedZoneId: '<hosted-zone-id>',
  },
  dirDist: 'dist',
});

Pipeline for Website

Creates a CodePipeline to update a website.

import { App } from '@aws-cdk/core';
import { WebsitePipelineStack, ssmSecret } from '@cpmech/az-cdk';

const app = new App();

new WebsitePipelineStack(app, 'WebsitePipelineStack', {
  githubRepo: '<github-repo>',
  githubUser: '<github-user>',
  githubSecret: ssmSecret('<ssm-param-github>'),
  websiteBucketName: 'mydomain.com-website',
  cloudfrontDistributionId: '<cloudfront-id>',
  assetsDir: 'public',
  notificationEmails: ['my@email.com'],
});

Pipeline for Lambda (service)

Creates a CodePipeline to update a service stack.

import { App, Stack } from '@aws-cdk/core';
import { PipelineStack, ssmSecret } from '@cpmech/az-cdk';

const app = new App();

new PipelineStack(app, 'PipelineStack', {
  githubRepo: '<github-repo>',
  githubUser: '<github-user>',
  githubSecret: ssmSecret('<ssm-param-github>'),
  services: ['apigateway', 'lambda'],
  notificationEmails: ['my@email.com'],
});