> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/gym/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/gym/_mcp/server.

# nemo_gym.sandbox.providers.ecs_fargate

ECS Fargate sandbox provider package.

## Submodules

* **[`nemo_gym.sandbox.providers.ecs_fargate.engine`](/nemo/gym/nemo-gym/nemo_gym/sandbox/providers/ecs_fargate/engine)**
* **[`nemo_gym.sandbox.providers.ecs_fargate.provider`](/nemo/gym/nemo-gym/nemo_gym/sandbox/providers/ecs_fargate/provider)**

## Package Contents

### Classes

| Name                                                                                        | Description                                                   |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| [`EcsFargateConfig`](#nemo_gym-sandbox-providers-ecs_fargate-engine-EcsFargateConfig)       | Configuration for the ECS Fargate sandbox.                    |
| [`EcsFargateProvider`](#nemo_gym-sandbox-providers-ecs_fargate-provider-EcsFargateProvider) | Run sandboxes as AWS ECS Fargate tasks behind an SSH sidecar. |
| [`SshSidecarConfig`](#nemo_gym-sandbox-providers-ecs_fargate-engine-SshSidecarConfig)       | SSH sidecar container configuration.                          |

### Functions

| Name                                                                                                        | Description                                       |
| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| [`engine_config_from_mapping`](#nemo_gym-sandbox-providers-ecs_fargate-provider-engine_config_from_mapping) | Build an `EcsFargateConfig` from provider kwargs. |

### API

```python
class nemo_gym.sandbox.providers.ecs_fargate.EcsFargateConfig(
    region: str | None = None,
    cluster: str = '',
    subnets: list[str] = list(),
    security_groups: list[str] = list(),
    assign_public_ip: bool = False,
    task_definition: str | None = None,
    task_definition_family_prefix: str = 'ecs-sandbox',
    image_template: str | None = None,
    container_name: str = 'main',
    container_port: int | None = None,
    cpu: str = '4096',
    memory: str = '8192',
    ephemeral_storage_gib: int | None = None,
    platform_version: str | None = None,
    execution_role_arn: str | None = None,
    task_role_arn: str | None = None,
    extra_env: dict[str, str] | None = None,
    log_group: str | None = None,
    log_stream_prefix: str | None = None,
    max_task_lifetime_sec: int = 14400,
    startup_timeout_sec: float = 300.0,
    poll_interval_sec: float = 2.0,
    run_task_max_retries: int = 30,
    ssh_sidecar: nemo_gym.sandbox.providers.ecs_fargate.engine.SshSidecarConfig | None = None,
    s3_bucket: str | None = None,
    s3_prefix: str | None = None,
    ecr_repository: str | None = None,
    environment_dir: str | None = None,
    codebuild_project: str | None = None,
    codebuild_service_role: str | None = None,
    codebuild_compute_type: str = 'BUILD_GENERAL1_MEDIUM',
    codebuild_build_timeout: int = 60,
    dockerhub_secret_arn: str | None = None,
    build_parallelism: int = 50,
    auto_mirror: bool = True,
    efs_filesystem_id: str | None = None,
    efs_access_point_id: str | None = None,
    ssm_project: str = DEFAULT_SSM_PROJECT
)
```

Dataclass

Configuration for the ECS Fargate sandbox.

**`assign_public_ip`** `bool = False`

---

**`auto_mirror`** `bool = True`

---

**`build_parallelism`** `int = 50`

---

**`cluster`** `str = ''`

---

**`codebuild_build_timeout`** `int = 60`

---

**`codebuild_compute_type`** `str = 'BUILD_GENERAL1_MEDIUM'`

---

**`codebuild_project`** `str | None = None`

---

**`codebuild_service_role`** `str | None = None`

---

**`container_name`** `str = 'main'`

---

**`container_port`** `int | None = None`

---

**`cpu`** `str = '4096'`

---

**`dockerhub_secret_arn`** `str | None = None`

---

**`ecr_repository`** `str | None = None`

---

**`efs_access_point_id`** `str | None = None`

---

**`efs_filesystem_id`** `str | None = None`

---

**`environment_dir`** `str | None = None`

---

**`ephemeral_storage_gib`** `int | None = None`

---

**`execution_role_arn`** `str | None = None`

---

**`extra_env`** `dict[str, str] | None = None`

---

**`image_template`** `str | None = None`

---

**`log_group`** `str | None = None`

---

**`log_stream_prefix`** `str | None = None`

---

**`max_task_lifetime_sec`** `int = 14400`

---

**`memory`** `str = '8192'`

---

**`platform_version`** `str | None = None`

---

**`poll_interval_sec`** `float = 2.0`

---

**`region`** `str | None = None`

---

**`run_task_max_retries`** `int = 30`

---

**`s3_bucket`** `str | None = None`

---

**`s3_prefix`** `str | None = None`

---

**`security_groups`** `list[str] = field(default_factory=list)`

---

**`ssh_sidecar`** `SshSidecarConfig | None = None`

---

**`ssm_project`** `str = DEFAULT_SSM_PROJECT`

---

**`startup_timeout_sec`** `float = 300.0`

---

**`subnets`** `list[str] = field(default_factory=list)`

---

**`task_definition`** `str | None = None`

---

**`task_definition_family_prefix`** `str = 'ecs-sandbox'`

---

**`task_role_arn`** `str | None = None`

---

```python
class nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider(
    config: typing.Any = {}
)
```

Run sandboxes as AWS ECS Fargate tasks behind an SSH sidecar.

**`_cfg`** `= engine_config_from_mapping(config)`

---

**`name`** `= 'ecs_fargate'`

---

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.aclose() -> None
```

async

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.close(
    handle: nemo_gym.sandbox.providers.base.SandboxHandle
) -> None
```

async

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.create(
    spec: nemo_gym.sandbox.providers.base.SandboxSpec
) -> nemo_gym.sandbox.providers.base.SandboxHandle
```

async

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.download_file(
    handle: nemo_gym.sandbox.providers.base.SandboxHandle,
    source_path: str,
    target_path: pathlib.Path
) -> None
```

async

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.exec(
    handle: nemo_gym.sandbox.providers.base.SandboxHandle,
    command: str,
    cwd: str | None = None,
    env: dict[str, str] | None = None,
    timeout_s: int | float | None = None,
    user: str | int | None = None
) -> nemo_gym.sandbox.providers.base.SandboxExecResult
```

async

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.status(
    handle: nemo_gym.sandbox.providers.base.SandboxHandle
) -> nemo_gym.sandbox.providers.base.SandboxStatus
```

async

```python
nemo_gym.sandbox.providers.ecs_fargate.EcsFargateProvider.upload_file(
    handle: nemo_gym.sandbox.providers.base.SandboxHandle,
    source_path: pathlib.Path,
    target_path: str
) -> None
```

async

```python
class nemo_gym.sandbox.providers.ecs_fargate.SshSidecarConfig(
    sshd_port: int = 2222,
    ssh_ready_timeout_sec: float = 300.0,
    public_key_secret_arn: str = '',
    private_key_secret_arn: str = '',
    image: str | None = None,
    exec_server_port: int | None = None
)
```

Dataclass

SSH sidecar container configuration.

exec\_server\_port set → exec-server mode (one-way tunnel).
exec\_server\_port None → agent-server mode (two-way tunnel).

**`exec_server_port`** `int | None = None`

---

**`image`** `str | None = None`

---

**`private_key_secret_arn`** `str = ''`

---

**`public_key_secret_arn`** `str = ''`

---

**`ssh_ready_timeout_sec`** `float = 300.0`

---

**`sshd_port`** `int = 2222`

---

```python
nemo_gym.sandbox.providers.ecs_fargate.engine_config_from_mapping(
    config: dict[str, typing.Any]
) -> nemo_gym.sandbox.providers.ecs_fargate.engine.EcsFargateConfig
```

Build an `EcsFargateConfig` from provider kwargs.

When `region` is given but `cluster` is omitted, infrastructure is auto-discovered from SSM;
explicit kwargs always win over SSM.