Skip to content

Latest commit

Β 

History

History
158 lines (119 loc) Β· 6.39 KB

README.md

File metadata and controls

158 lines (119 loc) Β· 6.39 KB

Examples Setup


        ┏━━━━━━━━━━━━━━━━━━━━┓               ┏━━━━━━━━━━━━━━━━━━━━┓
        ┃     Example 1      ┃               ┃     Example 2      ┃
        ┗━━━━━━━━━━━━━━━━━━━━┛               ┗━━━━━━━━━━━━━━━━━━━━┛

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                               β”‚     β”‚                               β”‚
  β”‚     AWS IoT - MQTT Broker     β”‚     β”‚     AWS IoT - MQTT Broker     β”‚
  β”‚                               β”‚     β”‚                               β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β–²                                     β–²
                  β”‚                                     β”‚
                  β”‚                                     β”‚
                  β–Ό                                     β–Ό
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                               β”‚     β”‚                               β”‚
  β”‚            Upparat            β”‚     β”‚           Mosquitto           β”‚
  β”‚                               β”‚     β”‚                               β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                        β–²
                                                        β”‚
                                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                              β”‚                    β”‚
                                              β”‚                    β”‚
                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                    β”‚                  β”‚ β”‚   <Other MQTT    β”‚
                                    β”‚     Upparat      β”‚ β”‚     Client>      β”‚
                                    β”‚                  β”‚ β”‚                  β”‚
                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

There are two slightly different examples:

  • docker-compose run upparat-alpn: Directly connect to AWS from Upparat. This is probably what you want unless you have more than one MQTT client connected to AWS IoT.
  • docker-compose run upparat-bridged: Connect to Mosquitto in bridged mode that is connected to AWS (advanced).

AWS Setup

  1. Create an AWS IoT Thing and download the certificates. We will reference the downloaded files as:
.cert.pem β†’ certfile
.private.key β†’ keyfile

# https://www.amazontrust.com/repository/AmazonRootCA1.pem
AmazonRootCA1.pem.txt β†’ cafile
  1. Create and attach the following policy to the Thing's certificate:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["*"],
      "Resource": ["*"],
      "Effect": "Allow"
    }
  ]
}
  1. Create an S3 bucket and upload a test file (i.e. your firmware file).
  2. Create a role for the principle IoT and with the following policy attached:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-upparat-jobs-bucket/*"
    }
  ]
}

Certificates

Create device certifactes.

Notes:

  • Client Certificate, --certificate-pem-outfile = certfile

Upparat via Mosquitto AWS Bridge

THING_NAME=YOUR_THING_NAME
BROKER=YOUR_BROKER_HOST

cp mosquitto/aws-bridge.conf.tmpl mosquitto/aws-bridge.conf
sed -i -e "s|@THING_NAME@|${THING_NAME}|g" mosquitto/aws-bridge.conf
sed -i -e "s|@BROKER@|${BROKER}|g" mosquitto/aws-bridge.conf
sed -i -e "s|@BASE_DIR@|${PWD}|g" mosquitto/aws-bridge.conf

Notes:

Run example:

docker-compose run upparat-bridged

Upparat

  1. Copy upparat/config.ini.tmpl to ./config.ini and replace the @DEVICE_ID@ placeholder:

    THING_NAME=YOUR_THING_NAME
    cp upparat/config.ini.tmpl upparat/config.ini
    sed -i -e "s|@THING_NAME@|${THING_NAME}|g" upparat/config.ini
    sed -i -e "s|@BASE_DIR@|${PWD}|g" upparat/config.ini
    
  2. Start upparat: upparat -c upparat/config.ini

Test Jobs

To use AWS Iot jobs with pre-signed S3 URLs create a S3 bucket and a corresponding role.

AWS CloudFormation Setup

  1. Install AWS CLI
  2. Deploy stack:
    aws cloudformation deploy --template-file upparat-test.yaml --capabilities CAPABILITY_IAM --stack-name upparat-test
    export UPPARAT_TEST_BUCKET_NAME=`aws cloudformation describe-stacks --stack-name  upparat-test --query "Stacks[0].Outputs[?OutputKey=='BucketName'].OutputValue" --output text`
    export UPPARAT_TEST_ROLE_ARN=`aws cloudformation describe-stacks --stack-name  upparat-test --query "Stacks[0].Outputs[?OutputKey=='RoleArn'].OutputValue" --output text`

Create AWS IoT Job

  1. Upload a test file:

    export UPPARAT_TEST_FILE="<MY_FILE>"
    aws s3 cp ${UPPARAT_TEST_FILE} s3://${UPPARAT_BUCKET_NAME}
  2. Set the following environment variables and run the script:

    export UPPARAT_TEST_THINGS="<COMA-SEPARATED-THING-ARNS>"
    python aws_jobs.py

Cleanup

aws s3 rm s3://${UPPARAT_BUCKET_NAME} --recursive
aws cloudformation delete-stack --stack-name upparat-test