You need to generate the nonce exactly one time for each instance. Do this after the instance starts and before your workers run. If you need to share it among multiple workers, then write it to disk so they can all read it. To avoid storing it on actual disk, you can write it to some tmpfs filesystem like /var/run, which is part of the filesystem, but is just volatile storage.
The way I have been using ec2 auth (to be fair, not for very long), is that I have a script that runs at boot time and once a week (I use the @reboot and @weekly special cron times for this), which checks a location in /etc for a nonce file, and if it's not found creates it. That file is set to mode 400 so only root can read it. Then, the script uses the nonce to authenticate to vault. It gets a token with a 30 day lifetime and writes the token to /var/run/vault-instance-token, with a mode of 640, owner root, group "vault-users". So this token has a 30 day lifetime but will be renewed every seven days and upon any reboots by the @weekly cron. But the nonce file (in /etc) will never be recreated after the first run.
Then I put my application user into the vault-users group, so it can read the vault token, which it uses to access the secrets or create new tokens or whatever.
Shorter TTLs than what I'm currently using are probably more secure. But for now I'm opting for the relative safety of having plenty of leeway to fix/workaround things when problems occur.
The important thing is that your app shouldn't be messing with the nonce. Leave that to a single root-level process.