I found that the data pipeline had ended up using a private subnet - I think it just picked the one whose subnet ID came first when sorted - and this meant the instances just got stuck in the "waiting for runner" state.
The default behaviour remains the same, but allows a subnet ID to be passed in. In my case, I could now specify a public subnet and the pipeline ran successfully.
I found that the data pipeline had ended up using a private subnet - I think it just picked the one whose subnet ID came first when sorted - and this meant the instances just got stuck in the "waiting for runner" state.
The default behaviour remains the same, but allows a subnet ID to be passed in. In my case, I could now specify a public subnet and the pipeline ran successfully.