This topic describes the configuration options of the AWSNodePool Custom Resource Definition.

<br />

## General format

To create an AWSNodePool from this template, copy the following YAML and
replace the highlighted values as defined in the
[field specifications](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/reference/awsnodepools.md.txt#spec).

```yaml
apiVersion: multicloud.cluster.gke.io/v1
kind: AWSNodePool
metadata:
  name: NODE_POOL_NAME
spec:
  clusterName: AWSCLUSTER_NAME
  version:  CLUSTER_VERSION # latest version is 1.25.5-gke.2100
  region: AWS_REGION
  subnetID: AWS_SUBNET_ID
  minNodeCount: MINIMUM_NODE_COUNT
  maxNodeCount: MAXIMUM_NODE_COUNT
  maxPodsPerNode: MAXIMUM_PODS_PER_NODE_COUNT
  instanceType: AWS_NODE_TYPE
  keyName: KMS_KEY_PAIR_NAME
  iamInstanceProfile: NODE_IAM_PROFILE
  proxySecretName: PROXY_SECRET_NAME
  rootVolume:
    sizeGiB: ROOT_VOLUME_SIZE
    volumeType: VOLUME_TYPE # Optional
    iops: IOPS # Optional
    kmsKeyARN: NODE_VOLUME_KEY # Optional 
  labels: # Optional
    LABEL_NAME: LABEL_VALUE
  taints:
  - key: KEY1
    value: VALUE1
    effect: PREFERNOSCHEDULE
  - key: KEY2
    effect: NOSCHEDULE
  tags:
    TAG_NAME: TAG_VALUE 
```

## Field specifications

You can define the following fields in a AWSNodePool's `spec`.

| Name | Description | Type | Example | Required |
|---|---|---|---|---|
| clusterName | Your AWSCluster's name. | `string` | `my-cluster` | yes |
| region | An AWS region for the node pool. This value must match the region of the parent cluster. | `string` | `us-east-1` | yes |
| version | The node pool's cluster version. See [Versioning and upgrades](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/concepts/versioning-and-upgrades.md.txt) and [upgrading a user cluster](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/how-to/upgrading-user-cluster) for more information. | `string` | `1.25.5-gke.2100` |   |
| minNodeCount | The minimum number of worker nodes in the node pool. | `integer` | `3` | yes |
| maxNodeCount | The maximum number of worker nodes in the node pool. | `integer` | `3` | yes |
| maxPodsPerNode | The maximum number of pods that GKE on AWS will allocate to a node. | `integer` | `100` | yes |
| instanceType | An AWS EC2 instance type for each node pool worker. See [Supported instance types](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/reference/instance-types.md.txt). | `string` | `m5.large` | yes |
| keyName | The AWS KMS key pair assigned to each node pool worker. | `string` | `my-key-pair` | yes |
| securityGroupIDs | The IDs of additional security groups to add to nodes in this pool. Note that GKE on AWS automatically creates security groups with minimum rules needed for a functioning node pool. | `list(string)` | `[sg-0ec06559d997a796f]` | no |
| iamInstanceProfile | The name of the AWS EC2 instance profile assigned to nodes in the pool. | `string` | `my-node-pool-profile` | yes |
| proxySecretName | The name of a proxy secret to configure [custom proxy settings](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/how-to/changing-proxy-settings.md.txt) | `string` | `proxy-secret-1` | no |
| rootVolume | Parameters for node pool's root volumes. For more information, see [spec.RootVolume](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/reference/awsnodepools.md.txt#specrootvolume). | `object` | `{sizeGiB: 10}` | yes |
| subnetId | The private subnet in the node pool's region | `string` | `subnet-1234567890abcdef` | yes |
| labels | [Labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) applied to nodes in the node pool | `object` | `{billing: some-account, owner: dev}` | no |
| taints | [Taints](https://docs.cloud.google.com/kubernetes-engine/docs/how-to/node-taints) applied to the node pool | `object` | `key: key1 value: value1 effect: PreferNoSchedule` | no |
| tags | Key/value metadata assigned to each AWS resource supporting the node pool. | `map(string)` | {Environment: Production, Team: Analytics} | no |

### spec.rootVolume

| Name | Description | Type | Example | Required |
|---|---|---|---|---|
| sizeGiB | Size of the control plane node's root volume in Gigabytes. You might need to increase this for large clusters. | `integer` | `10` | yes |
| volumeType | The node's AWS [EBS volume type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html). Can be `gp2` (default) or `gp3`. | `string` | `gp2` | no |
| iops | The amount of provisioned IO operations per second (IOPS) for volumes. Only valid when `volumeType` is `gp3`. For more information, see [General Purpose SSD volumes (gp3)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html#gp3-ebs-volume-type). | `integer` | `5000` | no |
| kmsKeyARN | The ARN of the AWS KMS key used to encrypt the EBS volume. For more information, see [Using a customer managed CMK to encrypt volumes](https://docs.cloud.google.com/kubernetes-engine/multi-cloud/docs/aws/previous-generation/how-to/using-cmk.md.txt). | `string` | `arn:aws:kms:us-west-1:123456789:key/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee` | no |