AWS IoT Greengrass Lite is an optimized runtime option designed for constrained devices. Written in C for improved performance and reduced footprint.
Note
At launch, Greengrass Lite Runtime supports a subset of Greengrass v2 components, with plans for eventual feature parity in subsequent releases. See more details here.
AWS IoT Greengrass Lite now supports automatic deployment of components built into the device image, enabling embedded systems to have components ready immediately upon boot without requiring cloud connectivity.
- Zero-Copy Deployment: Components are placed directly in the Greengrass packages directory during image build, eliminating file copying overhead during deployment
- Automatic Service Management: Components are automatically deployed after fleet provisioning completes and the service disables itself to prevent re-runs
- Dual-Mode Support: Configurable between zero-copy (performance optimized) and traditional (compatibility) deployment modes
- PACKAGECONFIG Integration: Optional feature that can be enabled/disabled via
localdeploymentPACKAGECONFIG option
- Build Time: Components using
greengrass_lite_component.bbclassare installed directly into/var/lib/greengrass/packages/ - Boot Time: The
ggl.local-deployment.serviceautomatically deploys image-provided components after fleet provisioning - Runtime: Components start immediately and are managed by Greengrass Lite like any other component
To enable image-provided component deployment:
# In local.conf - enable the feature
PACKAGECONFIG:append:pn-greengrass-lite = " localdeployment"To create an image-provided component:
# In your component recipe
inherit greengrass_lite_component
COMPONENT_NAME = "com.example.MyComponent"
COMPONENT_VERSION = "1.0.0"
COMPONENT_ARTIFACTS = "my_script.py"
GREENGRASS_VARIANT = "lite"
# Optional: Use traditional mode instead of zero-copy
# GREENGRASS_LITE_ZERO_COPY = "0"To use traditional deployment mode (for updates/separate partitions):
# In local.conf or component recipe
GREENGRASS_LITE_ZERO_COPY:pn-your-component = "0"- Faster Boot: Components available immediately without cloud dependency
- Offline Operation: Components work even without internet connectivity
- Reduced Storage: Zero-copy mode eliminates duplicate file storage
- Better Performance: No file copying overhead during deployment
- Predictable Behavior: Components always deploy regardless of network conditions
Image-provided components must follow Greengrass Lite recipe format with case-sensitive lifecycle phases:
---
RecipeFormatVersion: '2020-01-25'
ComponentName: 'com.example.MyComponent'
ComponentVersion: '1.0.0'
ComponentType: 'aws.greengrass.generic'
Manifests:
- Platform:
os: 'linux'
runtime: "*"
Lifecycle:
run: | # Note: lowercase 'run'
python3 {artifacts:path}/my_script.py
Artifacts:
- URI: "my_script.py"
Unarchive: "NONE"Important
Lifecycle phases in Greengrass Lite are case-sensitive. Use lowercase (run:, startup:, bootstrap:) not uppercase (Run:, Startup:, Bootstrap:).
AWS IoT Greengrass has been integrated with prplWare and RDK Telco stacks using prpl foundation's open source Life Cycle Manager (LCM) containers. This integration provides:
- Simplified application development and deployment within LCM containers
- High-level software abstraction for CPE devices
- Cloud-to-edge integration capabilities
- Flexibility to choose between prplWare and RDK stacks
- Compliance with TR-369 and TR-181 standards
- Quick development and testing of new services
- Remote application deployment
- IoT device lifecycle management
- Managed Wi-Fi capabilities
- Network security management
- Mass telemetry support
- AI/ML capabilities at the edge
- Advanced analytics
- Supports Customer Premises Equipment (CPE)
- Compatible with TR369 compliant prplWare
- Works with RDKTelco software stacks
- Operates through prpl foundation's LCM containers
- Maintains native stack communications
Note
The integration is still a pending PR. See more details about how to get started with Greengrass lite on Prpl OS here:
These images are provided for AWS IoT Greengrass V2:
greengrass-bin: This installs Greengrass v2 without a configuration file. This can be used if you plan to add logic to configure Greengrass when the device runs for the first time
Greengrass v2 runs more elegantly using systemd. Add this to your local.conf or distribution to add support.
DISTRO_FEATURES += "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_init_manager = "systemd"
VIRTUAL-RUNTIME_initscripts = ""When enabling Fleet provisioning PACKAGECONFIG:pn-greengrass-bin = "fleetprovisioning", you need to provide claim certificates and configuration. You can do this in two ways:
Set the certificate paths and configuration in your local.conf, similar to how greengrass-lite works:
# Fleet provisioning configuration
IOT_DATA_ENDPOINT:pn-greengrass-plugin-fleetprovisioning = "your-iot-data-endpoint.iot.region.amazonaws.com"
IOT_CRED_ENDPOINT:pn-greengrass-plugin-fleetprovisioning = "your-credentials-endpoint.credentials.iot.region.amazonaws.com"
FLEET_PROVISIONING_TEMPLATE:pn-greengrass-plugin-fleetprovisioning = "YourFleetProvisioningTemplate"
IOT_ROLE_ALIAS:pn-greengrass-plugin-fleetprovisioning = "YourTokenExchangeRoleAlias"
AWS_REGION:pn-greengrass-plugin-fleetprovisioning = "us-west-2"
# Fleet provisioning certificate paths
CLAIM_CERT_PATH:pn-greengrass-plugin-fleetprovisioning = "/path/to/your/claim.cert.pem"
CLAIM_KEY_PATH:pn-greengrass-plugin-fleetprovisioning = "/path/to/your/claim.key.pem"
ROOT_CA_PATH:pn-greengrass-plugin-fleetprovisioning = "/path/to/your/AmazonRootCA1.pem"If you don't set the certificate paths, the recipe will create the certificate directory structure and warn you to manually provide the certificates at runtime in the target device at:
/greengrass/v2/claim-certs/claim.cert.pem
/greengrass/v2/claim-certs/claim.pkey.pem
/greengrass/v2/claim-certs/claim.root.pem
Make sure to provide the configuration through the variables in local.conf:
GGV2_DATA_EP = ""
GGV2_CRED_EP = ""
GGV2_REGION = ""
GGV2_PKEY = ""
GGV2_CERT = ""
GGV2_CA = ""
GGV2_THING_NAME = ""
GGV2_TES_RALIAS = ""with the addition of:
GGV2_FLEET_PROVISIONING_TEMPLATE_NAME = ""