Git Product home page Git Product logo

monsoon-samples's Introduction

monsoon-samples

This repository contains code samples that the Monsoon Engineering have shared in their blog posts.

Code Samples

An example of running a TypeScript NodeJS AWS Lambda Function within AWS Serverless Application Model (AWS SAM) via a Docker container. See our article "Running AWS SAM in a Docker Container" for more detail.

A detailed example of CI/CD for deploying multiple services from a single MonoRepo using CodeBuild, CloudFormation and a couple of environment variables. Using a few combinations of these basic environment variables, it’s simple and straightforward to model a standard Git branching workflow, as well as allow each developer to have their own personal Cloud Native development environment! See our article "MonoRepo CI/CD using CodeBuild and Git Branching Workflow" for more detail.

monsoon-samples's People

Contributors

chris-ramon avatar mandrews avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

monsoon-samples's Issues

Template file not found when attempting to docker-compose up from master

To reproduce

git clone [email protected]:monsooncommerce/monsoon-samples.git
ahonnecke@pop-os:~/src/monsoon-samples$ cd docker-sam/$
ahonnecke@pop-os:~/src/monsoon-samples/docker-sam$ docker-compose up
Starting monsoon-samples_sam_app_1        ... done
Starting monsoon-samples_lambda_npm_app_1 ... done
Attaching to monsoon-samples_lambda_npm_app_1, monsoon-samples_sam_app_1
monsoon-samples_lambda_npm_app_1 exited with code 0
sam_app_1         | Error: Template file not found at /app/dist/template.yaml
monsoon-samples_sam_app_1 exited with code 1

Connecting to mysql container

I am trying to get my lambda connecting to my mysql container with docker-compose from my lambda with sam-local. Typically, I am able to access the database with the name of the mysql service, ie: mysql, but I get an error saying it's not found.

lambda_1           | 2019-06-26T12:55:40.591Z	52fdfc07-2182-154f-163f-5f0f9a621d72	INFO	{ Error: getaddrinfo ENOTFOUND    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
lambda_1           |     --------------------
lambda_1           |     at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:144:48)
lambda_1           |     at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol/Protocol.js:51:23)
lambda_1           |     at PoolConnection.connect (/var/task/node_modules/mysql/lib/Connection.js:119:18)
lambda_1           |     at Pool.getConnection (/var/task/node_modules/mysql/lib/Pool.js:48:16)
lambda_1           |     at /var/task/node_modules/typeorm/driver/mysql/MysqlDriver.js:764:18
lambda_1           |     at new Promise (<anonymous>)
lambda_1           |     at MysqlDriver.createPool (/var/task/node_modules/typeorm/driver/mysql/MysqlDriver.js:761:16)
lambda_1           |     at MysqlDriver.<anonymous> (/var/task/node_modules/typeorm/driver/mysql/MysqlDriver.js:274:51)
lambda_1           |     at step (/var/task/node_modules/tslib/tslib.js:133:27)
lambda_1           |     at Object.next (/var/task/node_modules/tslib/tslib.js:114:57)
lambda_1           |   errno: 'ENOTFOUND',
lambda_1           |   code: 'ENOTFOUND',
lambda_1           |   syscall: 'getaddrinfo',
lambda_1           |   hostname: 'mysql',
lambda_1           |   host: 'mysql',
lambda_1           |   port: '3306',
lambda_1           |   fatal: true }

Below is my docker-compose file.

version: '3.6'
services:
  lambda_yarn_app:
    image: lambci/lambda:build-nodejs10.x
    volumes:
      - ../:/var/task

  lambda:
    build:
      context: .
      dockerfile: Dockerfile.sam
      args:
        PORT: '3001'
        SAM_CMD: start-lambda
    # we depend on the mysql backend
    depends_on:
      - mysql
    environment:
      - TYPEORM_HOST=mysql
      - TYPEORM_PORT=3306
      - AWS_ACCESS_KEY_ID
      - AWS_SECRET_ACCESS_KEY
    command: ["$PWD"]
    ports:
      - "3001:3001"
    volumes:
      - ../:/app
      - /var/run/docker.sock:/var/run/docker.sock

  api:
    build:
      context: .
      dockerfile: Dockerfile.sam
      args:
        PORT: '3000'
        SAM_CMD: start-api
    # we depend on the mysql backend
    depends_on:
      - mysql
    command: ["$PWD"]
    ports:
      - "3000:3000"
    volumes:
      - ../:/app
      - /var/run/docker.sock:/var/run/docker.sock
      
  mysql:
    # just using the base image
    image: mysql:5.6
    container_name: mysql
    # map the container port 3306 back to port 3333 on our host
    ports:
      - "3333:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: theusername
      MYSQL_PASSWORD: thepw
      MYSQL_DATABASE: subscription
    # the *.sql files in this dir will be run when the volume is first created
    volumes:
      - ./data:/docker-entrypoint-initdb.d
          

