====== Terraform Modules ====== ===== Structure ===== tree . +--- input.tf +--- main.tf +--- modules | +--- dynamo_module | | +--- main.tf | | +--- outputs.tf | | +--- README.md | | +--- variables.tf | +--- parameter_module | | +--- main.tf | | +--- outputs.tf | | +--- variables.tf +--- outputs.tf +--- README +--- setup.tf ===== Root module ===== setup.tf # Export key and secret credentials first. # run as -> $ terraform apply terraform { required_providers { aws = { source = "hashicorp/aws" version = "3.74.1" } } backend "s3" { region = "eu-west-2" bucket = "terraform-statefiles" key = "tsg/plan-apply.tfstate" dynamodb_table = "tsg-plan-apply-lockfiles" } } main.tf provider "aws" { region = "eu-west-X" default_tags { tags = { name = "ModuleTest" } } } module "dynamo" { source = "./modules/dynamo_module" table_name = "Test_table2" #email_address = "user@company.com" } module "parameters" { source = "./modules/parameter_module" parameter_key = "test_key" parameter_value = "Silly_Parameter" } output "environment" { value = "prod" } output "table_arn" { value = module.dynamo.arn } output "Parameter_arn" { value = module.parameters.parameter_arn } output "parameter_value" { value = module.parameters.parameter_value sensitive = true } ===== Modules -> dynamo_module ===== main.tf resource "aws_dynamodb_table" "dynamo_table" { name = var.table_name billing_mode = "PAY_PER_REQUEST" hash_key = "UserID" attribute { name = "UserID" type = "S" } tags = { "BuiltBy" = "Terraform" "email" = var.email_address } } outputs.tf # Output variable definitions output "arn" { description = "ARN of the VPC" value =aws_dynamodb_table.dynamo_table.arn } variables.tf # Input variable definitions variable "table_name" { description = "Name of the table." type = string } variable "email_address" { description = "Owner's email" default = "myemail@company.com" type = string } ===== Modules -> parameter_module ===== main.tf resource "aws_ssm_parameter" "nonsense_parameter" { name = var.parameter_key type = "String" value = var.parameter_value } outputs.tf # Output variable definitions output "parameter_value" { description = "Value of Parameter" value = aws_ssm_parameter.nonsense_parameter.value } output "parameter_arn" { description = "ARN of parameter" value = aws_ssm_parameter.nonsense_parameter.arn } variables.tf # Input variable definitions variable "email_address" { description = "Owner's email" default = "myparameteremail@company.com" type = string } variable "parameter_key" { description = "Key name" type = string } variable "parameter_value" { description = "value" type = string }