Skip to content
v2.273.0

Cluster L2 construct ​

A Cluster represents a managed Kubernetes Service (EKS).

This is a fully managed cluster of API Servers (control-plane) The user is still required to create the worker nodes.

Example ​

ts
import { KubectlV36Layer } from '@aws-cdk/lambda-layer-kubectl-v36';

const cluster = new eks.Cluster(this, 'HelloEKS', {
  version: eks.KubernetesVersion.V1_36,
  defaultCapacity: 0,
  kubectlLayer: new KubectlV36Layer(this, 'kubectl'),
});

cluster.addNodegroupCapacity('custom-node-group', {
  instanceTypes: [new ec2.InstanceType('m5.large')],
  minSize: 4,
  diskSize: 100,
});
python
from aws_cdk.lambda_layer_kubectl_v36 import KubectlV36Layer


cluster = eks.Cluster(self, "HelloEKS",
    version=eks.KubernetesVersion.V1_36,
    default_capacity=0,
    kubectl_layer=KubectlV36Layer(self, "kubectl")
)

cluster.add_nodegroup_capacity("custom-node-group",
    instance_types=[ec2.InstanceType("m5.large")],
    min_size=4,
    disk_size=100
)
java
import software.amazon.awscdk.cdk.lambdalayer.kubectl.v36.KubectlV36Layer;


Cluster cluster = Cluster.Builder.create(this, "HelloEKS")
        .version(KubernetesVersion.V1_36)
        .defaultCapacity(0)
        .kubectlLayer(new KubectlV36Layer(this, "kubectl"))
        .build();

cluster.addNodegroupCapacity("custom-node-group", NodegroupOptions.builder()
        .instanceTypes(List.of(new InstanceType("m5.large")))
        .minSize(4)
        .diskSize(100)
        .build());
csharp
// Install: dotnet add package Amazon.CDK.Lib
using Amazon.CDK.LambdaLayer.KubectlV36;


var cluster = new Cluster(this, "HelloEKS", new ClusterProps {
    Version = KubernetesVersion.V1_36,
    DefaultCapacity = 0,
    KubectlLayer = new KubectlV36Layer(this, "kubectl")
});

cluster.AddNodegroupCapacity("custom-node-group", new NodegroupOptions {
    InstanceTypes = new [] { new InstanceType("m5.large") },
    MinSize = 4,
    DiskSize = 100
});
go
// Install: go get github.com/aws/aws-cdk-go/awscdk/v2
import "github.com/cdklabs/awscdk-kubectl-go/kubectlv36"


cluster := eks.NewCluster(this, jsii.String("HelloEKS"), &ClusterProps{
	Version: eks.KubernetesVersion_V1_36(),
	DefaultCapacity: jsii.Number(0),
	KubectlLayer: kubectlv36.NewKubectlV36Layer(this, jsii.String("kubectl")),
})

cluster.AddNodegroupCapacity(jsii.String("custom-node-group"), &NodegroupOptions{
	InstanceTypes: []InstanceType{
		ec2.NewInstanceType(jsii.String("m5.large")),
	},
	MinSize: jsii.Number(4),
	DiskSize: jsii.Number(100),
})

Initializer ​

ts
new Cluster(scope: Construct, id: string, props: ClusterProps)
python
Cluster(scope: Construct, id: str, props: ClusterProps)
java
new Cluster(Construct scope, String id, ClusterProps props)
csharp
new Cluster(Construct scope, string id, ClusterProps props)
go
NewCluster(Scope Construct, Id *string, Props ClusterProps)

Construct Props ​

albControllerAlbControllerOptionsalb_controllerAlbControllerOptionsalbControllerAlbControllerOptionsAlbControllerAlbControllerOptionsAlbControllerAlbControllerOptions= The controller is not installed.#
Install the AWS Load Balancer Controller onto the cluster.
authenticationModeAuthenticationModeauthentication_modeAuthenticationModeauthenticationModeAuthenticationModeAuthenticationModeAuthenticationModeAuthenticationModeAuthenticationMode= AuthenticationMode.CONFIG_MAP#
The desired authentication mode for the cluster.
awscliLayerILayerVersionawscli_layerILayerVersionawscliLayerILayerVersionAwscliLayerILayerVersionAwscliLayerILayerVersion= a default layer with the AWS CLI…#
An AWS Lambda layer that contains the `aws` CLI.

The handler expects the layer to include the following executables:

/opt/awscli/aws
default

Default: a default layer with the AWS CLI 1.x

bootstrapClusterCreatorAdminPermissionsbooleanbootstrap_cluster_creator_admin_permissionsboolbootstrapClusterCreatorAdminPermissionsBooleanBootstrapClusterCreatorAdminPermissionsboolBootstrapClusterCreatorAdminPermissions*bool= true#
Whether or not IAM principal of the cluster creator was set as a cluster admin access entry during cluster creation time.

Changing this value after the cluster has been created will result in the cluster being replaced.

bootstrapSelfManagedAddonsbooleanbootstrap_self_managed_addonsboolbootstrapSelfManagedAddonsBooleanBootstrapSelfManagedAddonsboolBootstrapSelfManagedAddons*bool= true#
If you set this value to False when creating a cluster, the default networking add-ons will not be installed.
notes

The default networking addons include vpc-cni, coredns, and kube-proxy. Use this option when you plan to install third-party alternative add-ons or self-manage the default networking add-ons.

