terraform:terraform-variables
                Terraform Variables
setup.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "3.74.1"
    }
  }
  backend "s3" {
    region         = "eu-west-2"
    bucket         = "statefiles"
    key            = "tsg/plan-apply.tfstate"
    dynamodb_table = "tsg-plan-apply-lockfiles"
  }
}
variables.tf
variable "regionName"{
  description = "Key for looking up region code"
  type = string
  default = "London"
}
variable "aws_region" {
  type = map    # Note! TF variable type lower case
  default = {
    "Dublin"   = "eu-west-1"
    "London"   = "eu-west-2"
    "Broadway" = "eu-west-6"
  }
}
resource "aws_ssm_parameter" "regioncode" {
  name  = "region_code"
  type  = "String"   # NOTE! Quotes + Capital - AWS resource Type
  value = var.aws_region[var.regionName]
}
variable "iterator" {
  type = number  # NOTE! just word for Terraform var type
  default = 1
  description = "iterator"
}
variable "cidr_blocks" {
  description = "CIDR blocks"
  type = list(string)
  default = [
    "192.168.100.0/24",
    "192.168.101.0/24",
    "192.168.102.0/24",
  ]
}
resource "aws_ssm_parameter" "cidr_block" {
  name = "CIDR_block"
  type = "String"
  value = var.cidr_blocks[var.iterator]  # 0 is 1st position
}
data-variables.tf
data "aws_iam_policy" "common_pb" {
  name = "pb-Common"
}
resource "aws_ssm_parameter" "permissionsboundary" {
  name = "PermissionsBoundaryARN"
  type = "String"
  value = data.aws_iam_policy.common_pb.arn
}
parameters.tf
resource "aws_ssm_parameter" "just_a_parameter" {
  name = "just_a_parameter"
  type = "String"
  description = "Just a test"
  tags = {
    email = "andrew.2.stringer@bt.com"
  }
  value = "random_value"
}
resource "aws_ssm_parameter" "CentosSecureRepoSourceBucket" {
  name = "CentosSecureRepoSourceBucket"
  type = "String"
  value = jsonencode(file("buckets.json"))
}
buckets.json
{
    "secure_repo_centos":  "centos-repo-development",
    "secure_repo_rocky":   "rocky_secure_repo_bucket",
    "secure_repo_ubuntu":  "ubuntu-secure-repo-bucket"
}
copy_file.py
import json import boto3 # Paths to parameters in Parameter store. Parameter_source_bucket = 'CentosSecureRepoSourceBucket' def read_parameter(parameter): parameter_client = boto3.client('ssm') if not parameter: sys.exit("read_parameter variable 'parameter' is not set, so exiting.") parameter_response = parameter_client.get_parameter( Name=parameter, ) if not parameter_response: sys.exit("Parameter Store value is not set, so exiting.") logger.debug('Value of %s is %s', parameter, parameter_response['Parameter']['Value']) return parameter_response def handler(event, context): # username and filename are now invoked through event data, this will be supplied # from the cli invocation, test event example below:- """{ "filename": "1008926332-catbert.gif", "user_name": "secure_repo_centos/rocky/ubuntu (etc...)", "bucket_ref": "secure_repo_centos" }""" # Just for testing event = { "user_name": "secure_repo_ubuntu", "filename": "1008926332-catbert.gif", "bucket_ref": "secure_repo_ubuntu" } # 'bucket_ref' (from event data) is used as a key to select the value from the # returned Parameter Store dictionary. # This is done to allow a user to control which bucket is used for upload # whilst not allowing an arbitrary bucket to be specified, or allowing users access to Parameter Store. # This is designed to prevent an unauthorised bucket being used as the source. username = event['user_name'] file_to_copy = event['filename'] bucket_ref = event['bucket_ref'] source_bucket_raw = read_parameter(Parameter_source_bucket) # Parameter store returns strings, need to convert to dict. source_bucket_dict = json.loads(source_bucket_raw['Parameter']['Value']) source_bucket = source_bucket_dict[bucket_ref] print("Source Bucket is:-", source_bucket)
terraform/terraform-variables.txt · Last modified:  by andrew
                
                