machine-to-cloud-connectivity-framework
machine-to-cloud-connectivity-framework copied to clipboard
Machine to Cloud Connectivity Framework is a reference implementation that enables connectivity between equipment supporting Open Protocol Communication Data Access (OPC DA), Open Protocol Communicati...
Machine to Cloud Connectivity Framework | 🚧 Feature request | 🐛 Bug Report | ❓ General Question
Note: If you want to use the solution without building from source, navigate to Solution Landing Page.
Table of Content
- Solution Overview
- Architecture Diagram
- AWS CDK and Solutions Constructs
- Customizing the Solution
- Prerequisites for Customization
- 1. Clone the repository
- 2. Declare environment variables
- Unit Test
- Build
- Deploy
- Prerequisites for Customization
- Collection of operational metrics
- License
- NOTES
Solution Overview
The Machine to Cloud Connectivity Framework solution helps factory production managers connect their operational technology assets to the cloud, providing robust data ingestion from on-premises machines into the AWS cloud. This solution allows for seamless connection to factory machines using either the OPC Data Access (OPC DA) protocol or the OPC Unified Architecture (OPC UA) protocol.
This solution provides an ability to deploy AWS IoT Greengrass core devices to industrial gateways and integration with AWS IoT SiteWise, so you can ingest OPC DA and OPC UA telemetry data into AWS IoT SiteWise. This solution also provides the capability to store telemetry data in an Amazon Simple Storage Service (Amazon S3) bucket, AWS IoT MQTT topic, and Amazon Timestream, thereby allowing for analysis of factory machine data for insights and advanced analytics.
This solution is a framework for connecting factory equipment, allowing you to focus on extending the solution's functionality rather than managing the underlying infrastructure operations. For example, you can push the equipment data to Amazon S3 using Amazon Kinesis Data Streams and Amazon Kinesis Data Firehose and run machine learning models on the data for predictive maintenance, or create notifications and alerts.
For more information and a detailed deployment guide, visit the Machine to Cloud Connectivity Framework solution page.
Architecture Diagram

AWS CDK and Solutions Constructs
AWS Cloud Development Kit (AWS CDK) and AWS Solutions Constructs make it easier to consistently create well-architected infrastructure applications. All AWS Solutions Constructs are reviewed by AWS and use best practices established by the AWS Well-Architected Framework. This solution uses the following AWS Solutions Constructs:
- aws-cloudfront-s3
- aws-iot-sqs
- aws-kinesisstreams-kinesisfirehose-s3
- aws-kinesisstreams-lambda
- aws-lambda-dynamodb
- aws-sqs-lambda
In addition to the AWS Solutions Constructs, the solution uses AWS CDK directly to create infrastructure resources.
Customizing the Solution
Prerequisites for Customization
NOTES
On some operating systems, Python virtual environment must be installed manually
sudo apt install python3.10-venv
If using Amazon linux, use the following commands instead
yum -y install krb5-devel
yum -y install gcc
yum -y install python3-devel
1. Clone the repository
git clone https://github.com/aws-solutions/machine-to-cloud-connectivity-framework.git
cd machine-to-cloud-connectivity-framework
export MAIN_DIRECTORY=$PWD
2. Declare environment variables
export DIST_BUCKET_PREFIX=my-bucket-prefix # S3 bucket name prefix
export SOLUTION_NAME=my-solution-name
export VERSION=my-version # version number for the customized code
export REGION=aws-region-code # the AWS region to test the solution (e.g. us-east-1)
Note: When you define DIST_BUCKET_PREFIX, a randomized value is recommended. You will need to create an S3 bucket where the name is <DIST_BUCKET_PREFIX>-<REGION>. The solution's CloudFormation template will expect the source code to be located in a bucket matching that name.
Unit Test
After making changes, run unit tests to make sure added customization passes the tests:
cd $MAIN_DIRECTORY/deployment
chmod +x run-unit-tests.sh
./run-unit-tests.sh
Build
cd $MAIN_DIRECTORY/deployment
chmod +x build-s3-dist.sh
./build-s3-dist.sh $DIST_BUCKET_PREFIX $SOLUTION_NAME $VERSION $SHOULD_SEND_ANONYMOUS_USAGE $SHOULD_TEARDOWN_DATA_ON_DESTROY
To consent to sending anonymous usage metrics, use "Yes" for $SHOULD_SEND_ANONYMOUS_USAGE To have s3 buckets, timestream database torn down, use "Yes" for $SHOULD_TEARDOWN_DATA_ON_DESTROY
Deploy
- (Optional) Check bucket ownership for anti-sniping protection
export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws s3api head-bucket --bucket ${DIST_BUCKET_PREFIX}-${REGION} --expected-bucket-owner $ACCOUNT_ID
- Deploy the distributable to the Amazon S3 bucket in your account. Make sure you are uploading all files and directories under
deployment/global-s3-assetsanddeployment/regional-s3-assetsto<SOLUTION_NAME>/<VERSION>folder in the<DIST_BUCKET_PREFIX>-<REGION>bucket (e.g.s3://<DIST_BUCKET_PREFIX>-<REGION>/<SOLUTION_NAME>/<VERSION>/). CLI based S3 command to sync the buckets is:aws s3 sync $MAIN_DIRECTORY/deployment/global-s3-assets/ s3://${DIST_BUCKET_PREFIX}-${REGION}/${SOLUTION_NAME}/${VERSION}/ aws s3 sync $MAIN_DIRECTORY/deployment/regional-s3-assets/ s3://${DIST_BUCKET_PREFIX}-${REGION}/${SOLUTION_NAME}/${VERSION}/ - Get the link of the solution template uploaded to your Amazon S3 bucket.
- Deploy the solution to your account by launching a new AWS CloudFormation stack using the link of the solution template in Amazon S3.
CLI based CloudFormation deployment:
export [email protected]
aws cloudformation create-stack \
--profile ${AWS_PROFILE:-default} \
--region ${REGION} \
--template-url https://${DIST_BUCKET_PREFIX}-${REGION}.s3.amazonaws.com/${SOLUTION_NAME}/${VERSION}/machine-to-cloud-connectivity-framework.template \
--stack-name m2c2 \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \
--parameters \
ParameterKey=UserEmail,ParameterValue=$INITIAL_USER \
ParameterKey=LoggingLevel,ParameterValue=ERROR \
ParameterKey=ExistingKinesisStreamName,ParameterValue="" \
ParameterKey=ExistingTimestreamDatabaseName,ParameterValue="" \
ParameterKey=ShouldRetainBuckets,ParameterValue=True
Collection of operational metrics
This solution collects anonymous operational metrics to help AWS improve the quality and features of the solution. For more information, including how to disable this capability, please see the implementation guide.
License
Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0