User Tools

Site Tools


terraform:modules2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
terraform:modules2 [10/02/2025 15:31] – removed andrewterraform:modules2 [10/02/2025 15:32] (current) – created andrew
Line 1: Line 1:
 +====== Terraform Modules ======
 +
 +===== Structure =====
 +
 +
 +<code>
 +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
 +</code>
 +
 +===== Root module =====
 +
 +
 +setup.tf
 +<code hcl>
 +# 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"
 +  }
 +}
 +</code>
 +
 +main.tf
 +<code hcl>
 +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"
 +}
 +</code>
 +
 +
 +<code hcl>
 +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
 +}
 +
 +</code>
 +
 +
 +===== Modules -> dynamo_module =====
 +
 +main.tf
 +<code hcl>
 +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
 +  }
 +}
 +</code>
 +
 +outputs.tf
 +<code>
 +# Output variable definitions
 +
 +output "arn" {
 +  description = "ARN of the VPC"
 +  value       =aws_dynamodb_table.dynamo_table.arn
 +}
 +</code>
 +
 +variables.tf
 +<code hcl>
 +# 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
 +}
 +</code>
 +
 +
 +===== Modules -> parameter_module =====
 +
 +main.tf
 +<code hcl>
 +resource "aws_ssm_parameter" "nonsense_parameter" {
 +  name  = var.parameter_key
 +  type  = "String"
 +  value = var.parameter_value
 +}
 +</code>
 +
 +outputs.tf
 +<code hcl>
 +# 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
 +}
 +</code>
 +
 +variables.tf
 +<code hcl>
 +# 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
 +}
 +</code>
 +
  
terraform/modules2.1739201497.txt.gz · Last modified: by andrew

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki