iam.tfresource "aws_iam_role" "eks_cluster_role" {
name = "eks-cluster-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
Service = "eks.amazonaws.com"
}
Action = "sts:AssumeRole"
}
]
})
}
resource "aws_iam_role_policy_attachment" "amazon_eks_cluster_policy" {
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
role = aws_iam_role.eks_cluster_role.name
}
resource "aws_iam_role_policy_attachment" "amazon_eks_service_policy" {
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSServicePolicy"
role = aws_iam_role.eks_cluster_role.name
}
resource "aws_iam_role" "eks_node_group_role" {
name = "eks-node-group-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
Service = "ec2.amazonaws.com"
}
Action = "sts:AssumeRole"
}
]
})
}
resource "aws_iam_role_policy_attachment" "amazon_eks_worker_node_policy" {
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy"
role = aws_iam_role.eks_node_group_role.name
}
resource "aws_iam_role_policy_attachment" "amazon_ec2_container_registry_read_only" {
policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
role = aws_iam_role.eks_node_group_role.name
}
resource "aws_iam_role_policy_attachment" "amazon_eks_cni_policy" {
policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
role = aws_iam_role.eks_node_group_role.name
}
main.tfdata "aws_vpc" "selected" {
filter {
name = "tag:Name"
values = ["eksctl-mcdemo-cluster/VPC"]
}
}
resource "aws_eks_cluster" "mcdemo_cluster" {
name = var.cluster_name
version = var.cluster_version
role_arn = aws_iam_role.eks_cluster_role.arn
vpc_config {
subnet_ids = [var.pub_subnet_id_1, var.pub_subnet_id_2]
}
depends_on = [
aws_iam_role_policy_attachment.amazon_eks_cluster_policy,
aws_iam_role_policy_attachment.amazon_eks_service_policy,
]
}
resource "aws_eks_node_group" "mcdemo_node_group" {
cluster_name = aws_eks_cluster.mcdemo_cluster.name
node_group_name = "mcdemo-nodegroup"
node_role_arn = aws_iam_role.eks_node_group_role.arn
subnet_ids = [var.pub_subnet_id_1, var.pub_subnet_id_2]
scaling_config {
desired_size = 4
max_size = 6
min_size = 3
}
instance_types = ["t3.medium"]
depends_on = [
aws_iam_role_policy_attachment.amazon_eks_worker_node_policy,
aws_iam_role_policy_attachment.amazon_ec2_container_registry_read_only,
aws_iam_role_policy_attachment.amazon_eks_cni_policy,
]
}
providers.tfterraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.aws_region
}
variables.tfvariable "aws_region" {
description = "The AWS region to create resources in."
default = "us-east-1"
}
variable "cluster_name" {
description = "The name of the EKS cluster."
default = "bedrocktest"
}
variable "cluster_version" {
description = "The Kubernetes version for the EKS cluster."
default = "1.33"
}
variable "pub_subnet_id_1" {
type = string
default = "subnet-0d2ea8898cdc199af"
}
variable "pub_subnet_id_2" {
type = string
default = "subnet-08f1c1b07f89afd3e"
}