This folder contains a multi repo example of a Terraform file on AWS (Amazon Web Services).
It shows how to develop (not duplicating code) web server clusters in different environments using a module in another repo in order to use different version of the module in the environments.
The environments are:
- Staging (stage)
- Production (prod)
This is the file layout in this repo:
live
├── global
│ └── s3/
│ ├── main.tf
│ └── (etc)
│
├── stage
│ ├── services/
│ │ └── webserver-cluster/
│ │ ├── main.tf
│ │ └── (etc)
│ └── data-stores/
│ └── mysql/
│ ├── main.tf
│ └── (etc)
│
└── prod
├── services/
│ └── webserver-cluster/
│ ├── main.tf
│ └── (etc)
└── data-stores/
└── mysql/
├── main.tf
└── (etc)
This is the file layout used from another repo:
modules
└── services/
└── webserver-cluster/
├── main.tf
└── (etc)
It uses in common for both environments:
- Terraform Remote State example: live/global/s3
- Terraform Web Server Cluster module example in another repo: https://github.com/alfonsof/terraform-aws-repo-examples
It uses for staging environment:
- Terraform MySQL on RDS example (staging environment): live/stage/data-stores/mysql
- Terraform Web Server Cluster example (staging environment): live/stage/services/webserver-cluster
It uses for production environment:
- Terraform MySQL on RDS example (production environment): live/prod/data-stores/mysql
- Terraform Web Server Cluster example (production environment): live/prod/services/webserver-cluster
- You must have Terraform installed on your computer.
- You must have an AWS (Amazon Web Services) account.
- It uses the Terraform AWS Provider that interacts with the many resources supported by AWS through its APIs.
- This code was written for Terraform 0.10.x.
-
Configure your AWS access keys.
Important: For security, it is strongly recommend that you use IAM users instead of the root account for AWS access.
Setting your credentials for use by Terraform can be done in a number of ways, but here are the recommended approaches:
-
The default credentials file
Set credentials in the AWS credentials profile file on your local system, located at:
~/.aws/credentials
on Linux, macOS, or UnixC:\Users\USERNAME\.aws\credentials
on WindowsThis file should contain lines in the following format:
[default] aws_access_key_id = <your_access_key_id> aws_secret_access_key = <your_secret_access_key>
Substitute your own AWS credentials values for the values
<your_access_key_id>
and<your_secret_access_key>
. -
Environment variables
AWS_ACCESS_KEY_ID
andAWS_SECRET_ACCESS_KEY
Set the
AWS_ACCESS_KEY_ID
andAWS_SECRET_ACCESS_KEY
environment variables.To set these variables on Linux, macOS, or Unix, use
export
:export AWS_ACCESS_KEY_ID=<your_access_key_id> export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
To set these variables on Windows, use
set
:set AWS_ACCESS_KEY_ID=<your_access_key_id> set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
-
-
Use Terraform Remote State example for creating the remote state bucket. See: live/global/s3
-
Use Terraform module example (in another repo) for Web Server Cluster example in the staging environment and Web Server Cluster example in the production environment. See: https://github.com/alfonsof/terraform-aws-repo-examples
-
Use Terraform MySQL on RDS example for creating a MySQL database in the staging environment. See: live/stage/data-stores/mysql
-
Use Terraform Web Server Cluster example for creating a web server cluster in the staging environment. See: live/stage/services/webserver-cluster
-
Use Terraform MySQL on RDS example for creating a MySQL database in the production environment. See: live/prod/data-stores/mysql
-
Use Terraform Web Server Cluster example for creating a web server cluster in the production environment. See: live/prod/services/webserver-cluster