balenaOS, the lightweight, robust and reliable Linux-based embedded operating system running on over 100 different boards and designed specifically to run containers is now available to run in Amazon Web Services (AWS) Elastic Compute Cloud (EC2).
These Amazon Machine Images (AMIs) come preloaded with a cloud config application that provisions the instance into balenaCloud on boot when a config.json
file is provided via the instance's user data.
Build and release
balenaOS is built using a continuous integration and deployment (CI/CD) system that allows for each change to be automatically tested and deployed. For selected device types, the deployment includes publishing an AMIs to the us-east-1
AWS region, performing sanity checks, and making it publicly available.
Customers can then use these AMIs to create their own EC2 instances. AMIs can also be exported so they can be moved to any other supported AWS region.
Supported device types
AWS AMIs images are currently being deployed for the following device types:
- Generic x86_64 (GPT)
- Generic AARCH64
If your fleet is running a different but EC2 compatible device type, please contact us through our support channels and we can check whether Amazon Machine Images could be made available for your device type.
Listing available images
Using the AWS EC2 Dashboard
Published balenaOS images can be browsed in the AMI Catalog
section on the EC2 Dashboard:
Using the AWS command line interface (CLI)
You can list the available balenaOS AMIs using the following command:
aws ec2 describe-images --filters "Name=name,Values=balenaOS*"
Creating EC2 instances using balenaOS AMIs
Also, when setting up the instance networking configuration, specifically a subnet and security group, they need to comply with balena's
network requirements so that the instance can access essential services and be managed via balenaCloud.
Using the AWS EC2 Dashboard
From the AMI Catalog
you can select a balenaOS AMI and launch an EC2 instance as you would for a different Linux distribution.
The user data
field in the Advanced details
section can be used to provide a balena config.json
file as downloaded from the balenaCloud fleet. This will allow the EC2 instance to provision to balenaCloud on boot.
Using the AWS command line interface (CLI)
The following command can be used to create an EC2 instance using one of the AMIs as listed in the section above.
aws ec2 run-instances --image-id ${ami_id} \
--count 1 \
--instance-type ${instance_type} \
--tag-specifications \
"ResourceType=instance,Tags=[{Key=Name,Value=test-${instance_name}}]" \
"ResourceType=volume,Tags=[{Key=Name,Value=test-${instance_name}}]" \
--subnet-id "${subnet_id}" \
--security-group-ids "${security_group_id}" \
--user-data "file://config.json"
The following parameters need to be provided to the command above:
- ami_id: The AMI ID as listed with
aws ec2 describe-images
.
- instance_type: The AWS Nitro instance type. For example
m5.large
for x86_64 images or a1.large
for aarch64 images.
- instance_name: Arbitrary name used to tag the images.
- subnet_id: The ID of a subnet in your VPC of choice.
- security_group_id: The ID of an existing security group.
- config.json: A balenaCloud config.json device configuration file downloaded from the balenaCloud fleet dashboard.
Debugging balenaOS EC2 instances
A balenaOS EC2 instance correctly configured with a valid config.json
file should appear as online and be accessible via the balenaCloud dashboard after a few minutes.
If that is not the case, please use a config.json
configured for development mode and use the EC2 serial console to access to the serial console prompt of your instance. Direct AWS SSH access is not possible, but instances can be accessed via balenaCloud's cloudlink access, either via the dashbaord web console or in development mode using the balena CLI ssh command.
You can find out what other features we have in progress, let us know about what you'd like to see us developing and upvote features on our
public roadmap.