modules/accelerator/main-module/main.tf (243 lines of code) (raw):
#================================== Combine all modules =============================#
module "buckets" {
source = "../../buckets_for_accelerator"
region = var.region
project = var.project
aws_account_id = var.aws_account_id
repo_name = var.repo_name
force_destroy = var.force_destroy
versioning = var.versioning
target_type = var.target_type
region_name = var.region_name
artifact_bucket_name = var.artifact_bucket_name
storage_bucket_name = var.storage_bucket_name
expiration_days = var.expiration_days
}
module "aws_policies" {
source = "../iam-policies"
aws_account_id = var.aws_account_id
region = var.region
region_name = var.region_name
private_subnet_ids = var.private_subnet_ids
project = var.project
repo_name = var.repo_name
storage_bucket_arn = module.buckets.storage_bucket_arn
build_artifact_bucket_arn = module.buckets.artifact_bucket_arn
aws_kms_key = module.buckets.aws_kms_key
aws_kms_key_arn = module.buckets.aws_kms_key_arn
eks_role_arn = var.eks_role_arn
target_type = var.target_type
connection_provider = var.connection_provider
vpc_id = var.vpc_id
depends_on = [module.buckets]
}
module "dlt" {
source = "../../distributed_load_testing"
admin_email = var.email_addresses[0]
admin_name = var.admin_name
private_subnet_ids = var.private_subnet_ids
private_subnets = var.private_subnets
vpc_id = var.vpc_id
vpc_cidr_block = var.vpc_range
storage_bucket = module.buckets.storage_bucket
region = var.region
repo_name = var.repo_name
aws_acm_certificate_arn = var.aws_acm_certificate_usa_arn
route53_zone_name = var.route53_zone_name
region_name = var.region_name
depends_on = [module.buckets]
}
module "alb" {
count = var.target_type == "eks" || var.target_type == "kube_cluster" ? 0 : 1
source = "../alb_deploy"
environments = var.environments
repo_name = var.repo_name
health_path = var.health_path
project = var.project
route53_zone_name = var.route53_zone_name
vpc_id = var.vpc_id
security_groups = var.security_groups
public_subnet_ids = var.public_subnet_ids
target_type = var.target_type
aws_acm_certificate_arn = var.aws_acm_certificate_arn
region_name = var.region_name
target_port = var.application_port
}
module "asg" {
count = var.target_type == "instance" ? 1 : 0
source = "../autoscaling_groups"
repo_name = var.repo_name
elb_target_group_arn = module.alb[0].target_group_arn
lb_id = module.alb[0].alb_id
security_groups = var.security_groups
private_subnet_ids = var.private_subnet_ids
instance_type = var.instance_type
region_name = var.region_name
desired_capacity = var.desired_capacity
max_size = var.max_size
min_size = var.min_size
environments = var.environments
artifact_bucket = module.buckets.artifact_bucket
aws_kms_key_arn = module.buckets.aws_kms_key_arn
region = var.region
project = var.project
depends_on = [module.alb[0]]
}
module "ecs" {
count = var.target_type == "ip" ? 1 : 0
source = "../ecs"
region = var.region
region_name = var.region_name
repo_name = var.repo_name
vpc_id = var.vpc_id
security_groups = var.security_groups
private_subnet_ids = var.private_subnet_ids
cpu = var.cpu
desired_capacity = var.desired_capacity
docker_container_port = var.application_port
environments = var.environments
memory = var.memory
target_group_blue_arn = module.alb[0].target_group_blue_arn
aws_account_id = var.aws_account_id
connection_provider = var.connection_provider
organization_name = var.organization_name
package_buildspec = var.docker_buildspec
repo_default_branch = var.repo_default_branch
storage_bucket = module.buckets.storage_bucket
codeartifact_domain = var.codeartifact_create == true ? module.aws_codeartifact[0].codeartifact_domain : ""
codeartifact_repo = var.codeartifact_create == true ? module.aws_codeartifact[0].codeartifact_repo : ""
aws_kms_key = module.buckets.aws_kms_key
aws_kms_key_arn = module.buckets.aws_kms_key_arn
execution_role = module.aws_policies.ecs_execution_role
task_role = module.aws_policies.ecs_task_role # ADD if we need to access to aws resources
depends_on = [module.aws_policies, module.buckets]
}
module "pipeline" {
source = "../aws-codepipeline"
repo_name = var.repo_name
organization_name = var.organization_name
project_key = var.project_key
sonar_url = var.sonar_url
aws_account_id = var.aws_account_id
region = var.region
vpc_id = var.vpc_id
security_groups = var.security_groups
connection_provider = var.connection_provider
source_provider = var.source_provider
environments = var.environments
region_name = var.region_name
asg_name = var.target_type == "instance" ? module.asg[0].asg_name : null
app_fqdn = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.app_fqdn : module.alb[0].app_fqdn
sonarcloud_token_name = var.sonarcloud_token_name
template_name = var.target_type == "instance" ? module.asg[0].template_name : null
private_subnet_ids = var.private_subnet_ids
desired_capacity = var.desired_capacity
target_group_name = var.target_type == "instance" ? module.alb[0].target_group_name : null
approve_sns_arn = module.sns.approve_sns_arn
storage_bucket = module.buckets.storage_bucket
target_type = var.target_type
image_repo_name = var.target_type == "instance" ? "" : "${var.repo_name}-${var.region_name}"
package_buildspec = var.target_type == "instance" ? var.package_buildspec : var.docker_buildspec
main_listener = var.target_type == "eks" || var.target_type == "kube_cluster" ? null : module.alb[0].main_listener
target_group_green_name = var.target_type == "ip" ? module.alb[0].target_group_green_name : null
target_group_blue_name = var.target_type == "ip" ? module.alb[0].target_group_blue_name : null
aws_kms_key = module.buckets.aws_kms_key
aws_kms_key_arn = module.buckets.aws_kms_key_arn
build_artifact_bucket = module.buckets.artifact_bucket
codebuild_role = module.aws_policies.codebuild_role_arn
codepipeline_role = module.aws_policies.codepipeline_role_arn
codedeploy_role = var.target_type == "ip" || var.target_type == "instance" ? module.aws_policies.codedeploy_role_arn : null
repo_default_branch = var.repo_default_branch
build_timeout = var.build_timeout
build_compute_type = var.build_compute_type
build_image = var.build_image
build_privileged_override = var.build_privileged_override
test_buildspec = var.test_buildspec
test_func_buildspec = var.test_func_buildspec
test_perf_buildspec = var.test_perf_buildspec
conf_all_at_once = var.conf_all_at_once
conf_one_at_time = var.conf_one_at_time
ecs_cluster_name = var.target_type == "ip" ? module.ecs[0].cluster_name : ""
ecs_service_name = var.target_type == "ip" ? module.ecs[0].service_name : []
#=============== AWS Codeartifact for JAVA Application ===========================
codeartifact_domain = var.codeartifact_create == true ? module.aws_codeartifact[0].codeartifact_domain : ""
codeartifact_repo = var.codeartifact_create == true ? module.aws_codeartifact[0].codeartifact_repo : ""
#====================== DLT Test Block ============================================
cognito_password_name = var.cognito_password_name
admin_name = var.admin_name
dlt_ui_url = module.dlt.console
dlt_api_host = module.dlt.api
cognito_client_id = module.dlt.cognito_client_id
cognito_identity_pool_id = module.dlt.cognito_identity_pool_id
cognito_user_pool_id = module.dlt.cognito_user_pool_id
route53_zone_name = var.route53_zone_name
#========================== Report Portal ===========================================
rp_endpoint = var.rp_endpoint
rp_token_name = var.rp_token_name
rp_project = var.rp_project
#============================== EKS ==================================================
buildspec_eks = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.buildspec_eks : null
cluster_name = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.cluster_name : null
aws_acm_certificate_arn = var.aws_acm_certificate_arn
health_path = var.health_path
public_subnet_ids = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.public_subnet_ids : null
target_port = var.application_port
eks_role_arn = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.eks_role_arn : null
cluster_acm_certificate_arn = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.cluster_acm_certificate_arn : null
cluster_public_subnet_ids = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.cluster_public_subnet_ids : null
cluster_region = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.cluster_region : null
cluster_security_groups = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.cluster_security_groups : null
#=============== Stand alone cluster ======================
cluster_config = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.cluster_config : null
docker_password = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.docker_password : null
docker_repo = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.docker_repo : null
docker_user = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.docker_user : null
helm_chart = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.helm_chart : null
helm_chart_version = var.target_type == "eks" || var.target_type == "kube_cluster" ? var.helm_chart_version : null
}
module "sns" {
source = "../notifications"
codepipeline_arn = module.pipeline.codepipeline_arn
repo_name = var.repo_name
build_success = var.build_success
teams_web_hook = var.teams_web_hook
slack_web_hook = var.slack_web_hook
display_name = var.display_name
email_addresses = var.email_addresses
region_name = var.region_name
codepipeline_name = module.pipeline.codepipeline_name
aws_kms_key = module.buckets.aws_kms_key
security_groups = var.security_groups
private_subnet_ids = var.private_subnet_ids
}
module "pr" {
count = var.connection_provider == "GitHub" ? 1 : (var.connection_provider == "Bitbucket" ? 1 : 0)
source = "../../../modules/PR-analysis"
aws_account_id = var.aws_account_id
auth_token = var.auth_token
repo_name = var.repo_name
build_timeout = "20"
service_role = module.aws_policies.codebuild_role_arn
connection_provider = var.connection_provider
location = "https://github.com/${var.organization_name}/${var.repo_name}"
webhook_pattern = "PULL_REQUEST_REOPENED, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED"
region = var.region
organization_name = var.organization_name
project = var.project
sonarcloud_token_name = var.sonarcloud_token_name
region_name = var.region_name
aws_kms_key = module.buckets.aws_kms_key_arn
}
module "pr_CodeCommit" {
count = var.connection_provider == "CodeCommit" ? 1 : 0
source = "../../../modules/PR-analysis-CodeCommit"
service_role = module.aws_policies.codebuild_role_arn
repo_name = var.repo_name
aws_account_id = var.aws_account_id
region = var.region
organization_name = var.organization_name
project = var.project
sonarcloud_token_name = var.sonarcloud_token_name
depends_on = [module.aws_policies]
}
module "aws_codeartifact" {
count = var.codeartifact_create == true ? 1 : 0
source = "../../aws_codeartifact"
codebuild_role_arn = module.aws_policies.codebuild_role_arn
region_name = var.region_name
repo_name = var.repo_name
}