Deploy a Python App to AWS with Elastic Beanstalk & Terraform

This example shows how to build and deploy a simple Python application using AWS Elastic Beanstalk for managed hosting and Terraform for infrastructure as code. The deploy.sh script automates the application packaging and deployment process. Project Structure Here’s a quick overview of the project’s key components: app/: Contains the Python application, main.py, along with Procfile for defining the web server, and requirements.txt for Python dependencies. terraform/: Holds all the Terraform configuration files (.tf) that define the AWS infrastructure: main.tf: Defines the core AWS resources like the S3 bucket for application versions, IAM roles for Elastic Beanstalk, and the Elastic Beanstalk application and environment themselves. variables.tf: Declares input variables for customizability (e.g., AWS region, instance type). outputs.tf: Exports important values like the S3 bucket name and the Elastic Beanstalk environment URL. deploy.sh: A shell script that orchestrates the deployment process: Reads outputs from Terraform to get dynamic values. Zips the app/ directory. Uploads the zipped application to the designated S3 bucket. Creates a new Elastic Beanstalk application version. Updates the Elastic Beanstalk environment to use the new version. How It Works First, Terraform provisions all necessary AWS resources for Elastic Beanstalk. Then, the deploy.sh script automates the rest: it fetches deployment details from Terraform, zips your Python application, uploads it to S3, and finally, updates your Elastic Beanstalk environment with this new application version. ...

Host Static Website on AWS with Terraform, S3, and CloudFront

This example outlines a method for deploying static websites on Amazon Web Services (AWS) using Terraform for infrastructure as code, Amazon S3 for content storage, and Amazon CloudFront for global content delivery. The deployment process is fully automated. Project Structure Below is an overview of the project’s key directories and files: public/: Contains the static website assets, such as index.html and 404.html. These are the files that will be served to users. terraform/: This directory holds all the Terraform configuration files (.tf) responsible for provisioning and managing AWS resources. main.tf: Defines the core AWS resources, including the S3 bucket and CloudFront distribution. variables.tf: Contains input variables to parameterize the Terraform configuration (e.g., bucket names, domain names). outputs.tf: Specifies output values that are useful after Terraform applies the configuration, such as the CloudFront distribution domain name. deploy.sh: A shell script to execute the Terraform plan and apply the infrastructure, including uploading static files to S3. destroy.sh: A shell script to tear down all provisioned AWS resources. Project Repository: https://github.com/OmarMakled/aws-terraform-s3 ...