In my journey from Linux Admin to DevOps Engineer, it has been interesting to see the differences between on-premise and Google Cloud environments.
In both environments, Ansible was used to deploy and provision the virtual machine and required set of applications. Moving to the GCP environment, deploying VMs takes a bit longer than on-premise. There was a need to be able to quickly roll back a freshly deployed virtual machine for multiple tests.
This is an overview of the process for creating and rolling back to snapshots.
*Note: disk storage created in the cloud will have a cost, so be aware of your cloud budget when creating snapshots, and clean them up often.
# Log into gcloud auth gcloud auth login # Check the VM instance gcloud beta compute instances list --filter="name~'$vmname'" # Create a snapshot gcloud compute disks snapshot $diskname --zone=$zonename --snapshot-names=$snapshotname --storage-location=$storagelocation --description="snapshot create for $vmname" # List snapshots gcloud compute snapshots list --filter="name~'^$snapshotname'" | awk '{print $1}' | cut -f 1 # Describe the VM instance in more detail gcloud beta compute instances describe $vmname --zone=$zonename # Shut down the VM before next steps gcloud compute instances stop $vmname # Detach the VM's disk gcloud beta compute instances detach-disk $vmname --zone=$zonename --disk $diskname # Create a new disk from the snapshot gcloud compute disks create $diskname_new --source-snapshot $snapshotname --zone=$zonename # Attach the disk created from previous step as the new bootable disk gcloud beta compute instances attach-disk $vmname --disk $diskname_new --boot --zone=$zonename # Configure disk auto-delete for the restored VM when destroyed gcloud compute instances set-disk-auto-delete $vmname --disk=$diskname_new # Delete an old disk - use caution - it will prompt you gcloud compute disks delete $diskname --zone=$zonename # Restart the VM gcloud compute instances start $vmname --zone=$zonename