CLOUD: Best Practices for Creating AWS Cloud Applications at St. Thomas

Summary

When building applications in AWS, it’s important to follow consistent practices that improve security, reliability, and maintainability. These guidelines apply to all developers working with cloud resources in our environment.

Body

When building applications in AWS, it’s important to follow consistent practices that improve security, reliability, and maintainability. The following guidelines apply to all developers working with cloud resources in our environment.

Remember:

  • If it’s not in Git, it doesn’t exist!
  • Automation is Confidence. Anything else is just hope.

Following these practices ensures our cloud applications are secure, maintainable, and scalable.

You don't need to start from scratch! St. Thomas utilizes a SAM framework (with excellent tutorials!) that allows you to quickly provision entire application infrastructure stacks that already implement all these best practices. Even for Proof of Concept or Prototypes!

1. Infrastructure as Code, Not ClickOps

  • Do: Use GitOps workflows and Infrastructure as Code (IaC) tools such as AWS CDK, Terraform, or CloudFormation.
  • Don’t: Manually create resources through the AWS Console (ClickOps) except for MINOR sandbox experimentation.
  • Why: Code-driven infrastructure ensures environments are reproducible, version-controlled, and reviewable via pull requests.

2. GitOps Workflow

  • All changes to AWS application infrastructure should go through Git.
    • Don't: upload Lambda code manually via ZIP, sam deploy, or through the AWS console.
  • Use Pull Requests for review and automated pipelines for deployment.
  • Enforce approvals to ensure changes are peer-reviewed and auditable.

3. Resource Naming Conventions

  • Follow org-wide naming conventions for AWS resources (e.g., app-env-service-resource).
  • Consistent names make it easier to search, automate, and troubleshoot.

4. Security First

  • Always use least privilege IAM roles rather than permanent access keys or overly permissive policies such as Actions: lambda:* or Resource: *.
  • Store secrets in AWS Secrets Manager or SSM Parameter Store – never in code, Git, or environment variables.
  • Enable encryption at rest (KMS) and in transit (TLS) by default.

5. Networking and Access

  • Deploy applications into VPCs with properly segmented subnets.
  • Restrict inbound/outbound rules in Security Groups to only what’s required.
  • Utilize Amazon Cognito to provide SSO integrations.

6. Observability

  • Enable structured logging and centralize logs with CloudWatch Logs.
  • Set up metrics and alarms for critical resources.
  • Use distributed tracing (e.g., AWS X-Ray) for debugging.

7. Cost Awareness

  • Tag resources with Creator, Owner, CostCenter, Name, etc., as outlined in the St. Thomas tagging policy.
  • Use budgets and cost anomaly detection where applicable.
  • Choose right-sized instances and use managed services where possible.
  • Use conditionals in templates to reduce the creation of unnecessary resources (such as CloudWatch Alarms and Dashboards) in non-production environments.

8. Deployment Best Practices

  • Prefer managed services (Lambda, DynamoDB, CodeBuild, ECS/Fargate) over self-managed EC2 instances, Beanstalk, or containers.
  • Automate deployments via CI/CD pipelines (CodePipeline, GitHub Actions, GitLab CI).
  • Enable blue/green or canary deployments to minimize downtime.

9. Compliance & Governance

  • Use AWS Organizations and Service Control Policies (SCPs) for guardrails.
  • Run automated security checks with tools like AWS Config, Security Hub, and IAM Access Analyzer.
  • Ensure compliance with organizational standards (e.g., data classification, logging retention).

10. Continuous Improvement

  • Regularly review applications for security, cost, and reliability improvements.
  • Keep IaC modules, CI/CD workflows, and dependencies up to date.
  • Share learnings and reusable patterns in the St. Thomas developer community.

Ready-to-Use Templates

As mentioned at the top of this article, you do not need to start from scratch, as we have already done much of the work for you.

Resources and Assistance

For assistance in utilizing Ready-To-Use templates, implementation standards, and architectural reviews, please do not hesitate to contact the Enterprise Application and Cloud Development team using the Request a Service form on the Developer and Cloud Tools service page. We are happy to provide guidance and training for cloud development. 

Details

Details

Article ID: 168389
Created
Fri 8/22/25 7:31 PM
Modified
Wed 11/11/26 4:29 PM

Related Articles

Related Articles (7)

Starting a new back-end development project, or even being tasked with improving an older one, can be daunting. This checklist will help you improve your starting point and advance projects through an iterative improvement process. Not everything will be perfect, but you can always leave it in better shape than you found it.
The University of St. Thomas ITS Cloud Team promotes AI-Assisted Engineering using well-established practices such as planning, requirements gathering, implementation, documentation, testing, and deployment (DevOps) over "vibe-coding" for official university projects.
Opinionated DevOps platforms give AI coding assistants the consistent conventions and structure they need to generate trustworthy, reliable output. Pairing AI-assisted engineering accelerates scaffolding, lowers cognitive load, and strengthens guardrails against AI-introduced drift across the DevOps lifecycle.
An opinionated Internal Developer Platform like Atlantis makes deliberate choices about tooling and workflow so teams spend less time on infrastructure decisions and more on business logic. Key benefits: faster time to value, built-in best practices, and team consistency.
An internal developer platform removes the guesswork from building on AWS by giving teams pre-configured golden paths, reusable starter code, and infrastructure templates. An introduction to the Atlantis DevOps platform adopted at St. Thomas, explaining why it was built, what it provides, and how to scaffold and deploy a production-ready serverless project in minutes.
Spec-driven development (writing formal requirements, design documents, and tasks before code) gives AI coding tools like Kiro a clear, unambiguous target instead of a vague prompt, reducing hallucinated logic and costly rework. Before starting a spec-driven workflow, we recommended a Learn, Iterate, Plan workflow for getting the most out of Kiro's requirements, design, and tasks phases.
DevOps is a culture and practice that unifies planning, development, testing, and deployment into a continuous, collaborative loop.

Related Services / Offerings

Related Services / Offerings (1)

Get started with Development and Cloud Tools at the University of St. Thomas. This is the Dev & Cloud Learning Hub for Students, Staff, and Faculty with Tools, Tips, and Resources to set up developer and cloud environments and start building.