mirror of
https://github.com/ysoftdevs/terraform-aws-eks.git
synced 2026-05-01 21:04:27 +02:00
feat: Propagate ami_type to self-managed node group; allow using ami_type only (#3030)
This commit is contained in:
@@ -70,12 +70,12 @@ module "self_managed_node_group" {
|
||||
| [aws_iam_role_policy_attachment.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |
|
||||
| [aws_launch_template.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template) | resource |
|
||||
| [aws_placement_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/placement_group) | resource |
|
||||
| [aws_ami.eks_default](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami) | data source |
|
||||
| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |
|
||||
| [aws_ec2_instance_type.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ec2_instance_type) | data source |
|
||||
| [aws_ec2_instance_type_offerings.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ec2_instance_type_offerings) | data source |
|
||||
| [aws_iam_policy_document.assume_role_policy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
|
||||
| [aws_partition.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/partition) | data source |
|
||||
| [aws_ssm_parameter.ami](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ssm_parameter) | data source |
|
||||
| [aws_subnets.efa](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/subnets) | data source |
|
||||
|
||||
## Inputs
|
||||
@@ -83,10 +83,11 @@ module "self_managed_node_group" {
|
||||
| Name | Description | Type | Default | Required |
|
||||
|------|-------------|------|---------|:--------:|
|
||||
| <a name="input_ami_id"></a> [ami\_id](#input\_ami\_id) | The AMI from which to launch the instance | `string` | `""` | no |
|
||||
| <a name="input_ami_type"></a> [ami\_type](#input\_ami\_type) | Type of Amazon Machine Image (AMI) associated with the node group. See the [AWS documentation](https://docs.aws.amazon.com/eks/latest/APIReference/API_Nodegroup.html#AmazonEKS-Type-Nodegroup-amiType) for valid values | `string` | `"AL2_x86_64"` | no |
|
||||
| <a name="input_autoscaling_group_tags"></a> [autoscaling\_group\_tags](#input\_autoscaling\_group\_tags) | A map of additional tags to add to the autoscaling group created. Tags are applied to the autoscaling group only and are NOT propagated to instances | `map(string)` | `{}` | no |
|
||||
| <a name="input_availability_zones"></a> [availability\_zones](#input\_availability\_zones) | A list of one or more availability zones for the group. Used for EC2-Classic and default subnets when not specified with `subnet_ids` argument. Conflicts with `subnet_ids` | `list(string)` | `null` | no |
|
||||
| <a name="input_block_device_mappings"></a> [block\_device\_mappings](#input\_block\_device\_mappings) | Specify volumes to attach to the instance besides the volumes specified by the AMI | `any` | `{}` | no |
|
||||
| <a name="input_bootstrap_extra_args"></a> [bootstrap\_extra\_args](#input\_bootstrap\_extra\_args) | Additional arguments passed to the bootstrap script. When `platform` = `bottlerocket`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data | `string` | `""` | no |
|
||||
| <a name="input_bootstrap_extra_args"></a> [bootstrap\_extra\_args](#input\_bootstrap\_extra\_args) | Additional arguments passed to the bootstrap script. When `ami_type` = `BOTTLEROCKET_*`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data | `string` | `""` | no |
|
||||
| <a name="input_capacity_rebalance"></a> [capacity\_rebalance](#input\_capacity\_rebalance) | Indicates whether capacity rebalance is enabled | `bool` | `null` | no |
|
||||
| <a name="input_capacity_reservation_specification"></a> [capacity\_reservation\_specification](#input\_capacity\_reservation\_specification) | Targeting for EC2 capacity reservations | `any` | `{}` | no |
|
||||
| <a name="input_cloudinit_post_nodeadm"></a> [cloudinit\_post\_nodeadm](#input\_cloudinit\_post\_nodeadm) | Array of cloud-init document parts that are created after the nodeadm document part | <pre>list(object({<br> content = string<br> content_type = optional(string)<br> filename = optional(string)<br> merge_type = optional(string)<br> }))</pre> | `[]` | no |
|
||||
@@ -163,9 +164,9 @@ module "self_managed_node_group" {
|
||||
| <a name="input_network_interfaces"></a> [network\_interfaces](#input\_network\_interfaces) | Customize network interfaces to be attached at instance boot time | `list(any)` | `[]` | no |
|
||||
| <a name="input_placement"></a> [placement](#input\_placement) | The placement of the instance | `map(string)` | `{}` | no |
|
||||
| <a name="input_placement_group"></a> [placement\_group](#input\_placement\_group) | The name of the placement group into which you'll launch your instances, if any | `string` | `null` | no |
|
||||
| <a name="input_platform"></a> [platform](#input\_platform) | Identifies if the OS platform is `bottlerocket`, `linux`, or `windows` based | `string` | `"linux"` | no |
|
||||
| <a name="input_post_bootstrap_user_data"></a> [post\_bootstrap\_user\_data](#input\_post\_bootstrap\_user\_data) | User data that is appended to the user data script after of the EKS bootstrap script. Not used when `platform` = `bottlerocket` | `string` | `""` | no |
|
||||
| <a name="input_pre_bootstrap_user_data"></a> [pre\_bootstrap\_user\_data](#input\_pre\_bootstrap\_user\_data) | User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `platform` = `bottlerocket` | `string` | `""` | no |
|
||||
| <a name="input_platform"></a> [platform](#input\_platform) | [DEPRECATED - use `ami_type` instead. Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023`, or `windows` | `string` | `"linux"` | no |
|
||||
| <a name="input_post_bootstrap_user_data"></a> [post\_bootstrap\_user\_data](#input\_post\_bootstrap\_user\_data) | User data that is appended to the user data script after of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*` | `string` | `""` | no |
|
||||
| <a name="input_pre_bootstrap_user_data"></a> [pre\_bootstrap\_user\_data](#input\_pre\_bootstrap\_user\_data) | User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*` | `string` | `""` | no |
|
||||
| <a name="input_private_dns_name_options"></a> [private\_dns\_name\_options](#input\_private\_dns\_name\_options) | The options for the instance hostname. The default values are inherited from the subnet | `map(string)` | `{}` | no |
|
||||
| <a name="input_protect_from_scale_in"></a> [protect\_from\_scale\_in](#input\_protect\_from\_scale\_in) | Allows setting instance protection. The autoscaling group will not select instances with this setting for termination during scale in events. | `bool` | `false` | no |
|
||||
| <a name="input_ram_disk_id"></a> [ram\_disk\_id](#input\_ram\_disk\_id) | The ID of the ram disk | `string` | `null` | no |
|
||||
@@ -214,6 +215,6 @@ module "self_managed_node_group" {
|
||||
| <a name="output_launch_template_id"></a> [launch\_template\_id](#output\_launch\_template\_id) | The ID of the launch template |
|
||||
| <a name="output_launch_template_latest_version"></a> [launch\_template\_latest\_version](#output\_launch\_template\_latest\_version) | The latest version of the launch template |
|
||||
| <a name="output_launch_template_name"></a> [launch\_template\_name](#output\_launch\_template\_name) | The name of the launch template |
|
||||
| <a name="output_platform"></a> [platform](#output\_platform) | Identifies if the OS platform is `bottlerocket`, `linux`, or `windows` based |
|
||||
| <a name="output_platform"></a> [platform](#output\_platform) | [DEPRECATED - Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023`, or `windows` |
|
||||
| <a name="output_user_data"></a> [user\_data](#output\_user\_data) | Base64 encoded user data |
|
||||
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
|
||||
|
||||
@@ -1,16 +1,56 @@
|
||||
data "aws_partition" "current" {}
|
||||
data "aws_caller_identity" "current" {}
|
||||
|
||||
data "aws_ami" "eks_default" {
|
||||
count = var.create && var.create_launch_template ? 1 : 0
|
||||
################################################################################
|
||||
# AMI SSM Parameter
|
||||
################################################################################
|
||||
|
||||
filter {
|
||||
name = "name"
|
||||
values = ["amazon-eks-node-${var.cluster_version}-v*"]
|
||||
locals {
|
||||
# Just to ensure templating doesn't fail when values are not provided
|
||||
ssm_cluster_version = var.cluster_version != null ? var.cluster_version : ""
|
||||
|
||||
# TODO - Temporary stopgap for backwards compatibility until v21.0
|
||||
ami_type_to_user_data_type = {
|
||||
AL2_x86_64 = "linux"
|
||||
AL2_x86_64_GPU = "linux"
|
||||
AL2_ARM_64 = "linux"
|
||||
BOTTLEROCKET_ARM_64 = "bottlerocket"
|
||||
BOTTLEROCKET_x86_64 = "bottlerocket"
|
||||
BOTTLEROCKET_ARM_64_NVIDIA = "bottlerocket"
|
||||
BOTTLEROCKET_x86_64_NVIDIA = "bottlerocket"
|
||||
WINDOWS_CORE_2019_x86_64 = "windows"
|
||||
WINDOWS_FULL_2019_x86_64 = "windows"
|
||||
WINDOWS_CORE_2022_x86_64 = "windows"
|
||||
WINDOWS_FULL_2022_x86_64 = "windows"
|
||||
AL2023_x86_64_STANDARD = "al2023"
|
||||
AL2023_ARM_64_STANDARD = "al2023"
|
||||
}
|
||||
# Try to use `ami_type` first, but fall back to current, default behavior
|
||||
# TODO - will be removed in v21.0
|
||||
user_data_type = try(local.ami_type_to_user_data_type[var.ami_type], var.platform)
|
||||
|
||||
most_recent = true
|
||||
owners = ["amazon"]
|
||||
# Map the AMI type to the respective SSM param path
|
||||
ami_type_to_ssm_param = {
|
||||
AL2_x86_64 = "/aws/service/eks/optimized-ami/${local.ssm_cluster_version}/amazon-linux-2/recommended/image_id"
|
||||
AL2_x86_64_GPU = "/aws/service/eks/optimized-ami/${local.ssm_cluster_version}/amazon-linux-2-gpu/recommended/image_id"
|
||||
AL2_ARM_64 = "/aws/service/eks/optimized-ami/${local.ssm_cluster_version}/amazon-linux-2-arm64/recommended/image_id"
|
||||
BOTTLEROCKET_ARM_64 = "/aws/service/bottlerocket/aws-k8s-${local.ssm_cluster_version}/arm64/latest/image_id"
|
||||
BOTTLEROCKET_x86_64 = "/aws/service/bottlerocket/aws-k8s-${local.ssm_cluster_version}/x86_64/latest/image_id"
|
||||
BOTTLEROCKET_ARM_64_NVIDIA = "/aws/service/bottlerocket/aws-k8s-${local.ssm_cluster_version}-nvidia/arm64/latest/image_id"
|
||||
BOTTLEROCKET_x86_64_NVIDIA = "/aws/service/bottlerocket/aws-k8s-${local.ssm_cluster_version}-nvidia/x86_64/latest/image_id"
|
||||
WINDOWS_CORE_2019_x86_64 = "/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-EKS_Optimized-${local.ssm_cluster_version}/image_id"
|
||||
WINDOWS_FULL_2019_x86_64 = "/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-${local.ssm_cluster_version}/image_id"
|
||||
WINDOWS_CORE_2022_x86_64 = "/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-EKS_Optimized-${local.ssm_cluster_version}/image_id"
|
||||
WINDOWS_FULL_2022_x86_64 = "/aws/service/ami-windows-latest/Windows_Server-2022-English-Core-EKS_Optimized-${local.ssm_cluster_version}/image_id"
|
||||
AL2023_x86_64_STANDARD = "/aws/service/eks/optimized-ami/${local.ssm_cluster_version}/amazon-linux-2023/x86_64/standard/recommended/image_id"
|
||||
AL2023_ARM_64_STANDARD = "/aws/service/eks/optimized-ami/${local.ssm_cluster_version}/amazon-linux-2023/arm64/standard/recommended/image_id"
|
||||
}
|
||||
}
|
||||
|
||||
data "aws_ssm_parameter" "ami" {
|
||||
count = var.create ? 1 : 0
|
||||
|
||||
name = local.ami_type_to_ssm_param[var.ami_type]
|
||||
}
|
||||
|
||||
################################################################################
|
||||
@@ -21,7 +61,8 @@ module "user_data" {
|
||||
source = "../_user_data"
|
||||
|
||||
create = var.create
|
||||
platform = var.platform
|
||||
platform = local.user_data_type
|
||||
ami_type = var.ami_type
|
||||
is_eks_managed_node_group = false
|
||||
|
||||
cluster_name = var.cluster_name
|
||||
@@ -184,7 +225,7 @@ resource "aws_launch_template" "this" {
|
||||
arn = var.create_iam_instance_profile ? aws_iam_instance_profile.this[0].arn : var.iam_instance_profile_arn
|
||||
}
|
||||
|
||||
image_id = coalesce(var.ami_id, data.aws_ami.eks_default[0].image_id)
|
||||
image_id = coalesce(var.ami_id, nonsensitive(data.aws_ssm_parameter.ami[0].value))
|
||||
instance_initiated_shutdown_behavior = var.instance_initiated_shutdown_behavior
|
||||
|
||||
dynamic "instance_market_options" {
|
||||
@@ -879,7 +920,7 @@ resource "aws_eks_access_entry" "this" {
|
||||
|
||||
cluster_name = var.cluster_name
|
||||
principal_arn = var.create_iam_instance_profile ? aws_iam_role.this[0].arn : var.iam_role_arn
|
||||
type = var.platform == "windows" ? "EC2_WINDOWS" : "EC2_LINUX"
|
||||
type = local.user_data_type == "windows" ? "EC2_WINDOWS" : "EC2_LINUX"
|
||||
|
||||
tags = var.tags
|
||||
}
|
||||
|
||||
@@ -142,8 +142,8 @@ output "autoscaling_group_schedule_arns" {
|
||||
################################################################################
|
||||
|
||||
output "platform" {
|
||||
description = "Identifies if the OS platform is `bottlerocket`, `linux`, or `windows` based"
|
||||
value = var.platform
|
||||
description = "[DEPRECATED - Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023`, or `windows`"
|
||||
value = module.user_data.platform
|
||||
}
|
||||
|
||||
output "image_id" {
|
||||
|
||||
@@ -11,7 +11,7 @@ variable "tags" {
|
||||
}
|
||||
|
||||
variable "platform" {
|
||||
description = "Identifies if the OS platform is `bottlerocket`, `linux`, or `windows` based"
|
||||
description = "[DEPRECATED - use `ami_type` instead. Will be removed in `v21.0`] Identifies the OS platform as `bottlerocket`, `linux` (AL2), `al2023`, or `windows`"
|
||||
type = string
|
||||
default = "linux"
|
||||
}
|
||||
@@ -51,19 +51,19 @@ variable "cluster_ip_family" {
|
||||
}
|
||||
|
||||
variable "pre_bootstrap_user_data" {
|
||||
description = "User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `platform` = `bottlerocket`"
|
||||
description = "User data that is injected into the user data script ahead of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*`"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "post_bootstrap_user_data" {
|
||||
description = "User data that is appended to the user data script after of the EKS bootstrap script. Not used when `platform` = `bottlerocket`"
|
||||
description = "User data that is appended to the user data script after of the EKS bootstrap script. Not used when `ami_type` = `BOTTLEROCKET_*`"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "bootstrap_extra_args" {
|
||||
description = "Additional arguments passed to the bootstrap script. When `platform` = `bottlerocket`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data"
|
||||
description = "Additional arguments passed to the bootstrap script. When `ami_type` = `BOTTLEROCKET_*`; these are additional [settings](https://github.com/bottlerocket-os/bottlerocket#settings) that are provided to the Bottlerocket user data"
|
||||
type = string
|
||||
default = ""
|
||||
}
|
||||
@@ -262,6 +262,12 @@ variable "ami_id" {
|
||||
default = ""
|
||||
}
|
||||
|
||||
variable "ami_type" {
|
||||
description = "Type of Amazon Machine Image (AMI) associated with the node group. See the [AWS documentation](https://docs.aws.amazon.com/eks/latest/APIReference/API_Nodegroup.html#AmazonEKS-Type-Nodegroup-amiType) for valid values"
|
||||
type = string
|
||||
default = "AL2_x86_64"
|
||||
}
|
||||
|
||||
variable "cluster_version" {
|
||||
description = "Kubernetes cluster version - used to lookup default AMI ID if one is not provided"
|
||||
type = string
|
||||
|
||||
Reference in New Issue
Block a user