npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@genie-solutions/gdk

v1.0.1

Published

Common AWS CDK constructs for Genie

Downloads

369

Readme

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 [email protected]

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/[email protected]

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