# EksContainerDefinitionProps

Props to configure an EksContainerDefinition.

Extends: EksContainerDefinitionProps
Used as props by: EksContainerDefinition

- Source: [`aws-batch/lib/eks-container-definition.ts`](https://github.com/aws/aws-cdk/blob/v2.274.0/packages/aws-cdk-lib/aws-batch/lib/eks-container-definition.ts#L291)
- Type last changed: v2.96.0 · 13 Sep 2023

## Example

```ts
const jobDefn = new batch.EksJobDefinition(this, 'eksf2', {
  container: new batch.EksContainerDefinition(this, 'container', {
    image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
    volumes: [batch.EksVolume.emptyDir({
      name: 'myEmptyDirVolume',
      mountPath: '/mount/path',
      medium: batch.EmptyDirMediumType.MEMORY,
      readonly: true,
      sizeLimit: cdk.Size.mebibytes(2048),
    })],
  }),
});
```

## Properties

- `args`: string[] — An array of arguments to the entrypoint.

  **Default:** no args

  If this isn't specified, the CMD of the container image is used.
  This corresponds to the args member in the Entrypoint portion of the Pod in Kubernetes.
  Environment variable references are expanded using the container's environment.
  If the referenced environment variable doesn't exist, the reference in the command isn't changed.
  For example, if the reference is to "$(NAME1)" and the NAME1 environment variable doesn't exist,
  the command string will remain "$(NAME1)." $$ is replaced with $, and the resulting string isn't expanded.
  or example, $$(VAR_NAME) is passed as $(VAR_NAME) whether or not the VAR_NAME environment variable exists.

- `command`: string[] — The entrypoint for the container.

  **Default:** no command

  This isn't run within a shell.
  If this isn't specified, the `ENTRYPOINT` of the container image is used.
  Environment variable references are expanded using the container's environment.
  If the referenced environment variable doesn't exist, the reference in the command isn't changed.
  For example, if the reference is to `"$(NAME1)"` and the `NAME1` environment variable doesn't exist,
  the command string will remain `"$(NAME1)."` `$$` is replaced with `$` and the resulting string isn't expanded.
  For example, `$$(VAR_NAME)` will be passed as `$(VAR_NAME)` whether or not the `VAR_NAME` environment variable exists.

  The entrypoint can't be updated.

- `cpuLimit`: number — The hard limit of CPUs to present to this container. Must be an even multiple of 0.25.

  **Default:** No CPU limit

  If your container attempts to exceed this limit, it will be terminated.

  At least one of `cpuReservation` and `cpuLimit` is required.
  If both are specified, then `cpuLimit` must be at least as large as `cpuReservation`.

- `cpuReservation`: number — The soft limit of CPUs to reserve for the container Must be an even multiple of 0.25.

  **Default:** No CPUs reserved

  The container will given at least this many CPUs, but may consume more.

  At least one of `cpuReservation` and `cpuLimit` is required.
  If both are specified, then `cpuLimit` must be at least as large as `cpuReservation`.

- `env`: { [key: string]: string } — The environment variables to pass to this container.

  **Default:** no environment variables

  *Note*: Environment variables cannot start with "AWS_BATCH".
  This naming convention is reserved for variables that AWS Batch sets.

- `gpuLimit`: number — The hard limit of GPUs to present to this container.

  **Default:** No GPU limit

  If your container attempts to exceed this limit, it will be terminated.

  If both `gpuReservation` and `gpuLimit` are specified, then `gpuLimit` must be equal to `gpuReservation`.

- `gpuReservation`: number — The soft limit of CPUs to reserve for the container Must be an even multiple of 0.25.

  **Default:** No GPUs reserved

  The container will given at least this many CPUs, but may consume more.

  If both `gpuReservation` and `gpuLimit` are specified, then `gpuLimit` must be equal to `gpuReservation`.

- `image`: [ContainerImage](/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ContainerImage.html) (required) — The image that this container will run.

- `imagePullPolicy`: [ImagePullPolicy](/cdk/api/v2/docs/aws-cdk-lib.aws_batch.ImagePullPolicy.html) — The image pull policy for this container.

  **Default:** `ALWAYS` if the `:latest` tag is specified, `IF_NOT_PRESENT` otherwise

- `memoryLimit`: [Size](/cdk/api/v2/docs/aws-cdk-lib.Size.html) — The amount (in MiB) of memory to present to the container.

  **Default:** No memory limit

  If your container attempts to exceed the allocated memory, it will be terminated.

  Must be larger that 4 MiB

  At least one of `memoryLimit` and `memoryReservation` is required

  *Note*: To maximize your resource utilization, provide your jobs with as much memory as possible
  for the specific instance type that you are using.

- `memoryReservation`: [Size](/cdk/api/v2/docs/aws-cdk-lib.Size.html) — The soft limit (in MiB) of memory to reserve for the container.

  **Default:** No memory reserved

  Your container will be given at least this much memory, but may consume more.

  Must be larger that 4 MiB

  When system memory is under heavy contention, Docker attempts to keep the
  container memory to this soft limit. However, your container can consume more
  memory when it needs to, up to either the hard limit specified with the memory
  parameter (if applicable), or all of the available memory on the container
  instance, whichever comes first.

  At least one of `memoryLimit` and `memoryReservation` is required.
  If both are specified, then `memoryLimit` must be equal to `memoryReservation`

  *Note*: To maximize your resource utilization, provide your jobs with as much memory as possible
  for the specific instance type that you are using.

- `name`: string — The name of this container.

  **Default:** : `'Default'`

- `privileged`: boolean = false — If specified, gives this container elevated permissions on the host container instance.

  The level of permissions are similar to the root user permissions.

  This parameter maps to `privileged` policy in the Privileged pod security policies in the Kubernetes documentation.

  *Note*: this is only compatible with Kubernetes < v1.25

- `readonlyRootFilesystem`: boolean = false — If specified, gives this container readonly access to its root file system.

  This parameter maps to `ReadOnlyRootFilesystem` policy in the Volumes and file systems pod security policies in the Kubernetes documentation.

  *Note*: this is only compatible with Kubernetes < v1.25

- `runAsGroup`: number = none — If specified, the container is run as the specified group ID (`gid`).

  If this parameter isn't specified, the default is the group that's specified in the image metadata.
  This parameter maps to `RunAsGroup` and `MustRunAs` policy in the Users and groups pod security policies in the Kubernetes documentation.

  *Note*: this is only compatible with Kubernetes < v1.25

- `runAsRoot`: boolean — If specified, the container is run as a user with a `uid` other than 0.

  **Default:** the container is *not* required to run as a non-root user

  Otherwise, no such rule is enforced.
  This parameter maps to `RunAsUser` and `MustRunAsNonRoot` policy in the Users and groups pod security policies in the Kubernetes documentation.

  *Note*: this is only compatible with Kubernetes < v1.25

- `runAsUser`: number — If specified, this container is run as the specified user ID (`uid`).

  **Default:** the user that is specified in the image metadata.

  This parameter maps to `RunAsUser` and `MustRunAs` policy in the Users and groups pod security policies in the Kubernetes documentation.

  *Note*: this is only compatible with Kubernetes < v1.25

- `volumes`: [EksVolume](/cdk/api/v2/docs/aws-cdk-lib.aws_batch.EksVolume.html)[] — The Volumes to mount to this container.

  **Default:** no volumes

  Automatically added to the Pod.
