Reputation: 1131
Let's say I have three environments - Development, Test and Production. I believe I have two options on how to set them up in AWS:
Which one of these approaches is considered best practice? What are the advantages or disadvantages of each, if any? I'm new to AWS and so far have been unable to find a definitive answer for which is best
Upvotes: 19
Views: 13629
Reputation: 17261
For a Production environment, the clear answer is to isolate it into its own AWS Account (not just a separate VPC). With Control Tower and SSO, the complexity of managing multiple AWS Accounts is not what it used to be.
For NON production environments like Dev, Staging, QA, Demo, etc, the answer is less clear. I would certainly like to hear from others. I can see 3 main ways to do it.
Each environment has its own AWS Account. This could used for Demo or UAT environments (beside Prod), but it seems overkill for other types of environments that are typically used internally for development. There is also an added cost to this solution.
Each environment has its own VPC, inside one shared AWS Account. This isolate each environment on a network level and ACL level.
Cons:
Pros:
Each environment has its own network stack, inside a shared VPC and AWS Account.
Cons:
Pros:
I'd love to hear feedback on the above.
Upvotes: 2
Reputation: 853
I came across a similar problem.
VPC per environment can create great separation between resources, so I would recommend having at least PROD and nonPROD (dev, test, uat) VPC.
Having one VPC per environment can cause an increase in costs:
(Of course, you can solve some issue using VPC Peering, but I do not think this is the proper solution in this case)
On the other side having one VPC per environment can create some benefits:
Upvotes: 9
Reputation: 238081
The good practice is to have production fully separated from test or development environments, which is best achieved by having separate accounts for them:
Accounts in the SDLC OU host non-production workloads and therefore should not have production dependencies from other accounts.
Since you are not using different account, the closest you can get (if you want to follow the good practice) is to have different VPCs (option 1). What's more, to further separate the environments, the VPCs could be in different regions.
Also I would encourage you to re-think why do you need any common resources (i.e. forth VPC). If you share something (e.g. RDS) between prod and devel through the forth VPC, it is a disaster waiting to happen.
Upvotes: 18