Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@genie-solutions/gdk

Package Overview
Dependencies
Maintainers
7
Versions
89
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@genie-solutions/gdk

Common AWS CDK constructs for Genie

  • 1.0.1
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
36
Maintainers
7
Weekly downloads
 
Created
Source

GDK - Genie Constructs Library for AWS CDK

Set of reusable constructs for deploying AWS resources to Gentu and Platform.

Installing

Installing this library into your project

$ npm i @genie-solutions/gdk

Dependencies

IMPORTANT:

Major version 1.0.0 is built using version 2.0.0 of the AWS CDK. If you are using this library fresh, please use version 1.0.0 of the library and version 2.0.0+ of the AWS CDK. Legacy instructions remain below for supporting version 0.40.0.

LEGACY SUPPORT ONLY

This library is built using using version 1.151.0 of the AWS CDK. To ensure that you are able to use cdk and this library, please pin your cdk version.

$ npm i -g aws-cdk@1.151.0

Again also if you are using native CDK packages in your project, please ensure that you are using the same version. Example: S3 package...

$ npm install @aws-cdk/aws-s3@1.151.0

Structure

Modules

The GDK Library is organized into several modules but are packaged up into a single asset. The structure of the project is as follows:

  • src/xxx: where xxx represents the service component of an AWS CDK package name. Example: src/ecs will contain constructs that are extensions of aws-ecs constructs.
  • src/base-infra: this contains base infrastructure constructs that are imports of native CloudFormation templates.

Module Contents

Modules contain the following types:

  • Constructs - All higher-level constructs in this library.
  • Other Types - All non-construct classes, interfaces, structs and enums that exist to support the constructs.

Module Tests

The tests for the library should follow the same structure as the src folder.

How to publish a new version

After your branch has been merged into master:

  1. Push your feature onto master
  2. Tag your commit, like so: git tag -a v<major>.<minor>.<patch> -m "<major>.<minor>.<patch>" -- eg. git tag -a v0.31.14 -m "0.31.14" (comment here is very important)
  3. Push tag to master git push --tags origin master

Gitlab pipeline will publish new version.

Useful commands

  • npm run build compile typescript to js
  • npm run watch watch for changes and compile
  • npm run test perform the jest unit tests

Examples

Prerequisites

These variables are used to namespace all resources, generate stack names, tags and to ensure that the correct base infrastructure is targeted. They form the base of a GenieStack type.

Required variables include:

  1. executionEnvironment
  2. featureEnvironment
  3. application
  4. service
  5. version

You can read more about environment strategy on the wiki.

Example 1

This example creates an empty stack in which to build upon.

// The GDK includes a util module that allows developers to map environment variables to variables
export const configFromEnv =
  fromEnv({
    executionEnvironment: "EXECUTION_ENVIRONMENT",
    featureEnvironment: "FEATURE_ENVIRONMENT",
    application: "APPLICATION",
    service: "SERVICE",
    version: "VERSION",
    containerImage: "CONTAINER_IMAGE"
  });

// The service stack where everything is created
export class MyWebServiceStack extends GenieStack {
  constructor(scope: Construct, id: string, props: BaseServiceStackProps) {
    super(props, scope, id);

  }
}

const app = new App();

// Service stack is instantiated with the properties pulled from environment variables
new MyWebServiceStack(app, "MyWebServiceStack", {
  ...configFromEnv
});

app.synth();

Example 2

Building upon Example 1, this code contains a number of constructs in use, GenieFargateTaskDefinition and GenieFargateService. You will notice that props is passed around to each construct. This variable contains the minimum required variables as mentioned in Prerequisites, which again helps namespace, tag and target the correct infrastructure.


export class MyWebServiceStack extends GenieStack {
  constructor(scope: Construct, id: string, props: BaseServiceStackProps) {
    super(props, scope, id);

    const myWebServiceTaskDef = new GenieFargateTaskDefinition(this, "EcsTaskDefinition", {
      ...props,
      memoryLimitMiB: 1024,
      cpu: 512,
    });

    myWebServiceTaskDef.addGenieContainer("MyWebContainer", {
      imageName: configFromEnv.containerImage,
      port: 8086,
      cpu: 512,
      memoryLimitMiB: 1024,
      environment: {
        "THIRD_PARTY_API_URL": "http://www.somethirdparty.com/api/v2"
      },
      ...props
    });

    new GenieFargateService(this, "EcsService", {
      ...props,
      taskDefinition: myWebServiceTaskDef,
      desiredCount: 2,
      isPublic: true,
      healthCheck: {
        path: "/health",
        port: "8086"
      }
    });
  }
}

FAQs

Package last updated on 10 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc