What is AWS EC2 I3?
Amazon Web Services Elastic Cloud Computing is a service that let’s anyone with a credit card to rent a virtualized server from Amazon. To cater to different clients, AWS provides various instance types that are either general or specific purpose built (Fig #1). This blog post is going to talk about a storage optimized instance, a.k.a. I3 instance type family.
Storage Optimized instance or I3 instance family provides a storage optimized instances designed for high transactions, low latency workloads, and high IOPS. I3 is built with Non-Volatile Memory Express (NVMe) SSD to achieve it. If you get confused with NVME, this is nothing but a promise not to lose data while the power it out. Overall, I3 instance family main purpose is storage intensive application at a low cost. The following matrix provides different bundled resources (Fig #2).
I3 instance family looks solid, so what is the problem? The problem is that NVMe SSD storage is attached to the instance (vs. EBS volume network attached) and is not persistent. Stopping this instance for example to save money would result in loss of data on that attached drive. Yes, you are going to permanently lose an access to that I3 drive, which is akin to loss of data. Now, if that drive was used for some temporary storage or it’s data is “replenishable”, you are fine. At the same time, if you were to store some permanent and unique data, you are in big-big trouble.
Interestingly enough, any EBS volume network attached storage doesn’t have that problem. You can stop and restart other instance types of EC2, and the EBS volume with it’s data will be back online with the instance.
Don’t use I3 attached storage unless this is part of the plan, complement it with EBS volumes or be prepared to lose data. Be aware of the I3 storage that you are using – this storage is not persistent. It would be nice if AWS could add some appropriate wording, such as “This storage is not persistent, use it at your own risk!”.
In my humble opinion, I3 is not good for regular database applications. At the same time, it will do just fine for some NoSQL scale-out databases.
This blog post is partially based on the following resources: