terraform { required_version = ">= 1.0.0" required_providers { aws = { source = "hashicorp/aws" version = "4.31.0" } } } provider "aws" { region = "us-east-2" } #Module for creating a new S3 bucket for storing pipeline artifacts module "s3_artifacts_bucket" { source = "../../terraform-modules/s3" project_name = var.project_name kms_key_arn = module.codepipeline_kms.arn codepipeline_role_arn = module.codepipeline_iam_role.role_arn tags = { Project_Name = var.project_name Environment = var.environment Account_ID = local.account_id Region = local.region } } # Resources module "codecommit_infrastructure_source_repo" { source = "../../terraform-modules/codecommit" create_new_repo = var.create_new_repo source_repository_name = var.source_repo_name source_repository_branch = var.source_repo_branch repo_approvers_arn = var.repo_approvers_arn kms_key_arn = module.codepipeline_kms.arn tags = { Project_Name = var.project_name Environment = var.environment Account_ID = local.account_id Region = local.region } } # Module for Infrastructure Validation - CodeBuild module "codebuild_terraform" { depends_on = [ module.codecommit_infrastructure_source_repo ] source = "../../terraform-modules/codebuild" project_name = var.project_name role_arn = module.codepipeline_iam_role.role_arn s3_bucket_name = module.s3_artifacts_bucket.bucket build_projects = var.build_projects build_project_source = var.build_project_source builder_compute_type = var.builder_compute_type builder_image = var.builder_image builder_image_pull_credentials_type = var.builder_image_pull_credentials_type buildspecyaml_directory = var.buildspecyaml_directory builder_type = var.builder_type kms_key_arn = module.codepipeline_kms.arn tags = { Project_Name = var.project_name Environment = var.environment Account_ID = local.account_id Region = local.region } } module "codepipeline_kms" { source = "../../terraform-modules/kms" codepipeline_role_arn = module.codepipeline_iam_role.role_arn tags = { Project_Name = var.project_name Environment = var.environment Account_ID = local.account_id Region = local.region } } module "codepipeline_iam_role" { source = "../../terraform-modules/iam-role" project_name = var.project_name codepipeline_iam_role_name = var.create_new_role == true ? "${var.project_name}-codepipeline-role" : var.codepipeline_iam_role_name source_repository_name = var.source_repo_name kms_key_arn = module.codepipeline_kms.arn s3_bucket_arn = module.s3_artifacts_bucket.arn #backend_s3_bucket_name = var.backend_s3_bucket_name tags = { Project_Name = var.project_name Environment = var.environment Account_ID = local.account_id Region = local.region } } # Module for Infrastructure Validate, Plan, Apply and Destroy - CodePipeline module "codepipeline_terraform" { depends_on = [ module.codebuild_terraform, module.s3_artifacts_bucket ] source = "../../terraform-modules/codepipeline" project_name = var.project_name pipelinename = var.pipelinename source_repo_name = var.source_repo_name source_repo_branch = var.source_repo_branch s3_bucket_name = module.s3_artifacts_bucket.bucket codepipeline_role_arn = module.codepipeline_iam_role.role_arn stages = var.stage_input kms_key_arn = module.codepipeline_kms.arn approve_comment = var.approve_comment tags = { Project_Name = var.project_name Environment = var.environment Account_ID = local.account_id Region = local.region } }