############################# # VARs ############################# locals { cluster_name = "${var.project_name}-${var.stage}-eks" vpc_name = "${var.project_name}-${var.stage}-vpc" } ############################# # Providers ############################# provider "aws" { region = var.region default_tags { tags = { Environment = var.stage Project = "web-crawler-on-eks" } } } provider "kubernetes" { host = module.eks.cluster_endpoint cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data) token = data.aws_eks_cluster_auth.cluster_auth.token } data "aws_eks_cluster_auth" "cluster_auth" { name = local.cluster_name } ############################# # EKS ############################# module "eks" { source = "terraform-aws-modules/eks/aws" version = "20.8.5" cluster_name = local.cluster_name cluster_version = "1.30" authentication_mode = "API_AND_CONFIG_MAP" # for higher security requirements: use false and add a bastion host that is in a public subnet of this VPC, # and add this bastion host to the NACL of the private subnets cluster_endpoint_public_access = true enable_cluster_creator_admin_permissions = true cluster_addons = { aws-ebs-csi-driver = { service_account_role_arn = module.irsa-ebs-csi.iam_role_arn } } vpc_id = var.vpc_id subnet_ids = var.subnet_ids eks_managed_node_group_defaults = { ami_type = "AL2_x86_64" } eks_managed_node_groups = { one = { name = "node-group-1" instance_types = ["t3.small"] min_size = 1 max_size = 3 desired_size = 2 } } } data "aws_iam_policy" "ebs_csi_policy" { arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy" } module "irsa-ebs-csi" { source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc" version = "5.39.0" create_role = true role_name = "AmazonEKSTFEBSCSIRole-${module.eks.cluster_name}" provider_url = module.eks.oidc_provider role_policy_arns = [data.aws_iam_policy.ebs_csi_policy.arn] oidc_fully_qualified_subjects = ["system:serviceaccount:kube-system:ebs-csi-controller-sa"] } resource "kubernetes_config_map" "aws_auth_configmap_custom" { metadata { name = "aws-auth-custom" namespace = "kube-system" } data = { mapRoles = <