Well… lots depend on how your system is architected and how much downtime you can afford. One approach is to just boot a system with a larger volume and rsync from old to new. Then switch floating IP (if you have one) between the two instances and you’re done. You’ll need to schedule some downtime with this approach, or at least put your application in read-only mode of some sort.
Is this a bootable volume or did you boot from an
ephemeral instance and attached a volume for data? if it’s an attached volume, take a snapshot, create a new volume from that snapshot, extend the new volume, detach the old volume from the running instance and attach the extended volume. It should work (haven’t tried.) If it’s a single bootable volume then you could create a new volume of the size you need, attach it to your running system, mount it and move some data to it. Change your application so that it uses the new volume to store its data.
Please share the architecture of your system in more details and we’ll try to give you suggestions on how to proceed.