Skip to main content
Test Double company logo
Services
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say Hello
Test Double logo
Menu
Services
BackGrid of dots icon
Services Overview
Holistic software investment consulting
Software Delivery
Accelerate quality software development
Product Management
Launch modern product orgs
Legacy Modernization
Renovate legacy software systems
Cycle icon
DevOps
Scale infrastructure smoothly
Upgrade Rails
Update Rails versions seamlessly
Technical Recruitment
Build tech & product teams
Technical Assessments
Uncover root causes & improvements
Case Studies
Solutions
Solutions
Accelerate Quality Software
Software Delivery, DevOps, & Product Delivery
Maximize Software Investments
Product Performance, Product Scaling, & Technical Assessments
Future-Proof Innovative Software
Legacy Modernization, Product Transformation, Upgrade Rails, Technical Recruitment
About
About
About
What's a test double?
Approach
Meeting you where you are
Founder's Story
The origin of our mission
Culture
Culture
Culture & Careers
Double Agents decoded
Great Causes
Great code for great causes
EDI
Equity, diversity & inclusion
Insights
Insights
All Insights
Hot takes and tips for all things software
Leadership
Bold opinions and insights for tech leaders
Developer
Essential coding tutorials and tools
Product Manager
Practical advice for real-world challenges
Say hello
Developers
Developers
Developers
DevOps & security

How to launch on AWS cloud without a DevOps team

Tools like Heroku, AWS Elastic Beanstalk, Render, and others are great for getting started – but, in the long run, can lead to some tough decisions. Here's a DevOps consultant's guide to building a platform on a cloud provider like AWS, including Terraform architecture.
James Zimmerman
|
January 8, 2025
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Launching a new application should be exciting, but with all of the options available, the last thing you want to spend too much time on is configuration and infrastructure.

Tools like Heroku, AWS Elastic Beanstalk, Render, and others are great for getting started – but, in the long run, can lead to some tough decisions.

Migrating away to develop a new feature can be very difficult. There are also cost concerns with allowing someone else to manage your infrastructure, as a price change from your provider may hit your business with unsustainable expenses or a need to migrate immediately.

As DevOps consultants at Test Double, we often encounter applications where the growth is stunted because of the early selection of a cloud platform.

This post is designed to help take the first step into building a platform for a 3-tier application your team can own and modify on a cloud provider, in this case AWS, without having to staff a full DevOps team.

That way, your developers can stay focused on developing but still have the full set of available tools AWS provides available to them for future growth of the application.

‍

Keys to choosing the right tools within AWS

As a consultant I've had multiple opportunities with various clients to help set up new infrastructure in areas where a full Infrastructure or DevOps team wasn't part of the near-term growth plans for the client.

I've come to understand that there are a few priorities when deploying a new application that help motivate my choices for which products and resources to use within AWS.

1. Costs need to be clearly communicated and easy to understand.

With some features provided to simplify application deployment in the cloud, it can be hard to understand where they're coming from or why you're paying for them.

It can be even more disheartening when your monthly bill goes from $10 to $1,000 with no warning – and even more so when understanding the course of that cost growth will take days to resolve, all while racking up new charges.

A few tips to make informed decisions about cost:

  • Avoid using tools which obfuscate what clients are paying for.
  • Create resources which can be easily tracked with predictable pricing structures
  • Establish processes for reacting to cost changes quickly.

2. Look for resources with substantial existing documentation to minimize time developers need to solve their cloud problem.

Clients need to understand their application's infrastructure and be able to debug, develop, and upgrade without a significant time or knowledge investment in the infrastructure itself.

To that end, avoid all-in-one solutions. These can inhibit growth or impact decisions, which will restrict the rate of future growth of an application.

The ideal scenario is to choose a platform that is not likely to be deprecated.

Seek out DevOps tools with extensive existing documentation – and even other examples where possible – to minimize the time developers need to answer questions, solve the cloud problem and then get back to doing what they do best: developing applications.

3. Record any changes with clear and precise documentation.

No matter what cloud platform you choose, changes will be needed.

Documenting the why and how in a way that can be easily digested and modified are fundamental to helping an application grow and scale with you.

Don't just document the tools you're using. Document growth items, likely areas for cost growth, cost mitigation strategies, and similar tools.

Terraform architecture examples

With those goals in mind, I've built an example architecture using Terraform to give you a strong starting point and included some GitHub Actions workflows that will give a strong Continuous Integration/Continuous Deployment (CI/CD) framework.

Front End

AWS S3 Static Site Hosting serves as a great starting point for getting your page(s) into the world. They are cost effective, easy to maintain, easy to modify, and, with the addition of AWS CloudFront, can also help manage your SSL certificates keeping your site HTTPS compliant.

The provided template environment is also readily scalable and easy to expand to multiple testing environments in parallel to your production environment.

Backend

