/terraform-rake-tasks

Shared Rake tasks for managing terraform plans @GINA

Primary LanguageRuby

Terraform Rake Tasks

Rake tasks for managing Terraform with shared S3 State.

Usage

Gemfile

gem 'terraform-rake-tasks', git: 'https://github.com/gina-alaska/terraform-rake-tasks'

Rakefile

require 'terraform-rake-tasks/tasks'

TerraformRakeTasks::Tasks.load_tasks!

Configuration

This gem uses the following ENV variables:

Variable Name purpose default
TF_PROJECT Name of the terraform project. Should be set to prevent name collisions tf
TF_ENV Terraform Environment. Used for multi-environment repositories. dev
AWS_PROFILE Name of AWS Profile to use default
S3_BUCKET Name of S3 Bucket to store shared data in ** NO DEFAULT **
SSH_KEY_PATH Path to store ssh credentials $HOME/.terraform/ssh

Rake tasks provided

rake apply          # Apply Terraform Plan
rake bootstrap      # Bootstrap terraform running environment from scratch
rake destroy        # Run 'terraform destroy'
rake dotenv         # Load environment settings from .env
rake get            # Run 'terraform get'
rake graph          # Generate dependenecy graph
rake init           # Initializes terraform remote state
rake keys:fetch     # Fetch new ssh keys from AWS
rake keys:generate  # Generate new ssh keys (DANGER: Will cause existing resources to be rebuilt)
rake keys:rotate    # Rotate ssh keys (DANGER: Will cause existing resources to be rebuilt)
rake keys:upload    # Upload keys to S3
rake plan           # Run 'terraform plan'
rake show           # Run 'terraform show'

rake bootstrap

  • setup and initialization tasks
  • Sets up terraform modules
  • create encrypted s3 bucket - ssh keys and terraform state
  • locked down to (insert details here)
  • generates ssh key, if it doesn't exist

Terraforming

After the bootstrap your usage is via rake as a thin wrapper around terraform plan, get, show, and destroy commands. You can skip that if you source the .env to allow running of terraform directly. (Just don't go wandering about into other environments after that).