I found an example here: https://github.com/JontyC/SAM-Docker-MySQL/blob/master/docker-compose.yml, but it's using an outdated version of docker-compose.

network monsoon-samples_default not found

When I make a request to my function, get the following error in the docker log:
sam_app_1 | docker.errors.NotFound: 404 Client Error: Not Found ("network monsoon-samples_default not found")

I'm fairly new to docker, and I'm not sure where this network needs to be defined. I did not find any other references to monsoon-samples_default in the codebase.

Here's the full stacktrace:

sam_app_1  | 2019-06-17 20:16:04 Exception on /2015-03-31/functions/GetPresignedURLFunction/invocations [POST]
sam_app_1  | Traceback (most recent call last):
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/api/client.py", line 261, in _raise_for_status
sam_app_1  |     response.raise_for_status()
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/requests/models.py", line 940, in raise_for_status
sam_app_1  |     raise HTTPError(http_error_msg, response=self)
sam_app_1  | requests.exceptions.HTTPError: 404 Client Error: Not Found for url: http+docker://localhost/v1.35/networks/monsoon-samples_default
sam_app_1  | 
sam_app_1  | During handling of the above exception, another exception occurred:
sam_app_1  | 
sam_app_1  | Traceback (most recent call last):
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2311, in wsgi_app
sam_app_1  |     response = self.full_dispatch_request()
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1834, in full_dispatch_request
sam_app_1  |     rv = self.handle_user_exception(e)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1737, in handle_user_exception
sam_app_1  |     reraise(exc_type, exc_value, tb)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 36, in reraise
sam_app_1  |     raise value
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1832, in full_dispatch_request
sam_app_1  |     rv = self.dispatch_request()
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1818, in dispatch_request
sam_app_1  |     return self.view_functions[rule.endpoint](**req.view_args)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/samcli/local/lambda_service/local_lambda_invoke_service.py", line 145, in _invoke_request_handler
sam_app_1  |     self.lambda_runner.invoke(function_name, request_data, stdout=stdout_stream_writer, stderr=self.stderr)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/samcli/commands/local/lib/local_lambda.py", line 93, in invoke
sam_app_1  |     self.local_runtime.invoke(config, event, debug_context=self.debug_context, stdout=stdout, stderr=stderr)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/samcli/local/lambdafn/runtime.py", line 86, in invoke
sam_app_1  |     self._container_manager.run(container)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/samcli/local/docker/manager.py", line 96, in run
sam_app_1  |     container.create()
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/samcli/local/docker/container.py", line 134, in create
sam_app_1  |     network = self.docker_client.networks.get(self.network_id)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/models/networks.py", line 180, in get
sam_app_1  |     self.client.api.inspect_network(network_id, *args, **kwargs)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/utils/decorators.py", line 19, in wrapped
sam_app_1  |     return f(self, resource_id, *args, **kwargs)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/api/network.py", line 212, in inspect_network
sam_app_1  |     return self._result(res, json=True)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/api/client.py", line 267, in _result
sam_app_1  |     self._raise_for_status(response)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/api/client.py", line 263, in _raise_for_status
sam_app_1  |     raise create_api_error_from_http_exception(e)
sam_app_1  |   File "/usr/local/lib/python3.7/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
sam_app_1  |     raise cls(e, response=response, explanation=explanation)
sam_app_1  | docker.errors.NotFound: 404 Client Error: Not Found ("network monsoon-samples_default not found")
sam_app_1  | 2019-06-17 20:16:04 172.18.0.1 - - [17/Jun/2019 20:16:04] "POST /2015-03-31/functions/GetPresignedURLFunction/invocations HTTP/1.1" 500 -

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.