JSPM

  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q103410F
  • License MIT

Package Exports

  • @minimonolith/infra
  • @minimonolith/infra/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@minimonolith/infra) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@minimonolith/infra

codecov

@minimonolith/infra is a library based on @minimonolith/lib and aws-cdk-lib to implement modular and validated infrastructure

Example Project

Here's an example project using @minimonolith/infra:

.
├── package.json
├── .gitignore
├── deploy.js                 // file that will be called when executing `cdk deploy`
├── test.js                   // test infrastructure specified at deploy.js (does not deploy it)
└── cdk.json                  // aws cdk configuration (specifies deploy.js to be used as deployment file)

deploy.js

This file defines the resources to be deployed:

// deploy.js
import * as INFRA from '@minimonolith/infra';

// Project definition

const app = await INFRA.cdk.postApp();
const projectName = 'TODO';
const env = await INFRA.env.get({ name: 'qa' });
const projectContext = { app, projectName, env }

// Networking

const cidrBlock = '172.16.0.0/12';
const privateAPI = true;
const albAPI = true;
const apiBalancingType = 'ip';
const apiPort = 80;

const vpcContext = await INFRA.networkingVPC.post({ ...projectContext,
  cidrBlock, privateAPI, albAPI, apiPort, apiBalancingType });

// DB

const minCapacity=1, maxCapacity=64, qaAutoPause=true;

const dbContext = await INFRA.dbMySQL.post({ ...projectContext,
  vpcContext, minCapacity, maxCapacity, qaAutoPause });

// Backend

const cpu = '512';
const memory = '1G';
const desiredCount = 1;
const externalImage = 'httpd';

const apiContext = await INFRA.apiFargate.post({ ...projectContext,
  vpcContext, cpu, memory, desiredCount, externalImage });

test.js

Here deploy.js is tested:

// test.js

describe('test deploy', () => {
  test('test deploy', async () => {
    await import('./deploy.js');
  });
});

cdk.json

This is the cdk.json configuration

{
  "app": "node deploy.js",
  "watch": {
    "include": [
      "**"
    ],
    "exclude": [
      "README.md",
      "cdk*.json",
      "jest.config.js",
      "package*.json",
      "yarn.lock",
      "node_modules",
      "test"
    ]
  },
  "context": {
    "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
    "@aws-cdk/core:stackRelativeExports": true,
    "@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
    "@aws-cdk/aws-lambda:recognizeVersionProps": true,
    "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true,
    "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
    "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
    "@aws-cdk/core:checkSecretUsage": true,
    "@aws-cdk/aws-iam:minimizePolicies": true,
    "@aws-cdk/core:target-partitions": [
      "aws",
      "aws-cn"
    ]
  }
}