Class NodeGroup


  • public class NodeGroup
    extends com.pulumi.resources.CustomResource
    Manages an EKS Node Group, which can provision and optionally update an Auto Scaling group of Kubernetes worker nodes compatible with EKS. Additional documentation about this functionality can be found in the [EKS User Guide](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html). ## Example Usage
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.eks.NodeGroup;
     import com.pulumi.aws.eks.NodeGroupArgs;
     import com.pulumi.aws.eks.inputs.NodeGroupScalingConfigArgs;
     import com.pulumi.aws.eks.inputs.NodeGroupUpdateConfigArgs;
     import com.pulumi.resources.CustomResourceOptions;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var example = new NodeGroup("example", NodeGroupArgs.builder()
                 .scalingConfig(NodeGroupScalingConfigArgs.builder()
                     .desiredSize(1)
                     .maxSize(2)
                     .minSize(1)
                     .build())
                 .updateConfig(NodeGroupUpdateConfigArgs.builder()
                     .maxUnavailable(1)
                     .build())
                 .clusterName(exampleAwsEksCluster.name())
                 .nodeGroupName("example")
                 .nodeRoleArn(exampleAwsIamRole.arn())
                 .subnetIds(exampleAwsSubnet.stream().map(element -> element.id()).collect(toList()))
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(                
                         example_AmazonEKSWorkerNodePolicy,
                         example_AmazonEKSCNIPolicy,
                         example_AmazonEC2ContainerRegistryReadOnly)
                     .build());
     
         }
     }
     
     
    ### Ignoring Changes to Desired Size You can utilize the Pulumi `ignoreChanges` resource option to create an EKS Node Group with an initial size of running instances, then ignore any changes to that count caused externally (e.g., Application Auto Scaling).
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.eks.NodeGroup;
     import com.pulumi.aws.eks.NodeGroupArgs;
     import com.pulumi.aws.eks.inputs.NodeGroupScalingConfigArgs;
     import com.pulumi.resources.CustomResourceOptions;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var example = new NodeGroup("example", NodeGroupArgs.builder()
                 .scalingConfig(NodeGroupScalingConfigArgs.builder()
                     .desiredSize(2)
                     .build())
                 .build(), CustomResourceOptions.builder()
                     .ignoreChanges("scalingConfig.desiredSize")
                     .build());
     
         }
     }
     
     
    ### Tracking the latest EKS Node Group AMI releases You can have the node group track the latest version of the Amazon EKS optimized Amazon Linux AMI for a given EKS version by querying an Amazon provided SSM parameter. Replace `standard` in the parameter name below with `nvidia` to retrieve the accelerated AMI version. Replace `x8664` in the parameter name below with `arm64` to retrieve the ARM version.
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.ssm.SsmFunctions;
     import com.pulumi.aws.ssm.inputs.GetParameterArgs;
     import com.pulumi.aws.eks.NodeGroup;
     import com.pulumi.aws.eks.NodeGroupArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             final var eksAmiReleaseVersion = SsmFunctions.getParameter(GetParameterArgs.builder()
                 .name(String.format("/aws/service/eks/optimized-ami/%s/amazon-linux-2023/x86_64/standard/recommended/release_version", exampleAwsEksCluster.version()))
                 .build());
     
             var example = new NodeGroup("example", NodeGroupArgs.builder()
                 .clusterName(exampleAwsEksCluster.name())
                 .nodeGroupName("example")
                 .version(exampleAwsEksCluster.version())
                 .releaseVersion(eksAmiReleaseVersion.value().asPlaintext())
                 .nodeRoleArn(exampleAwsIamRole.arn())
                 .subnetIds(exampleAwsSubnet.stream().map(element -> element.id()).collect(toList()))
                 .build());
     
         }
     }
     
     
    ### Example IAM Role for EKS Node Group
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.iam.Role;
     import com.pulumi.aws.iam.RoleArgs;
     import com.pulumi.aws.iam.RolePolicyAttachment;
     import com.pulumi.aws.iam.RolePolicyAttachmentArgs;
     import static com.pulumi.codegen.internal.Serialization.*;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             var example = new Role("example", RoleArgs.builder()
                 .name("eks-node-group-example")
                 .assumeRolePolicy(serializeJson(
                     jsonObject(
                         jsonProperty("Statement", jsonArray(jsonObject(
                             jsonProperty("Action", "sts:AssumeRole"),
                             jsonProperty("Effect", "Allow"),
                             jsonProperty("Principal", jsonObject(
                                 jsonProperty("Service", "ec2.amazonaws.com")
                             ))
                         ))),
                         jsonProperty("Version", "2012-10-17")
                     )))
                 .build());
     
             var example_AmazonEKSWorkerNodePolicy = new RolePolicyAttachment("example-AmazonEKSWorkerNodePolicy", RolePolicyAttachmentArgs.builder()
                 .policyArn("arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy")
                 .role(example.name())
                 .build());
     
             var example_AmazonEKSCNIPolicy = new RolePolicyAttachment("example-AmazonEKSCNIPolicy", RolePolicyAttachmentArgs.builder()
                 .policyArn("arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy")
                 .role(example.name())
                 .build());
     
             var example_AmazonEC2ContainerRegistryReadOnly = new RolePolicyAttachment("example-AmazonEC2ContainerRegistryReadOnly", RolePolicyAttachmentArgs.builder()
                 .policyArn("arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly")
                 .role(example.name())
                 .build());
     
         }
     }
     
     
    ### Example Subnets for EKS Node Group
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.AwsFunctions;
     import com.pulumi.aws.inputs.GetAvailabilityZonesArgs;
     import com.pulumi.aws.ec2.Subnet;
     import com.pulumi.aws.ec2.SubnetArgs;
     import com.pulumi.std.StdFunctions;
     import com.pulumi.std.inputs.CidrsubnetArgs;
     import com.pulumi.codegen.internal.KeyedValue;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             final var available = AwsFunctions.getAvailabilityZones(GetAvailabilityZonesArgs.builder()
                 .state("available")
                 .build());
     
             for (var i = 0; i < 2; i++) {
                 new Subnet("example-" + i, SubnetArgs.builder()
                     .availabilityZone(available.names()[range.value()])
                     .cidrBlock(StdFunctions.cidrsubnet(CidrsubnetArgs.builder()
                         .input(exampleAwsVpc.cidrBlock())
                         .newbits(8)
                         .netnum(range.value())
                         .build()).result())
                     .vpcId(exampleAwsVpc.id())
                     .build());
     
             
     }
         }
     }
     
     
    ## Import ### Identity Schema #### Required * `clusterName` (String) Name of the EKS Cluster. * `nodeGroupName` (String) Name of the node group. #### Optional * `accountId` (String) AWS Account where this resource is managed. * `region` (String) Region where this resource is managed. Using `pulumi import`, import Node Groups using the `clusterName` and `nodeGroupName` separated by a colon (`:`). For example: ```sh $ pulumi import aws:eks/nodeGroup:NodeGroup example example-cluster:example-group ```
    • Nested Class Summary

      • Nested classes/interfaces inherited from class com.pulumi.resources.CustomResource

        com.pulumi.resources.CustomResource.CustomResourceInternal
      • Nested classes/interfaces inherited from class com.pulumi.resources.Resource

        com.pulumi.resources.Resource.LazyField<T extends java.lang.Object>, com.pulumi.resources.Resource.LazyFields, com.pulumi.resources.Resource.ResourceInternal
    • Field Summary

      • Fields inherited from class com.pulumi.resources.Resource

        childResources, remote
    • Constructor Summary

      Constructors 
      Constructor Description
      NodeGroup​(java.lang.String name)  
      NodeGroup​(java.lang.String name, NodeGroupArgs args)  
      NodeGroup​(java.lang.String name, NodeGroupArgs args, com.pulumi.resources.CustomResourceOptions options)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      com.pulumi.core.Output<java.lang.String> amiType()  
      com.pulumi.core.Output<java.lang.String> arn()  
      com.pulumi.core.Output<java.lang.String> capacityType()  
      com.pulumi.core.Output<java.lang.String> clusterName()  
      com.pulumi.core.Output<java.lang.Integer> diskSize()  
      com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> forceUpdateVersion()  
      static NodeGroup get​(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, NodeGroupState state, com.pulumi.resources.CustomResourceOptions options)
      Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
      com.pulumi.core.Output<java.util.List<java.lang.String>> instanceTypes()  
      com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> labels()  
      com.pulumi.core.Output<java.util.Optional<NodeGroupLaunchTemplate>> launchTemplate()  
      com.pulumi.core.Output<java.lang.String> nodeGroupName()  
      com.pulumi.core.Output<java.lang.String> nodeGroupNamePrefix()  
      com.pulumi.core.Output<NodeGroupNodeRepairConfig> nodeRepairConfig()  
      com.pulumi.core.Output<java.lang.String> nodeRoleArn()  
      com.pulumi.core.Output<java.lang.String> region()  
      com.pulumi.core.Output<java.lang.String> releaseVersion()  
      com.pulumi.core.Output<java.util.Optional<NodeGroupRemoteAccess>> remoteAccess()  
      com.pulumi.core.Output<java.util.List<NodeGroupResource>> resources()  
      com.pulumi.core.Output<NodeGroupScalingConfig> scalingConfig()  
      com.pulumi.core.Output<java.lang.String> status()  
      com.pulumi.core.Output<java.util.List<java.lang.String>> subnetIds()  
      com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()  
      com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()  
      com.pulumi.core.Output<java.util.Optional<java.util.List<NodeGroupTaint>>> taints()  
      com.pulumi.core.Output<NodeGroupUpdateConfig> updateConfig()  
      com.pulumi.core.Output<java.lang.String> version()  
      com.pulumi.core.Output<java.util.Optional<NodeGroupWarmPoolConfig>> warmPoolConfig()  
      • Methods inherited from class com.pulumi.resources.CustomResource

        getId, id, idFuture
      • Methods inherited from class com.pulumi.resources.Resource

        getChildResources, getResourceName, getResourceType, getUrn, pulumiChildResources, pulumiResourceName, pulumiResourceType, urn
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • NodeGroup

        public NodeGroup​(java.lang.String name)
        Parameters:
        name - The _unique_ name of the resulting resource.
      • NodeGroup

        public NodeGroup​(java.lang.String name,
                         NodeGroupArgs args)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
      • NodeGroup

        public NodeGroup​(java.lang.String name,
                         NodeGroupArgs args,
                         @Nullable
                         com.pulumi.resources.CustomResourceOptions options)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
        options - A bag of options that control this resource's behavior.
    • Method Detail

      • amiType

        public com.pulumi.core.Output<java.lang.String> amiType()
        Returns:
        Type of AMI associated with the EKS Node Group. See the [AWS documentation](https://docs.aws.amazon.com/eks/latest/APIReference/API_Nodegroup.html#AmazonEKS-Type-Nodegroup-amiType) for valid values. The provider will only perform drift detection if a configuration value is provided.
      • arn

        public com.pulumi.core.Output<java.lang.String> arn()
        Returns:
        ARN of the EKS Node Group.
      • capacityType

        public com.pulumi.core.Output<java.lang.String> capacityType()
        Returns:
        Type of capacity associated with the EKS Node Group. Valid values: `ON_DEMAND`, `SPOT`. This provider will only perform drift detection if a configuration value is provided.
      • clusterName

        public com.pulumi.core.Output<java.lang.String> clusterName()
        Returns:
        Name of the EKS Cluster.
      • diskSize

        public com.pulumi.core.Output<java.lang.Integer> diskSize()
        Returns:
        Disk size in GiB for worker nodes. Defaults to `50` for Windows, `20` all other node groups. The provider will only perform drift detection if a configuration value is provided.
      • forceUpdateVersion

        public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> forceUpdateVersion()
        Returns:
        Force version update if existing pods are unable to be drained due to a pod disruption budget issue.
      • instanceTypes

        public com.pulumi.core.Output<java.util.List<java.lang.String>> instanceTypes()
        Returns:
        List of instance types associated with the EKS Node Group. Defaults to `["t3.medium"]`. The provider will only perform drift detection if a configuration value is provided.
      • labels

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> labels()
        Returns:
        Key-value map of Kubernetes labels. Only labels that are applied with the EKS API are managed by this argument. Other Kubernetes labels applied to the EKS Node Group will not be managed.
      • launchTemplate

        public com.pulumi.core.Output<java.util.Optional<NodeGroupLaunchTemplate>> launchTemplate()
        Returns:
        Configuration block with Launch Template settings. See `launchTemplate` below for details. Conflicts with `remoteAccess`.
      • nodeGroupName

        public com.pulumi.core.Output<java.lang.String> nodeGroupName()
        Returns:
        Name of the EKS Node Group. If omitted, the provider will assign a random, unique name. Conflicts with `nodeGroupNamePrefix`. The node group name can't be longer than 63 characters. It must start with a letter or digit, but can also include hyphens and underscores for the remaining characters.
      • nodeGroupNamePrefix

        public com.pulumi.core.Output<java.lang.String> nodeGroupNamePrefix()
        Returns:
        Creates a unique name beginning with the specified prefix. Conflicts with `nodeGroupName`.
      • nodeRepairConfig

        public com.pulumi.core.Output<NodeGroupNodeRepairConfig> nodeRepairConfig()
        Returns:
        The node auto repair configuration for the node group. See `nodeRepairConfig` below for details.
      • nodeRoleArn

        public com.pulumi.core.Output<java.lang.String> nodeRoleArn()
        Returns:
        ARN of the IAM Role that provides permissions for the EKS Node Group.
      • region

        public com.pulumi.core.Output<java.lang.String> region()
        Returns:
        Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
      • releaseVersion

        public com.pulumi.core.Output<java.lang.String> releaseVersion()
        Returns:
        AMI version of the EKS Node Group. Defaults to latest version for Kubernetes version.
      • remoteAccess

        public com.pulumi.core.Output<java.util.Optional<NodeGroupRemoteAccess>> remoteAccess()
        Returns:
        Configuration block with remote access settings. See `remoteAccess` below for details. Conflicts with `launchTemplate`.
      • resources

        public com.pulumi.core.Output<java.util.List<NodeGroupResource>> resources()
        Returns:
        List of objects containing information about underlying resources.
      • scalingConfig

        public com.pulumi.core.Output<NodeGroupScalingConfig> scalingConfig()
        Returns:
        Configuration block with scaling settings. See `scalingConfig` below for details.
      • status

        public com.pulumi.core.Output<java.lang.String> status()
        Returns:
        Status of the EKS Node Group.
      • subnetIds

        public com.pulumi.core.Output<java.util.List<java.lang.String>> subnetIds()
        Returns:
        Identifiers of EC2 Subnets to associate with the EKS Node Group. The following arguments are optional:
      • tags

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()
        Returns:
        Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
      • tagsAll

        public com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()
        Returns:
        A map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
      • taints

        public com.pulumi.core.Output<java.util.Optional<java.util.List<NodeGroupTaint>>> taints()
        Returns:
        The Kubernetes taints to be applied to the nodes in the node group. Maximum of 50 taints per node group. See taint below for details.
      • updateConfig

        public com.pulumi.core.Output<NodeGroupUpdateConfig> updateConfig()
        Returns:
        Configuration block with update settings. See `updateConfig` below for details.
      • version

        public com.pulumi.core.Output<java.lang.String> version()
        Returns:
        Kubernetes version. Defaults to EKS Cluster Kubernetes version. The provider will only perform drift detection if a configuration value is provided.
      • warmPoolConfig

        public com.pulumi.core.Output<java.util.Optional<NodeGroupWarmPoolConfig>> warmPoolConfig()
        Returns:
        Configuration block with EC2 Auto Scaling warm pool settings. Including this block enables the warm pool; removing it disables and removes the warm pool. See `warmPoolConfig` below for details.
      • get

        public static NodeGroup get​(java.lang.String name,
                                    com.pulumi.core.Output<java.lang.String> id,
                                    @Nullable
                                    NodeGroupState state,
                                    @Nullable
                                    com.pulumi.resources.CustomResourceOptions options)
        Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
        Parameters:
        name - The _unique_ name of the resulting resource.
        id - The _unique_ provider ID of the resource to lookup.
        state -
        options - Optional settings to control the behavior of the CustomResource.