Changing this value after the cluster has been created will result in the cluster being replaced.

clusterHandlerEnvironment{ [key: string]: string }cluster_handler_environmenttyping.Mapping[str, str]clusterHandlerEnvironmentMap<String, String>ClusterHandlerEnvironmentIDictionary<string, string>ClusterHandlerEnvironment*map[string]*string= No environment variables.#
Custom environment variables when interacting with the EKS endpoint to manage the cluster lifecycle.
clusterHandlerSecurityGroupISecurityGroupcluster_handler_security_groupISecurityGroupclusterHandlerSecurityGroupISecurityGroupClusterHandlerSecurityGroupISecurityGroupClusterHandlerSecurityGroupISecurityGroup= No security group.#
A security group to associate with the Cluster Handler's Lambdas.

The Cluster Handler's Lambdas are responsible for calling AWS's EKS API.

Requires placeClusterHandlerInVpc to be set to true.

clusterLoggingClusterLoggingTypes[]cluster_loggingtyping.List[ClusterLoggingTypes]clusterLoggingList<ClusterLoggingTypes>ClusterLoggingClusterLoggingTypes[]ClusterLogging*[]ClusterLoggingTypes= none#
The cluster log types which you want to enable.
clusterNamestringcluster_namestrclusterNameStringClusterNamestringClusterName*string= Automatically generated name#
Name for the cluster.
controlPlaneScalingTierControlPlaneScalingTiercontrol_plane_scaling_tierControlPlaneScalingTiercontrolPlaneScalingTierControlPlaneScalingTierControlPlaneScalingTierControlPlaneScalingTierControlPlaneScalingTierControlPlaneScalingTier= Standard control plane (no provi…#
The control plane scaling tier for EKS Provisioned Control Plane.

Provisioned Control Plane allows you to select a scaling tier to ensure high and predictable performance for demanding workloads such as AI training/inference, high-performance computing, or large-scale data processing.

default

Default: Standard control plane (no provisioned tier)

coreDnsComputeTypeCoreDnsComputeTypecore_dns_compute_typeCoreDnsComputeTypecoreDnsComputeTypeCoreDnsComputeTypeCoreDnsComputeTypeCoreDnsComputeTypeCoreDnsComputeTypeCoreDnsComputeType= CoreDnsComputeType.EC2 (for `Far…#
Controls the "eks.amazonaws.com/compute-type" annotation in the CoreDNS configuration on your cluster to determine which compute type to use for CoreDNS.
default

Default: CoreDnsComputeType.EC2 (for FargateCluster the default is FARGATE)

defaultCapacitynumberdefault_capacityint | floatdefaultCapacityNumberDefaultCapacitydoubleDefaultCapacity*float64= 2#
Number of instances to allocate as an initial capacity for this cluster.
notes

Instance type can be configured through defaultCapacityInstanceType, which defaults to m5.large.

Use cluster.addAutoScalingGroupCapacity to add additional customized capacity. Set this to 0 is you wish to avoid the initial capacity allocation.

defaultCapacityInstanceInstanceTypedefault_capacity_instanceInstanceTypedefaultCapacityInstanceInstanceTypeDefaultCapacityInstanceInstanceTypeDefaultCapacityInstanceInstanceType= m5.large#
The instance type to use for the default capacity.

This will only be taken into account if defaultCapacity is > 0.

defaultCapacityTypeDefaultCapacityTypedefault_capacity_typeDefaultCapacityTypedefaultCapacityTypeDefaultCapacityTypeDefaultCapacityTypeDefaultCapacityTypeDefaultCapacityTypeDefaultCapacityType= NODEGROUP#
The default capacity type for the cluster.
deletionProtectionbooleandeletion_protectionbooldeletionProtectionBooleanDeletionProtectionboolDeletionProtection*bool= deletion protection is disabled#
The current deletion protection setting for the cluster.

When true, deletion protection is enabled and the cluster cannot be deleted until protection is disabled. When false, the cluster can be deleted normally. This setting only applies to clusters in an active state.

endpointAccessEndpointAccessendpoint_accessEndpointAccessendpointAccessEndpointAccessEndpointAccessEndpointAccessEndpointAccessEndpointAccess= EndpointAccess.PUBLIC_AND_PRIVAT…#
Configure access to the Kubernetes API server endpoint..
default

Default: EndpointAccess.PUBLIC_AND_PRIVATE

ipFamilyIpFamilyip_familyIpFamilyipFamilyIpFamilyIpFamilyIpFamilyIpFamilyIpFamily= IpFamily.IP_V4#
Specify which IP family is used to assign Kubernetes pod and service IP addresses.
kubectlEnvironment{ [key: string]: string }kubectl_environmenttyping.Mapping[str, str]kubectlEnvironmentMap<String, String>KubectlEnvironmentIDictionary<string, string>KubectlEnvironment*map[string]*string= No environment variables.#
Environment variables for the kubectl execution.

Only relevant for kubectl enabled clusters.

kubectlLambdaRoleIRolekubectl_lambda_roleIRolekubectlLambdaRoleIRoleKubectlLambdaRoleIRoleKubectlLambdaRoleIRole= Default Lambda IAM Execution Rol…#
The IAM role to pass to the Kubectl Lambda Handler.
default

Default: Default Lambda IAM Execution Role

kubectlLayerILayerVersionkubectl_layerILayerVersionkubectlLayerILayerVersionKubectlLayerILayerVersionKubectlLayerILayerVersionrequired#
An AWS Lambda Layer which includes `kubectl` and Helm.
notes

This layer is used by the kubectl handler to apply manifests and install helm charts. You must pick an appropriate releases of one of the @aws-cdk/layer-kubectl-vXX packages, that works with the version of Kubernetes you have chosen.

The handler expects the layer to include the following executables:

/opt/helm/helm
/opt/kubectl/kubectl
kubectlMemorySizekubectl_memorySizekubectlMemorySizeKubectlMemorySizeKubectlMemorySize= Size.gibibytes(1)#
Amount of memory to allocate to the provider's lambda function.
mastersRoleIRolemasters_roleIRolemastersRoleIRoleMastersRoleIRoleMastersRoleIRole= no masters role.#
An IAM role that will be added to the `system:masters` Kubernetes RBAC group.
onEventLayerILayerVersionon_event_layerILayerVersiononEventLayerILayerVersionOnEventLayerILayerVersionOnEventLayerILayerVersion= a layer bundled with this module…#
An AWS Lambda Layer which includes the NPM dependency `proxy-agent`.
notes · default

This layer is used by the onEvent handler to route AWS SDK requests through a proxy.

By default, the provider will use the layer included in the "aws-lambda-layer-node-proxy-agent" SAR application which is available in all commercial regions.

To deploy the layer locally define it in your app as follows:

ts
const layer = new lambda.LayerVersion(this, 'proxy-agent-layer', {
  code: lambda.Code.fromAsset(`${__dirname}/layer.zip`),
  compatibleRuntimes: [lambda.Runtime.NODEJS_LATEST],
});

Default: a layer bundled with this module.

outputClusterNamebooleanoutput_cluster_namebooloutputClusterNameBooleanOutputClusterNameboolOutputClusterName*bool= false#
Determines whether a CloudFormation output with the name of the cluster will be synthesized.
outputConfigCommandbooleanoutput_config_commandbooloutputConfigCommandBooleanOutputConfigCommandboolOutputConfigCommand*bool= true#
Determines whether a CloudFormation output with the `aws eks update-kubeconfig` command will be synthesized.

This command will include the cluster name and the ARN of the masters IAM role.

Note: If mastersRole is not specified, this property will be ignored and no config command will be emitted.

outputMastersRoleArnbooleanoutput_masters_role_arnbooloutputMastersRoleArnBooleanOutputMastersRoleArnboolOutputMastersRoleArn*bool= false#
Determines whether a CloudFormation output with the ARN of the "masters" IAM role will be synthesized (if `mastersRole` is specified).
placeClusterHandlerInVpcbooleanplace_cluster_handler_in_vpcboolplaceClusterHandlerInVpcBooleanPlaceClusterHandlerInVpcboolPlaceClusterHandlerInVpc*bool= false#
If set to true, the cluster handler functions will be placed in the private subnets of the cluster vpc, subject to the `vpcSubnets` selection strategy.
prunebooleanpruneboolpruneBooleanPruneboolPrune*bool= true#
Indicates whether Kubernetes resources added through `addManifest()` can be automatically pruned.

When this is enabled (default), prune labels will be allocated and injected to each resource. These labels will then be used when issuing the kubectl apply operation with the --prune switch.

remoteNodeNetworksRemoteNodeNetwork[]remote_node_networkstyping.List[RemoteNodeNetwork]remoteNodeNetworksList<RemoteNodeNetwork>RemoteNodeNetworksRemoteNodeNetwork[]RemoteNodeNetworks*[]RemoteNodeNetwork= none#
IPv4 CIDR blocks defining the expected address range of hybrid nodes that will join the cluster.
remotePodNetworksRemotePodNetwork[]remote_pod_networkstyping.List[RemotePodNetwork]remotePodNetworksList<RemotePodNetwork>RemotePodNetworksRemotePodNetwork[]RemotePodNetworks*[]RemotePodNetwork= none#
IPv4 CIDR blocks for Pods running Kubernetes webhooks on hybrid nodes.
removalPolicyRemovalPolicyremoval_policyRemovalPolicyremovalPolicyRemovalPolicyRemovalPolicyRemovalPolicyRemovalPolicyRemovalPolicy= Resources will be deleted.#
The removal policy applied to all CloudFormation resources created by this construct when they are no longer managed by CloudFormation.
notes

This can happen in one of three situations:

  • The resource is removed from the template, so CloudFormation stops managing it;
  • A change to the resource is made that requires it to be replaced, so CloudFormation stops managing it;
  • The stack is deleted, so CloudFormation stops managing all resources in it.

This affects the EKS cluster itself, associated IAM roles, node groups, security groups, VPC and any other CloudFormation resources managed by this construct.

roleIRoleroleIRoleroleIRoleRoleIRoleRoleIRole= A role is automatically created …#
Role that provides permissions for the Kubernetes control plane to make calls to AWS API operations on your behalf.
default

Default: A role is automatically created for you

secretsEncryptionKeyIKeyRefsecrets_encryption_keyIKeyRefsecretsEncryptionKeyIKeyRefSecretsEncryptionKeyIKeyRefSecretsEncryptionKeyIKeyRef= By default, Kubernetes stores al…#
KMS secret for envelope encryption for Kubernetes secrets.
default

Default: By default, Kubernetes stores all secret object data within etcd and all etcd volumes used by Amazon EKS are encrypted at the disk-level using AWS-Managed encryption keys.

securityGroupISecurityGroupsecurity_groupISecurityGroupsecurityGroupISecurityGroupSecurityGroupISecurityGroupSecurityGroupISecurityGroup= A security group is automaticall…#
Security Group to use for Control Plane ENIs.
default

Default: A security group is automatically created

serviceIpv4Cidrstringservice_ipv4_cidrstrserviceIpv4CidrStringServiceIpv4CidrstringServiceIpv4Cidr*string= Kubernetes assigns addresses fro…#
The CIDR block to assign Kubernetes service IP addresses from.
default

Default: Kubernetes assigns addresses from either the 10.100.0.0/16 or 172.20.0.0/16 CIDR blocks

tags{ [key: string]: string }tagstyping.Mapping[str, str]tagsMap<String, String>TagsIDictionary<string, string>Tags*map[string]*string= none#
The tags assigned to the EKS cluster.
The Kubernetes version to run in the cluster.
vpcIVpcvpcIVpcvpcIVpcVpcIVpcVpcIVpc= a VPC with default configuration…#
The VPC in which to create the Cluster.
default

Default: a VPC with default configuration will be created and can be accessed through cluster.vpc.

vpcSubnetsSubnetSelection[]vpc_subnetstyping.List[SubnetSelection]vpcSubnetsList<SubnetSelection>VpcSubnetsSubnetSelection[]VpcSubnets*[]SubnetSelection= All public and private subnets#
Where to place EKS Control Plane ENIs.

For example, to only select private subnets, supply the following:

vpcSubnets: [{ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }]

Properties ​

adminRoleRoleadmin_roleRoleadminRoleRoleAdminRoleRoleAdminRoleRolerequired#
An IAM role with administrative permissions to create or update the cluster.

This role also has systems:master permissions.

albControllerAlbControlleralb_controllerAlbControlleralbControllerAlbControllerAlbControllerAlbControllerAlbControllerAlbController#
The ALB Controller construct defined for this cluster.

Will be undefined if albController wasn't configured.

authenticationModeAuthenticationModeauthentication_modeAuthenticationModeauthenticationModeAuthenticationModeAuthenticationModeAuthenticationModeAuthenticationModeAuthenticationMode= CONFIG_MAP.#
The authentication mode for the Amazon EKS cluster.

The authentication mode determines how users and applications authenticate to the Kubernetes API server.

awsAuthAwsAuthaws_authAwsAuthawsAuthAwsAuthAwsAuthAwsAuthAwsAuthAwsAuthrequired#
Lazily creates the AwsAuth resource, which manages AWS authentication mapping.
awscliLayerILayerVersionawscli_layerILayerVersionawscliLayerILayerVersionAwscliLayerILayerVersionAwscliLayerILayerVersion#
An AWS Lambda layer that contains the `aws` CLI.

If not defined, a default layer will be used containing the AWS CLI 1.x.

clusterArnstringcluster_arnstrclusterArnStringClusterArnstringClusterArn*stringrequired#
The unique ARN assigned to the service by AWS in the form of arn:aws:eks:.
clusterCertificateAuthorityDatastringcluster_certificate_authority_datastrclusterCertificateAuthorityDataStringClusterCertificateAuthorityDatastringClusterCertificateAuthorityData*stringrequired#
The certificate-authority-data for your cluster.
clusterEncryptionConfigKeyArnstringcluster_encryption_config_key_arnstrclusterEncryptionConfigKeyArnStringClusterEncryptionConfigKeyArnstringClusterEncryptionConfigKeyArn*stringrequired#
Amazon Resource Name (ARN) or alias of the customer master key (CMK).
clusterEndpointstringcluster_endpointstrclusterEndpointStringClusterEndpointstringClusterEndpoint*stringrequired#
The endpoint URL for the Cluster.

This is the URL inside the kubeconfig file to use with kubectl

For example, https://5E1D0CEXAMPLEA591B746AFC5AB30262.yl4.us-west-2.eks.amazonaws.com

clusterHandlerSecurityGroupISecurityGroupcluster_handler_security_groupISecurityGroupclusterHandlerSecurityGroupISecurityGroupClusterHandlerSecurityGroupISecurityGroupClusterHandlerSecurityGroupISecurityGroup= No security group.#
A security group to associate with the Cluster Handler's Lambdas.

The Cluster Handler's Lambdas are responsible for calling AWS's EKS API.

Requires placeClusterHandlerInVpc to be set to true.

clusterNamestringcluster_namestrclusterNameStringClusterNamestringClusterName*stringrequired#
The physical name of the Cluster.
clusterOpenIdConnectIssuerstringcluster_open_id_connect_issuerstrclusterOpenIdConnectIssuerStringClusterOpenIdConnectIssuerstringClusterOpenIdConnectIssuer*stringrequired#
If this cluster is kubectl-enabled, returns the OpenID Connect issuer.

This is because the values is only be retrieved by the API and not exposed by CloudFormation. If this cluster is not kubectl-enabled (i.e. uses the stock CfnCluster), this is undefined.

clusterOpenIdConnectIssuerUrlstringcluster_open_id_connect_issuer_urlstrclusterOpenIdConnectIssuerUrlStringClusterOpenIdConnectIssuerUrlstringClusterOpenIdConnectIssuerUrl*stringrequired#
If this cluster is kubectl-enabled, returns the OpenID Connect issuer url.

This is because the values is only be retrieved by the API and not exposed by CloudFormation. If this cluster is not kubectl-enabled (i.e. uses the stock CfnCluster), this is undefined.

clusterRefClusterReferencecluster_refClusterReferenceclusterRefClusterReferenceClusterRefClusterReferenceClusterRefClusterReferencerequired#
A reference to a Cluster resource.
clusterSecurityGroupISecurityGroupcluster_security_groupISecurityGroupclusterSecurityGroupISecurityGroupClusterSecurityGroupISecurityGroupClusterSecurityGroupISecurityGrouprequired#
The cluster security group that was created by Amazon EKS for the cluster.
clusterSecurityGroupIdstringcluster_security_group_idstrclusterSecurityGroupIdStringClusterSecurityGroupIdstringClusterSecurityGroupId*stringrequired#
The id of the cluster security group that was created by Amazon EKS for the cluster.
connectionsConnectionsconnectionsConnectionsconnectionsConnectionsConnectionsConnectionsConnectionsConnectionsrequired#
Manages connection rules (Security Group Rules) for the cluster.
defaultCapacityAutoScalingGroupdefault_capacityAutoScalingGroupdefaultCapacityAutoScalingGroupDefaultCapacityAutoScalingGroupDefaultCapacityAutoScalingGroup#
The auto scaling group that hosts the default capacity for this cluster.

This will be undefined if the defaultCapacityType is not EC2 or defaultCapacityType is EC2 but default capacity is set to 0.

defaultNodegroupNodegroupdefault_nodegroupNodegroupdefaultNodegroupNodegroupDefaultNodegroupNodegroupDefaultNodegroupNodegroup#
The node group that hosts the default capacity for this cluster.

This will be undefined if the defaultCapacityType is EC2 or defaultCapacityType is NODEGROUP but default capacity is set to 0.

eksPodIdentityAgentIAddoneks_pod_identity_agentIAddoneksPodIdentityAgentIAddonEksPodIdentityAgentIAddonEksPodIdentityAgentIAddon#
Retrieves the EKS Pod Identity Agent addon for the EKS cluster.
notes

The EKS Pod Identity Agent is responsible for managing the temporary credentials used by pods in the cluster to access AWS resources. It runs as a DaemonSet on each node and provides the necessary credentials to the pods based on their associated service account.

The environment this resource belongs to.
notes

For resources that are created and managed in a Stack (those created by creating new class instances like new Role(), new Bucket(), etc.), this is always the same as the environment of the stack they belong to.

For referenced resources (those obtained from referencing methods like Role.fromRoleArn(), Bucket.fromBucketName(), etc.), they might be different than the stack they were imported into.

ipFamilyIpFamilyip_familyIpFamilyipFamilyIpFamilyIpFamilyIpFamilyIpFamilyIpFamily= IpFamily.IP_V4#
Specify which IP family is used to assign Kubernetes pod and service IP addresses.
kubectlEnvironment{ [key: string]: string }kubectl_environmenttyping.Mapping[str, str]kubectlEnvironmentMap<String, String>KubectlEnvironmentIDictionary<string, string>KubectlEnvironment*map[string]*string#
Custom environment variables when running `kubectl` against this cluster.
kubectlLambdaRoleIRolekubectl_lambda_roleIRolekubectlLambdaRoleIRoleKubectlLambdaRoleIRoleKubectlLambdaRoleIRole= if not specified, the default ro…#
An IAM role that can perform kubectl operations against this cluster.

The role should be mapped to the system:masters Kubernetes RBAC role.

This role is directly passed to the lambda handler that sends Kube Ctl commands to the cluster.

default

Default: if not specified, the default role created by a lambda function will be used.

kubectlLayerILayerVersionkubectl_layerILayerVersionkubectlLayerILayerVersionKubectlLayerILayerVersionKubectlLayerILayerVersion#
An AWS Lambda layer that includes `kubectl` and `helm`.
kubectlMemorySizekubectl_memorySizekubectlMemorySizeKubectlMemorySizeKubectlMemorySize#
The amount of memory allocated to the kubectl provider's lambda function.
kubectlPrivateSubnetsISubnet[]kubectl_private_subnetstyping.List[ISubnet]kubectlPrivateSubnetsList<ISubnet>KubectlPrivateSubnetsISubnet[]KubectlPrivateSubnets*[]ISubnet= If not specified, the k8s endpoi…#
Subnets to host the `kubectl` compute resources.
default

Default: If not specified, the k8s endpoint is expected to be accessible publicly.

kubectlRoleIRolekubectl_roleIRolekubectlRoleIRoleKubectlRoleIRoleKubectlRoleIRole#
An IAM role that can perform kubectl operations against this cluster.

The role should be mapped to the system:masters Kubernetes RBAC role.

kubectlSecurityGroupISecurityGroupkubectl_security_groupISecurityGroupkubectlSecurityGroupISecurityGroupKubectlSecurityGroupISecurityGroupKubectlSecurityGroupISecurityGroup= If not specified, the k8s endpoi…#
A security group to use for `kubectl` execution.
default

Default: If not specified, the k8s endpoint is expected to be accessible publicly.

nodeNodenodeNodenodeNodeNodeNodeNodeNoderequired#
The tree node.
onEventLayerILayerVersionon_event_layerILayerVersiononEventLayerILayerVersionOnEventLayerILayerVersionOnEventLayerILayerVersion#
The AWS Lambda layer that contains the NPM dependency `proxy-agent`.

If undefined, a SAR app that contains this layer will be used.

openIdConnectProviderIOpenIdConnectProvideropen_id_connect_providerIOpenIdConnectProvideropenIdConnectProviderIOpenIdConnectProviderOpenIdConnectProviderIOpenIdConnectProviderOpenIdConnectProviderIOpenIdConnectProviderrequired#
An `OpenIdConnectProvider` resource associated with this cluster, and which can be used to link this cluster to AWS IAM.

A provider will only be defined if this property is accessed (lazy initialization).

PROPERTY_INJECTION_IDstringproperty_injection_idstrPROPERTY_INJECTION_IDStringPROPERTY_INJECTION_IDstringPROPERTY_INJECTION_ID*stringrequiredstatic#
Uniquely identifies this class.
prunebooleanpruneboolpruneBooleanPruneboolPrune*boolrequired#
Determines if Kubernetes resources can be pruned automatically.
roleIRoleroleIRoleroleIRoleRoleIRoleRoleIRolerequired#
IAM role assumed by the EKS Control Plane.
stackStackstackStackstackStackStackStackStackStackrequired#
The stack in which this resource is defined.
vpcIVpcvpcIVpcvpcIVpcVpcIVpcVpcIVpcrequired#
The VPC in which this Cluster was created.

Methods ​

addAutoScalingGroupCapacity(id: string, options: AutoScalingGroupCapacityOptions): AutoScalingGroupdef add_auto_scaling_group_capacity(self, id: str, options: AutoScalingGroupCapacityOptions) -> AutoScalingGrouppublic AutoScalingGroup addAutoScalingGroupCapacity(String id, AutoScalingGroupCapacityOptions options)public AutoScalingGroup AddAutoScalingGroupCapacity(string id, AutoScalingGroupCapacityOptions options)func AddAutoScalingGroupCapacity(Id *string, Options AutoScalingGroupCapacityOptions) AutoScalingGroup#
Add nodes to this EKS cluster.
notes

The nodes will automatically be configured with the right VPC and AMI for the instance type and Kubernetes version.

Note that if you specify updateType: RollingUpdate or updateType: ReplacingUpdate, your nodes might be replaced at deploy time without notice in case the recommended AMI for your machine image type has been updated by AWS. The default behavior for updateType is None, which means only new instances will be launched using the new AMI.

Spot instances will be labeled lifecycle=Ec2Spot and tainted with PreferNoSchedule. In addition, the spot interrupt handler daemon will be installed on all spot instances to handle EC2 Spot Instance Termination Notices.

addCdk8sChart(id: string, chart: Construct, options?: KubernetesManifestOptions): KubernetesManifestdef add_cdk8s_chart(self, id: str, chart: Construct, options: typing.Optional[KubernetesManifestOptions] = None) -> KubernetesManifestpublic KubernetesManifest addCdk8sChart(String id, Construct chart, KubernetesManifestOptions options)public KubernetesManifest AddCdk8sChart(string id, Construct chart, KubernetesManifestOptions? options = null)func AddCdk8sChart(Id *string, Chart Construct, Options KubernetesManifestOptions) KubernetesManifest#
Defines a CDK8s chart in this cluster.
2 parameters · returns

Parameters

  • ididididId — logical id of this chart.
  • chartchartchartchartChart — the cdk8s chart.

Returns: a KubernetesManifest construct representing the chart.

addFargateProfile(id: string, options: FargateProfileOptions): FargateProfiledef add_fargate_profile(self, id: str, options: FargateProfileOptions) -> FargateProfilepublic FargateProfile addFargateProfile(String id, FargateProfileOptions options)public FargateProfile AddFargateProfile(string id, FargateProfileOptions options)func AddFargateProfile(Id *string, Options FargateProfileOptions) FargateProfile#
Adds a Fargate profile to this cluster.
2 parameters

Parameters

  • ididididId — the id of this profile.
  • optionsoptionsoptionsoptionsOptions — profile options.
addHelmChart(id: string, options: HelmChartOptions): HelmChartdef add_helm_chart(self, id: str, options: HelmChartOptions) -> HelmChartpublic HelmChart addHelmChart(String id, HelmChartOptions options)public HelmChart AddHelmChart(string id, HelmChartOptions options)func AddHelmChart(Id *string, Options HelmChartOptions) HelmChart#
Defines a Helm chart in this cluster.
2 parameters · returns

Parameters

  • ididididId — logical id of this chart.
  • optionsoptionsoptionsoptionsOptions — options of this chart.

Returns: a HelmChart construct

addManifest(id: string, ...manifest: { [key: string]: any }[]): KubernetesManifestdef add_manifest(self, id: str, manifest: typing.Mapping[str, Any]) -> KubernetesManifestpublic KubernetesManifest addManifest(String id, Map<String, Object> manifest)public KubernetesManifest AddManifest(string id, IDictionary<string, object> manifest)func AddManifest(Id *string, Manifest *map[string]interface{}) KubernetesManifest#
Defines a Kubernetes resource in this cluster.

The manifest will be applied/deleted using kubectl as needed.

2 parameters · returns

Parameters

  • ididididId — logical id of this manifest.
  • manifestmanifestmanifestmanifestManifest — a list of Kubernetes resource specifications.

Returns: a KubernetesResource object.

addNodegroupCapacity(id: string, options?: NodegroupOptions): Nodegroupdef add_nodegroup_capacity(self, id: str, options: typing.Optional[NodegroupOptions] = None) -> Nodegrouppublic Nodegroup addNodegroupCapacity(String id, NodegroupOptions options)public Nodegroup AddNodegroupCapacity(string id, NodegroupOptions? options = null)func AddNodegroupCapacity(Id *string, Options NodegroupOptions) Nodegroup#
Add managed nodegroup to this Amazon EKS cluster.

This method will create a new managed nodegroup and add into the capacity.

2 parameters

Parameters

  • ididididId — The ID of the nodegroup.
  • optionsoptionsoptionsoptionsOptions — options for creating a new nodegroup.
addServiceAccount(id: string, options?: ServiceAccountOptions): ServiceAccountdef add_service_account(self, id: str, options: typing.Optional[ServiceAccountOptions] = None) -> ServiceAccountpublic ServiceAccount addServiceAccount(String id, ServiceAccountOptions options)public ServiceAccount AddServiceAccount(string id, ServiceAccountOptions? options = null)func AddServiceAccount(Id *string, Options ServiceAccountOptions) ServiceAccount#
Creates a new service account with corresponding IAM Role (IRSA).
applyCrossStackReferenceStrength(strength: ReferenceStrength): voiddef apply_cross_stack_reference_strength(self, strength: ReferenceStrength) -> Nonepublic void applyCrossStackReferenceStrength(ReferenceStrength strength)public void ApplyCrossStackReferenceStrength(ReferenceStrength strength)func ApplyCrossStackReferenceStrength(Strength ReferenceStrength)#
Override the cross-stack reference strength for this resource.
notes · 1 parameter

When set, any cross-stack reference to this resource will use the specified mechanism instead of the global default determined by the @aws-cdk/core:defaultCrossStackReferences context key. This is useful for selectively weakening specific references to avoid the "deadly embrace" problem without changing the app-wide default.

Parameters

  • strengthstrengthstrengthstrengthStrength — - The reference strength to use for this resource.
applyRemovalPolicy(policy: RemovalPolicy): voiddef apply_removal_policy(self, policy: RemovalPolicy) -> Nonepublic void applyRemovalPolicy(RemovalPolicy policy)public void ApplyRemovalPolicy(RemovalPolicy policy)func ApplyRemovalPolicy(Policy RemovalPolicy)#
Apply the given removal policy to this resource.
notes

The Removal Policy controls what happens to this resource when it stops being managed by CloudFormation, either because you've removed it from the CDK application or because you've made a change that requires the resource to be replaced.

The resource can be deleted (RemovalPolicy.DESTROY), or left in your AWS account for data recovery and cleanup later (RemovalPolicy.RETAIN).

connectAutoScalingGroupCapacity(autoScalingGroup: AutoScalingGroup, options: AutoScalingGroupOptions): voiddef connect_auto_scaling_group_capacity(self, auto_scaling_group: AutoScalingGroup, options: AutoScalingGroupOptions) -> Nonepublic void connectAutoScalingGroupCapacity(AutoScalingGroup autoScalingGroup, AutoScalingGroupOptions options)public void ConnectAutoScalingGroupCapacity(AutoScalingGroup autoScalingGroup, AutoScalingGroupOptions options)func ConnectAutoScalingGroupCapacity(AutoScalingGroup AutoScalingGroup, Options AutoScalingGroupOptions)#
Connect capacity in the form of an existing AutoScalingGroup to the EKS cluster.
notes · 2 parameters

The AutoScalingGroup must be running an EKS-optimized AMI containing the /etc/eks/bootstrap.sh script. This method will configure Security Groups, add the right policies to the instance role, apply the right tags, and add the required user data to the instance's launch configuration.

Spot instances will be labeled lifecycle=Ec2Spot and tainted with PreferNoSchedule. If kubectl is enabled, the spot interrupt handler daemon will be installed on all spot instances to handle EC2 Spot Instance Termination Notices.

Prefer to use addAutoScalingGroupCapacity if possible.

Parameters

  • autoScalingGroupauto_scaling_groupautoScalingGroupautoScalingGroupAutoScalingGroup — [disable-awslint:ref-via-interface].
  • optionsoptionsoptionsoptionsOptions — options for adding auto scaling groups, like customizing the bootstrap script.
fromClusterAttributes(scope: Construct, id: string, attrs: ClusterAttributes): ICluster@staticmethod def from_cluster_attributes(scope: Construct, id: str, attrs: ClusterAttributes) -> IClusterpublic static ICluster fromClusterAttributes(Construct scope, String id, ClusterAttributes attrs)public static ICluster FromClusterAttributes(Construct scope, string id, ClusterAttributes attrs)func FromClusterAttributes(Scope Construct, Id *string, Attrs ClusterAttributes) IClusterstatic#
Import an existing cluster.
3 parameters

Parameters

  • scopescopescopescopeScope — the construct scope, in most cases 'this'.
  • ididididId — the id or name to import as.
  • attrsattrsattrsattrsAttrs — the cluster properties to use for importing information.
getIngressLoadBalancerAddress(ingressName: string, options?: IngressLoadBalancerAddressOptions): stringdef get_ingress_load_balancer_address(self, ingress_name: str, options: typing.Optional[IngressLoadBalancerAddressOptions] = None) -> strpublic String getIngressLoadBalancerAddress(String ingressName, IngressLoadBalancerAddressOptions options)public string GetIngressLoadBalancerAddress(string ingressName, IngressLoadBalancerAddressOptions? options = null)func GetIngressLoadBalancerAddress(IngressName *string, Options IngressLoadBalancerAddressOptions) *string#
Fetch the load balancer address of an ingress backed by a load balancer.
2 parameters

Parameters

  • ingressNameingress_nameingressNameingressNameIngressName — The name of the ingress.
  • optionsoptionsoptionsoptionsOptions — Additional operation options.
getServiceLoadBalancerAddress(serviceName: string, options?: ServiceLoadBalancerAddressOptions): stringdef get_service_load_balancer_address(self, service_name: str, options: typing.Optional[ServiceLoadBalancerAddressOptions] = None) -> strpublic String getServiceLoadBalancerAddress(String serviceName, ServiceLoadBalancerAddressOptions options)public string GetServiceLoadBalancerAddress(string serviceName, ServiceLoadBalancerAddressOptions? options = null)func GetServiceLoadBalancerAddress(ServiceName *string, Options ServiceLoadBalancerAddressOptions) *string#
Fetch the load balancer address of a service of type 'LoadBalancer'.
2 parameters

Parameters

  • serviceNameservice_nameserviceNameserviceNameServiceName — The name of the service.
  • optionsoptionsoptionsoptionsOptions — Additional operation options.
grantAccess(id: string, principal: string, accessPolicies: IAccessPolicy[], options?: GrantAccessOptions): voiddef grant_access(self, id: str, principal: str, access_policies: typing.List[IAccessPolicy], options: typing.Optional[GrantAccessOptions] = None) -> Nonepublic void grantAccess(String id, String principal, List<IAccessPolicy> accessPolicies, GrantAccessOptions options)public void GrantAccess(string id, string principal, IAccessPolicy[] accessPolicies, GrantAccessOptions? options = null)func GrantAccess(Id *string, Principal *string, AccessPolicies *[]IAccessPolicy, Options GrantAccessOptions)#
Grants the specified IAM principal access to the EKS cluster based on the provided access policies.
notes · 4 parameters

This method creates an AccessEntry construct that grants the specified IAM principal the access permissions defined by the provided IAccessPolicy array. This allows the IAM principal to perform the actions permitted by the access policies within the EKS cluster.

Parameters

  • ididididId — - The ID of the AccessEntry construct to be created.
  • principalprincipalprincipalprincipalPrincipal — - The IAM principal (role or user) to be granted access to the EKS cluster.
  • accessPoliciesaccess_policiesaccessPoliciesaccessPoliciesAccessPolicies — - An array of IAccessPolicy objects that define the access permissions to be granted to the IAM principal.
  • optionsoptionsoptionsoptionsOptions — - Additional options for granting access.
isConstruct(x: any): boolean@staticmethod def is_construct(x: Any) -> boolpublic static Boolean isConstruct(Object x)public static bool IsConstruct(object x)func IsConstruct(X interface{}) *boolstatic#
Checks if `x` is a construct.
notes · 1 parameter · returns

Use this method instead of instanceof to properly detect Construct instances, even when the construct library is symlinked.

Explanation: in JavaScript, multiple copies of the constructs library on disk are seen as independent, completely different libraries. As a consequence, the class Construct in each copy of the constructs library is seen as a different class, and an instance of one class will not test as instanceof the other class. npm install will not create installations like this, but users may manually symlink construct libraries together or use a monorepo tool: in those cases, multiple copies of the constructs library can be accidentally installed, and instanceof will behave unpredictably. It is safest to avoid using instanceof, and using this type-testing method instead.

Parameters

  • xxxxX — Any object.

Returns: true if x is an object created from a class which extends Construct.

isOwnedResource(construct: IConstruct): boolean@staticmethod def is_owned_resource(construct: IConstruct) -> boolpublic static Boolean isOwnedResource(IConstruct construct)public static bool IsOwnedResource(IConstruct construct)func IsOwnedResource(Construct IConstruct) *boolstatic#
Returns true if the construct was created by CDK, and false otherwise.
isResource(construct: IConstruct): boolean@staticmethod def is_resource(construct: IConstruct) -> boolpublic static Boolean isResource(IConstruct construct)public static bool IsResource(IConstruct construct)func IsResource(Construct IConstruct) *boolstatic#
Check whether the given construct is a Resource.
toString(): stringdef to_string(self, ) -> strpublic String toString()public string ToString()func ToString() *string#
Returns a string representation of this construct.
with(...mixins: IMixin[]): IConstructdef with(self, mixins: IMixin) -> IConstructpublic IConstruct with(IMixin mixins)public IConstruct With(IMixin mixins)func With(Mixins IMixin) IConstruct#
Applies one or more mixins to this construct.

Mixins are applied in order. The list of constructs is captured at the start of the call, so constructs added by a mixin will not be visited. Use multiple with() calls if subsequent mixins should apply to added constructs.