How to properly await for @onready vars?

You could try using Node.is_node_ready() and await for its Node.ready signal. Something like:

func update_shield(max_value, value):
	if not shield_bar.is_node_ready():
		await shield_bar.ready

	print('found shield bar')
	shield_bar.max_value = max_value
	shield_bar.value = value