Skip to content

Commit

Permalink
add service-linked role
Browse files Browse the repository at this point in the history
  • Loading branch information
morga471 committed Jul 9, 2025
1 parent 59d4191 commit a670639
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ The module deploys Karpenter needed AWS resources, namely in IAM. It copies the

| Name | Type |
|------|------|
| [aws_iam_service_linked_role.spot](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_service_linked_role) | resource |
| [helm_release.karpenter](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [helm_release.nodepool_resources](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [null_resource.git_version](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) | resource |
Expand Down
19 changes: 17 additions & 2 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ locals {
amd_ami_alias = "bottlerocket@latest"

# Calculate the role name with prefix
role_name_raw = format("%v%v-%v", local.prefixes["eks-role"], var.cluster_name, "karpenter-")
role_name_raw = format("%v%v-%v", local.prefixes["eks-role"], var.cluster_name, "karpenter")

# Ensure role name stays within AWS limits (38 chars) when used as name_prefix
max_role_name_length = 37
Expand Down Expand Up @@ -59,7 +59,8 @@ data "aws_ecr_image" "karpenter_image" {

resource "helm_release" "karpenter" {
depends_on = [
data.aws_ecr_image.karpenter_image
data.aws_ecr_image.karpenter_image,
aws_iam_service_linked_role.spot
]
name = "karpenter"
chart = "karpenter"
Expand Down Expand Up @@ -114,3 +115,17 @@ resource "helm_release" "nodepool_resources" {
timeout = 600
wait = true
}

# Create service-linked role for EC2 Spot (required for Karpenter spot instances)
resource "aws_iam_service_linked_role" "spot" {
aws_service_name = "spot.amazonaws.com"
description = "Service-linked role for EC2 Spot instances used by Karpenter"

# This will only create the role if it doesn't already exist
# If it exists, Terraform will import the existing role
lifecycle {
ignore_changes = [
description,
]
}
}

0 comments on commit a670639

Please sign in to comment.