Currently when deploying with forge I can choose which region i want the server to be setup in. In my case I choose Ireland. I then deploy 2 app servers and sit them behind a load balancer. But there is no way to specify which availability zone they are created in.
As far as I know there are 3 availability zones for Ireland - eu-west-1a, eu-west-1b and eu-west-1c.
After checking in AWS console my app servers are both created in eu-west-1b.
Is there any way to ensure each server is in a different availability Zone in Ireland region and remove single point of failure?
If creating server in forge there is no way to control which availability zones they are created in. The best way and to have more control is to manually setup EC2 server with Ubuntu from AWS control panel. This way you can set up in your own VPC and specify which subnet and zones the servers will sit in.
Then use laravel custom VPS option to obtain code for provisioning the server. Logging into the EC2 manually and running this code will provision for Laravel and and then Forge can be used as normal.
I then manually create an elastic load balancer in AWS and setup for https etc.
I don't provision a server as a Load balancer in forge as it only allows load balancing to servers in the same availability zone.
If you create your VPCs in advance, instead of letting Forge create them for you, there's a little trick to targeting a specific availability zone in Forge. While a VPC spans a whole AWS region, each subnet can only belong in a single availability zone. So by creating your VPC manually from the AWS console, you can then also create a subnet in the specific AZ you want to target.
Now, back in the Forge control panel, you can pick the corresponding subnet when creating a new server and determine exactly which AZ in which it will be provisioned. I wrote it up in a lot more detail here, along with some other AWS tips: https://joelclermont.com/post/aws-tips-for-forge-users/