Skip to main content

Boilerplate for AWS IoT Greengrass

Build Status Python 2.7 Python 3.6 PyPI version

Greengo: a starter project to bring up (and clean-up!) AWS Greengrass setup for play and profit. If you followed the GreenGrass Getting Started Guide, here you find it automated, as code.

Work In Progress !

Describe your Greengrass group in group.yaml, write Lambda functions and device clients, provision Greengrass Core in Vagrant VM, deploy, and clean up.

Inspired by aws-iot-elf (Extremely Low Friction) and aws-greengrass-group-setup.

Pre-requisits

Set it Up

Install greengo from PyPI:

$ pip install greengo

Manually [*] download GreenGrassCore binary and place it in the ./downloads directory. Sign in to the AWS Management Console, navigate to the AWS IoT console, and download the AWS Greengrass Core Software from [Software section](https://us-west-2.console.aws.amazon.com/iotv2/home?region=us-west-2#/ software/greengrass). Yeah, manual sucks... I will automate it later. Or, submit your PR!

Play

  1. Create GreenGrass Group definition in AWS

    Fancy yourself with the group definitions in group.yaml, and run greengo:

    $ greengo create
    

    When runs with no errors, it creates all greengrass group artefacts on AWS and places certificates and config.json for GreenGrass Core in ./certs and ./config for Vagrant to use in provisioning on next step.

  2. Provision VM with GreenGrass Core with Vagrant

    $ vagrant up
    
  3. Deploy Greengrass Group to the Core on the VM.

    $ greengo deploy
    
  4. Check that everything works - see the "Check" section below.

  5. Profit !

  6. Work on it: create, change or remove Lambda functions, subscriptions, resources, and then update Greengrass.

    $ greengo update
    

Apply your changes by deploying it again:

```
$ greengo deploy
```
  1. Clean-up when done playing.

    Remove the group definitions on AWS:

    $ greengo remove
    

    Ditch the Vagrant VM:

    $ vagrant destroy
    

NOTE: If you want to create a new group but keep the Greengrass Core in the same Vagrant VM, you must update it with newly generated certificates and config.json file before deploying the group, and also reset deployment by getting the deployments/group/group.json back to virgin.

To do it: login to the Greengrass Vagrant VM and run /vagrant/scripts/update_ggc.sh on the Vagrant VM.

Details

Check the deployment

How to be sure everything something works? Follow this:

  1. Create greengrass group in AWS IoT: greengo create.
  2. Prepare GGC on the VM: update certificates, reset group.json, restart the greengrassd.
  3. Deploy with greengo deploy. Check:
    • Check the deployment status, should be 'Success'
  4. Explore Greengrass Core on your vagrant VM.
    • Login to Vagrant VM. You should nkow Vagrant but for the off case: vagrant ssh.
    • Check the GGC logs runtime.log and python_runtime.log under /greengrass/ggc/var/log/system. Runtime log should have a line about starting your lambda, or an error why the funtion is not started. In many cases (like not enough memory for Lambda), the deployment is 'Success' but the function fails to start. The errors can only be seen in the runtime.log. If the function starts successfully, runtime.log will contain a message like
    [2018-03-31T08:48:40.57Z][INFO]-Starting worker arn:aws:lambda:us-west-2:0000000000:function:GreengrassHelloWorld:12
    
    • Find and check your own Lambda log under /greengrass/ggc/var/log/system.
    • Check the greengrassd process: ps aux | grep greengrassd. Depending on deployment you might have several processes.
  5. In AWS console, check the MQTT topic with IoT MQTT Test page:
    REGION=`aws configure get region`; open https://$REGION.console.aws.amazon.com/iot/home?region=$REGION#/test
    
    Subscribe to the topic (e.g., hello/world), see the messages sent by the Greengrass Lambda function.

When something goes wrong

At this time greengo is just a prototype, a work-in-progress. Therefore it's not if but when somethings throws out, leaving the setup in half-deployed, and you gotta pick up the pieces. Remember:

  • You are still not worse off doing this manually: you at least have all the ARN and Id of all resources to clean-up.
  • DON'T DELETE .gg/gg_state.json file: it contains references to everything you need to delete. Copy it somewhere and use the Id and Arn of created resources to clean up the pieces.
  • Do what it takes to roll forward - if you're close to successful deployment, or roll-back - to clean things up and start from scratch.

Please pay forward: PR a patch to whatever broke for you to prevent it from happening again.

Development

Clone the project, set up your environment, install dependencies and setup greengo CLI in dev mode:

$ git clone https://github.com/dzimine/greengo.git
$ cd greengo

# For python2:
$ virtualenv venv
$ . venv/bin/activate

# For python3
$ python3 -m venv .venv3
$ . .venv3/bin/activate

$ pip install -r requirements.txt

# Install greengo into the virtualenv
$ pip install -e .

Run the unit tests:

pytest -s tests/

Release files for gud 2.0.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gud 2.0.18
File Size Uploaded
gud-2.0.18.tar.gz 19.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gud 2.0.18
File Interpreter ABI Platform
gud-2.0.18-py3-none-any.whl Python 3 none any Details

Total release size: 41.9 kB

Release files / gud-2.0.18.tar.gz

Download URL gud-2.0.18.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f25293f5a9a674fb23bb3bf6ed6178deebaae9064d97438820df588b5eb5ba78
BLAKE2b-256 checksum
How to use checksums
6bcec36e254b78394cb5a6c26e047a95b1ef37d3513947ed5ea78078c0c84990
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

Release files / gud-2.0.18-py3-none-any.whl

Download URL gud-2.0.18-py3-none-any.whl
Size 22.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e7f57942a8333a26d9343a19268f16645e6aab66367a996b63850a4b0e71930a
BLAKE2b-256 checksum
How to use checksums
e5021472c2c91dc13f1a9a23da253ebe6d9f8f5c58c501ae7bc06d554482a22d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

Release history Release notifications | RSS feed

This release

2.0.18 This release

2 release files

2.0.10

2 release files

2.0.9

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.2

3 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page