This repository showcases of how to use nix
to build a VM image (with NVIDIA GPU support) for AWS deploy everything using terraform
. The example in this repository
-
nixos-generators is used to generate a VM image for AWS.
-
NVIDIA configuration lives
./nvidia.nix
-
AWS resources required to make this work
- S3 bucket for storing the VM image
- IAM role for the VM to access the S3 bucket
- EBS snapshot for the VM image
- AMI for the VM image
- Security group for the VM
- EC2 instance for the VM
nix build .#amazon --print-out-path
# Output: /nix/store/h28zy1gnyl6jmwghza1z349x0mh73w57-nixos-amazon-image-24.11.20240906.574d1ea-x86_64-linux
ls /nix/store/h28zy1gnyl6jmwghza1z349x0mh73w57-nixos-amazon-image-24.11.20240906.574d1ea-x86_64-linux
# Output: nix-support nixos-amazon-image-24.11.20240906.574d1ea-x86_64-linux.vhd
# Modify the `vhd_image_source` in ./variables.tf variable with the path. In my case it's `/nix/store/h28zy1gnyl6jmwghza1z349x0mh73w57-nixos-amazon-image-24.11.20240906.574d1ea-x86_64-linux/nixos-amazon-image-24.11.20240906.574d1ea-x86_64-linux.vhd`
NOTE: modify the necessary variables in variables.tf
before running the following commands.
terraform apply -auto-approve
# This will take a while ~10 minutes. Most of the time is spent uploading the VHD to S3 and creating the AMI.
# To destroy the resources run: `terraform destroy -auto-approve
Some things that this repository could use help with:
- Better documentation
- Improved terraform structure
- Home-manger for user configuration