The backend is deployed on AWS ECS Fargate. Fargate allows a good balance of cost and management while integrating scalability and reliability to allow your developers to modify this to meet the demands of your customers. The environment also allows for a growth path and can be replaced by dedicated EC2 instances or Kubernetes as your organization grows. This container driven service allows for you to configure your application's environment to your needs. Containers also allow for easier testing and maintenance of your application. This container based backend is deployed across multiple availability zones, with a load balancer to distribute requests, health checks, and a template for auto-scaling.

The GitHub Actions workflow template also introduces Trivy, an open source security scanner, to validate the security of your containers.

Database

Amazon Relational Database Service (AWS RDS) offers an array of solutions to meet your database access requirements. Making sure you have the right configuration for your use case can save both time and money when deploying an application.

The provided template includes two example PostgreSQL database configurations. The development environment is configured to run on a single AWS RDS instance. This is designed to keep costs down while you develop your application. In order to maintain a more reliable environment for a production application, including backups, cross-availability zone integration, and failover databases, an AWS Aurora Environment is also included.

CI/CD

One of the keys to keep developers focusing on your application, and not on the infrastructure, is to have a clear and concise process from getting your code to the cloud. I've included templates for some of the more areas where developers may be less familiar: CI/CD Templates.

Environment deployment

In order to facilitate deployment of the cloud environment I've created a pipeline based on Andrew Walker's blog post to help make the Terraform release and update process more readable. Andrew does an excellent job explaining this entire process and I recommend reading that blog post as you venture into infrastructure as code workflows

Container creation and deployment

This workflow is a simple Docker build, security check, and push process. This can be modified to include testing or other steps as necessary.

Static Site Deployment

This workflow duplicates your application's build output to the S3 static bucket.

API Access

Site availability and security are two features core to the success of your application. When taking ownership of your own cloud environment it is important to know these targets are always changing. I've incorporated some AWS and other tools to keep your site online, and help you control access. The static site incorporates some basic WAF features using AWS Cloudfront, such as region blocking. I've chosen to use AWS's API gateway as the primary access point for the backend. API gateway provides additional resources for security and scalability.

Room to grow

There are challenges to owning your own cloud infrastructure, and, as with all software development, choosing the right tool is important.

This environment is designed to give you a head start to managing your own infrastructure allowing more room for growth without backtracking. This can also serve as a stepping stone from more managed environments to a fully owned cloud deployment.

Need DevOps help or to set up new infrastructure? Our consultants have worked with everyone from startups to Fortune 100 companies to some of the largest Rails codebases on the planet. [We offer free personalized business consultations. Schedule one here.

Better code, fewer headaches

Get practical how-tos, favorite tools, and coding tricks to level up your craft—delivered monthly.

Subscribe now

Related Insights

🔗
DevOps best practices using AWS and Terraform
🔗
From aerospace to DevOps: 4 surprising lessons for better software
🔗
Migrating legacy APIs to serverless with AWS

Explore our insights

See all insights
Developers
Developers
Developers
You’re holding it wrong! The double loop model for agentic coding

Joé Dupuis has noticed an influx of videos and blog posts about the "correct" way of working with AI agents. Joé thinks most of it is bad advice, and has a better approach he wants to show you.

by
Joé Dupuis
Leadership
Leadership
Leadership
Don't play it safe: Improve your continuous discovery process to reduce risk

We often front-load discovery to feel confident before building—but that’s not real agility. This post explores how continuous learning reduces risk better than perfect plans ever could.

by
Doc Norton
Leadership
Leadership
Leadership
How an early-stage startup engineering team improved the bottom line fast

A fast-growing startup was burning cash faster than it could scale. Here’s how smart engineering decisions helped them improve the bottom line.

by
Jonathon Baugh
Letter art spelling out NEAT

Join the conversation

Technology is a means to an end: answers to very human questions. That’s why we created a community for developers and product managers.

Explore the community
Test Double Executive Leadership Team

Learn about our team

Like what we have to say about building great software and great teams?

Get to know us
Test Double company logo
Improving the way the world builds software.
What we do
Services OverviewSoftware DeliveryProduct ManagementLegacy ModernizationDevOpsUpgrade RailsTechnical RecruitmentTechnical Assessments
Who WE ARE
About UsCulture & CareersGreat CausesEDIOur TeamContact UsNews & AwardsN.E.A.T.
Resources
Case StudiesAll InsightsLeadership InsightsDeveloper InsightsProduct InsightsPairing & Office Hours
NEWSLETTER
Sign up hear about our latest innovations.
Your email has been added!
Oops! Something went wrong while submitting the form.
Standard Ruby badge
614.349.4279hello@testdouble.com
Privacy Policy
© 2020 Test Double. All Rights Reserved.

Better code, fewer headaches

Get practical how-tos, favorite tools, and coding tricks to level up your craft—delivered monthly.

Subscribe now