The basic building blocks for configuring a cloud infrastructure inside of a monorepo project using Terraform.
- Node.js v16+ with Yarn package manager
- Google Cloud SDK and Terraform CLI
- VS Code editor with recommended extensions
How to install Terraform CLI on macOS?
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/terraform
$ brew update
$ brew upgrade hashicorp/tap/terraform
$ yarn tf -version
How to create Google Cloud Platform projects?
Simply navigate to Google Cloud Resource Manager
and create two GCP projects for both test
(QA) and prod
(production)
environments, e.g. "example" and "example-test".
Fore more information visit https://cloud.google.com/resource-manager/docs/creating-managing-projects
How to configure Terraform Cloud workspaces?
- Sign in to Terraform Cloud dashboard.
- Create or join an organization.
- Create two workspaces —
app-test
andapp-prod
for test/QA and production environments. - In each of these workspaces create an environment variable called
GOOGLE_CREDENTIALS
with the value containing JSON key of a GCP service account. Note, this GCP service account needs to haveOwner
orEditor
+Service Usage Admin
roles.
For more information visit https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference
How to authenticate Terraform CLI in Terraform Cloud?
- Create a personal or team API Token via Terraform Cloud dashboard → Settings.
- Save API token to the
.terraformrc
file in root of the project:
credentials "app.terraform.io" {
token = "xxxxxx.atlasv1.zzzzzzzzzzzzz"
}
NOTE: This would allow to using different Terraform credentials per software project if you want to.
Customize the project
- Run
yarn install
to bootstrap.terraformrc
andinfra/overrides.tf
files - Create a Terraform API Token and save it to
.terraformrc
file - Update Terraform Cloud organization name in
infra/backend.tf
- Update other variables in the
infra/locals.tf
file - Ensure that Terraform Cloud workspaces exist and have all the required environment variables
Once the initial configuration steps are done (see infra/backend.tf
,
infra/locals.tf
), you should be able to run Terraform CLI commands either
directly or via a Yarn-based wrapper:
$ terraform -chdir=infra init -upgrade
$ terraform -chdir=infra plan
$ terraform -chdir=infra apply -auto-approve
Note that it uses test
as the default workspace environment defined
in VSCode's integrated terminal settings.
To use a different environment set the TF_WORKSPACE
environment variable:
$ TF_WORKSPACE=prod terraform -chdir=infra plan
$ TF_WORKSPACE=prod terraform -chdir=infra apply -auto-approve
Alternatively, use the wrapper CLI:
# Uses `test` environment by default
$ yarn plan
$ yarn apply -auto-approve
# Explicitly setting `prod` as the selected workspace environment
$ yarn plan --env=prod
$ yarn apply --env=prod -auto-approve
Fore more information visit learn.hashicorp.com/terraform or join the discussion on Discord.
- GraphQL API and Relay Starter Kit — full-stack monorepo template (GCP, GraphQL API, React, Relay)
Anyone and everyone is welcome to contribute. Submit a pull request (PR) or send me a message on Discord.
Copyright © 2022-present Kriasoft. This source code is licensed under the MIT license found in the LICENSE file.
Made with ♥ by Konstantin Tarkus (@koistya, blog) and contributors.