or run

tessl search
Log in

Version

Files

docs

ai-registry.mdclarify.mddata-io.mddebugger.mdevaluation.mdexperiments.mdexplainer-config.mdindex.mdjumpstart.mdlineage.mdmlops.mdmonitoring.mdprocessing.mdremote-functions.mdresources.mds3-utilities.mdserving.mdtraining.mdworkflow-primitives.md
tile.json

resources.mddocs/

Resource Classes

Auto-generated resource classes providing direct access to 110+ SageMaker API resources for advanced control and management.

Overview

The sagemaker.core.resources module contains auto-generated resource classes that map directly to SageMaker APIs. These provide low-level access for advanced use cases beyond the high-level abstractions.

When to Use Resource Classes:

  • Advanced scenarios requiring fine-grained API control
  • Features not yet wrapped by high-level APIs
  • Direct resource manipulation
  • Integration with existing infrastructure-as-code

When to Use High-Level APIs Instead:

  • Most common workflows (ModelBuilder, ModelTrainer, Pipeline)
  • Standard training and deployment
  • Recommended for new implementations

Key Resource Classes

Training & Inference Resources

TrainingJob

class TrainingJob:
    """
    Training job resource.

    Class Methods:
        create(...) -> TrainingJob
            Create training job directly via API.
            
            Returns:
                TrainingJob: Created job
        
        get(training_job_name, sagemaker_session=None) -> TrainingJob
            Get existing training job.
            
            Parameters:
                training_job_name: str - Job name (required)
                sagemaker_session: Optional[Session] - Session
            
            Returns:
                TrainingJob: Job resource
            
            Raises:
                ClientError: If job not found

    Methods:
        refresh() -> TrainingJob
            Refresh job state from API.
            
            Returns:
                TrainingJob: Self with updated state
        
        wait(poll=5, timeout=None) -> None
            Wait for training completion.
            
            Parameters:
                poll: int - Polling interval in seconds (default: 5)
                timeout: Optional[int] - Timeout in seconds
            
            Raises:
                WaiterError: If job fails or timeout
        
        stop() -> None
            Stop the training job immediately.
            
            Raises:
                ClientError: If job already stopped or completed

    Attributes:
        training_job_name: str - Job name
        training_job_arn: str - Job ARN
        training_job_status: str - Status
            - "InProgress", "Completed", "Failed", "Stopping", "Stopped"
        model_artifacts: Dict - Model artifact S3 URI
        final_metric_data_list: List[Dict] - Final metrics
        creation_time: datetime - Creation timestamp
        training_start_time: datetime - Training start time
        training_end_time: datetime - Training end time
        failure_reason: Optional[str] - Failure reason if failed
        secondary_status: str - Detailed status
        billable_time_in_seconds: int - Billable time

    Notes:
        - Prefer ModelTrainer for standard training
        - Use for direct API access
        - All training job parameters available
    """

ProcessingJob

class ProcessingJob:
    """
    Processing job resource.

    Class Methods:
        create(...) -> ProcessingJob
        get(processing_job_name, sagemaker_session=None) -> ProcessingJob

    Methods:
        refresh() -> ProcessingJob
        wait(poll=5, timeout=None) -> None
        stop() -> None

    Attributes:
        processing_job_name: str - Job name
        processing_job_arn: str - Job ARN
        processing_job_status: str - Status
        processing_inputs: List[Dict] - Input configurations
        processing_outputs: List[Dict] - Output configurations
        failure_reason: Optional[str] - Failure reason

    Notes:
        - Prefer Processor for standard processing
        - Direct API access for advanced scenarios
    """

TransformJob

class TransformJob:
    """
    Batch transform job resource.

    Class Methods:
        create(...) -> TransformJob
        get(transform_job_name, sagemaker_session=None) -> TransformJob

    Methods:
        refresh() -> TransformJob
        wait(poll=5, timeout=None) -> None
        stop() -> None

    Attributes:
        transform_job_name: str - Job name
        transform_job_arn: str - Job ARN
        transform_job_status: str - Status
        model_name: str - Model used for transform
        transform_output: Dict - Output configuration

    Notes:
        - Prefer Transformer for standard batch inference
    """

Model

class Model:
    """
    SageMaker Model resource.

    Class Methods:
        create(model_name, primary_container, execution_role_arn, vpc_config=None, 
               tags=None, sagemaker_session=None, ...) -> Model
            Create model resource.
            
            Parameters:
                model_name: str - Model name (required)
                primary_container: Dict - Container definition (required)
                execution_role_arn: str - Execution role (required)
                vpc_config: Optional[Dict] - VPC configuration
                tags: Optional[List[Tag]] - Tags
                sagemaker_session: Optional[Session] - Session
            
            Returns:
                Model: Created model
        
        get(model_name, sagemaker_session=None) -> Model
            Get existing model.
            
            Returns:
                Model: Model resource

    Methods:
        refresh() -> Model
            Refresh model state.
        
        delete() -> None
            Delete the model.
            
            Raises:
                ClientError: If model in use by endpoint

    Attributes:
        model_name: str - Model name
        model_arn: str - Model ARN
        primary_container: Dict - Primary container definition
        execution_role_arn: str - Execution role
        vpc_config: Optional[Dict] - VPC configuration
        creation_time: datetime - Creation timestamp

    Notes:
        - Prefer ModelBuilder for standard deployments
        - Use for multi-container models or advanced configs
    """

Endpoint

class Endpoint:
    """
    SageMaker Endpoint resource.

    Class Methods:
        create(endpoint_name, endpoint_config_name, tags=None, 
               sagemaker_session=None, ...) -> Endpoint
            Create endpoint.
            
            Returns:
                Endpoint: Created endpoint
        
        get(endpoint_name, sagemaker_session=None) -> Endpoint
            Get existing endpoint.
            
            Returns:
                Endpoint: Endpoint resource

    Methods:
        refresh() -> Endpoint
            Refresh endpoint state.
        
        delete() -> None
            Delete endpoint (model and config preserved).
        
        update(endpoint_config_name) -> None
            Update endpoint configuration.
            
            Parameters:
                endpoint_config_name: str - New config name (required)
        
        invoke(body, content_type=None, accept=None, custom_attributes=None, 
               target_model=None, target_variant=None, inference_id=None, 
               enable_explanations=None, inference_component_name=None) -> InvokeEndpointOutput
            Invoke endpoint for inference.
            
            Parameters:
                body: bytes - Request body (required)
                content_type: Optional[str] - Content type
                accept: Optional[str] - Accept type
                custom_attributes: Optional[str] - Custom attributes
                target_model: Optional[str] - Target model (multi-model)
                target_variant: Optional[str] - Target variant (A/B test)
                inference_id: Optional[str] - Inference ID for tracking
                enable_explanations: Optional[str] - Enable explainability
                inference_component_name: Optional[str] - Component name
            
            Returns:
                InvokeEndpointOutput: Response with Body, ContentType
            
            Raises:
                ClientError: Inference errors, throttling
        
        wait_for_in_service(poll=30, timeout=1800) -> None
            Wait until endpoint in service.
            
            Parameters:
                poll: int - Polling interval (default: 30 seconds)
                timeout: int - Timeout (default: 1800 seconds)
        
        wait_for_delete(poll=30, timeout=1800) -> None
            Wait for deletion to complete.

    Attributes:
        endpoint_name: str - Endpoint name
        endpoint_arn: str - Endpoint ARN
        endpoint_config_name: str - Config name
        endpoint_status: str - Status
            - "Creating", "InService", "Updating", "SystemUpdating", "RollingBack", "Failed", "Deleting"
        creation_time: datetime - Creation timestamp
        last_modified_time: datetime - Last modification time
        failure_reason: Optional[str] - Failure reason

    Notes:
        - Prefer ModelBuilder.deploy() for standard deployments
        - Direct invoke() for low-level control
        - Use for multi-variant endpoints, A/B testing
    """

Usage:

from sagemaker.core.resources import Model, EndpointConfig, Endpoint

# Create model directly
model = Model.create(
    model_name="my-model",
    primary_container={
        "Image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/my-image:latest",
        "ModelDataUrl": "s3://my-bucket/model.tar.gz",
        "Environment": {
            "MODEL_NAME": "custom-model",
            "SAGEMAKER_PROGRAM": "inference.py"
        }
    },
    execution_role_arn="arn:aws:iam::123456789012:role/SageMakerRole"
)

# Create endpoint config
endpoint_config = EndpointConfig.create(
    endpoint_config_name="my-endpoint-config",
    production_variants=[{
        "VariantName": "variant-1",
        "ModelName": model.model_name,
        "InitialInstanceCount": 2,
        "InstanceType": "ml.m5.xlarge",
        "InitialVariantWeight": 1.0
    }]
)

# Create endpoint
endpoint = Endpoint.create(
    endpoint_name="my-endpoint",
    endpoint_config_name=endpoint_config.endpoint_config_name,
    tags=[{"Key": "Environment", "Value": "Production"}]
)

# Wait for endpoint to be ready
endpoint.wait_for_in_service()
print(f"Endpoint {endpoint.endpoint_name} is InService")

# Invoke endpoint
import json

request_body = json.dumps({"features": [1.0, 2.0, 3.0]}).encode('utf-8')

response = endpoint.invoke(
    body=request_body,
    content_type="application/json",
    accept="application/json"
)

result = json.loads(response['Body'].read())
print(f"Prediction: {result}")

# Clean up (delete in correct order)
endpoint.delete()
endpoint.wait_for_delete()
endpoint_config.delete()
model.delete()

EndpointConfig

class EndpointConfig:
    """
    Endpoint configuration resource.

    Class Methods:
        create(endpoint_config_name, production_variants, data_capture_config=None, 
               async_inference_config=None, explainer_config=None, tags=None, 
               kms_key_id=None, sagemaker_session=None, ...) -> EndpointConfig
            Create endpoint configuration.
            
            Returns:
                EndpointConfig: Created configuration
        
        get(endpoint_config_name, sagemaker_session=None) -> EndpointConfig
            Get existing configuration.

    Methods:
        refresh() -> EndpointConfig
        delete() -> None

    Attributes:
        endpoint_config_name: str - Config name
        endpoint_config_arn: str - Config ARN
        production_variants: List[Dict] - Variant configurations
        data_capture_config: Optional[Dict] - Data capture settings
        async_inference_config: Optional[Dict] - Async inference settings
        explainer_config: Optional[Dict] - Explainability settings
        creation_time: datetime - Creation timestamp

    Notes:
        - Separates configuration from endpoint lifecycle
        - Multiple endpoints can share same config
        - Update endpoint by creating new config
    """

Model Registry Resources

ModelPackage

class ModelPackage:
    """
    Model package resource for Model Registry.

    Class Methods:
        create(model_package_name=None, model_package_group_name=None, 
               inference_specification=None, validation_specification=None, 
               model_approval_status="PendingManualApproval", metadata_properties=None, 
               model_metrics=None, customer_metadata_properties=None, 
               drift_check_baselines=None, domain=None, task=None, 
               sample_payload_url=None, additional_inference_specifications=None, 
               tags=None, sagemaker_session=None, ...) -> ModelPackage
            Create model package.
            
            Returns:
                ModelPackage: Created package
        
        get(model_package_name, sagemaker_session=None) -> ModelPackage
            Get existing package.

    Methods:
        refresh() -> ModelPackage
        
        update(model_approval_status=None, approval_description=None, 
               customer_metadata_properties=None, inference_specification=None, 
               source_uri=None) -> None
            Update model package.
            
            Parameters:
                model_approval_status: Optional[str] - Approval status
                    - "Approved", "Rejected", "PendingManualApproval"
                approval_description: Optional[str] - Approval description
                customer_metadata_properties: Optional[Dict] - Metadata
                inference_specification: Optional[Dict] - Inference spec
                source_uri: Optional[str] - Source URI
        
        delete() -> None
            Delete model package.

    Attributes:
        model_package_name: str - Package name
        model_package_arn: str - Package ARN
        model_package_group_name: str - Package group
        model_package_version: int - Version number (auto-incremented)
        model_package_status: str - Status
        model_approval_status: str - Approval status
        inference_specification: Dict - Inference specification
        creation_time: datetime - Creation timestamp

    Notes:
        - Use for model versioning and governance
        - Approval workflow for production deployments
        - Versions automatically incremented in group
    """

ModelPackageGroup

class ModelPackageGroup:
    """
    Model package group resource.

    Class Methods:
        create(model_package_group_name, model_package_group_description=None, 
               tags=None, sagemaker_session=None, ...) -> ModelPackageGroup
        get(model_package_group_name, sagemaker_session=None) -> ModelPackageGroup

    Methods:
        refresh() -> ModelPackageGroup
        delete() -> None
            Delete group (all packages must be deleted first).

    Attributes:
        model_package_group_name: str - Group name
        model_package_group_arn: str - Group ARN
        model_package_group_description: str - Description
        creation_time: datetime - Creation timestamp

    Notes:
        - Groups organize related model versions
        - Cannot delete group with packages
        - Use for model lineage tracking
    """

Model Registry Usage:

from sagemaker.core.resources import ModelPackageGroup, ModelPackage

# Create model package group
group = ModelPackageGroup.create(
    model_package_group_name="customer-churn-models",
    model_package_group_description="Customer churn prediction models",
    tags=[{"Key": "Project", "Value": "ChurnPrediction"}]
)

# Register model to group (creates version 1)
model_package = ModelPackage.create(
    model_package_group_name=group.model_package_group_name,
    inference_specification={
        "Containers": [{
            "Image": "my-inference-image",
            "ModelDataUrl": "s3://bucket/model-v1.tar.gz"
        }],
        "SupportedContentTypes": ["application/json"],
        "SupportedResponseMIMETypes": ["application/json"],
        "SupportedRealtimeInferenceInstanceTypes": ["ml.m5.xlarge", "ml.m5.2xlarge"]
    },
    model_approval_status="PendingManualApproval",
    model_metrics={
        "ModelQuality": {
            "Statistics": {
                "ContentType": "application/json",
                "S3Uri": "s3://bucket/metrics/statistics.json"
            }
        }
    },
    customer_metadata_properties={
        "training_date": "2024-01-15",
        "accuracy": "0.94",
        "f1_score": "0.92"
    }
)

print(f"Model package version: {model_package.model_package_version}")

# Approve model
model_package.update(
    model_approval_status="Approved",
    approval_description="Model meets production criteria"
)

# Deploy approved model
model = Model.create(
    model_name="approved-churn-model",
    primary_container=model_package.inference_specification['Containers'][0],
    execution_role_arn=role_arn
)

Monitoring Resources

MonitoringSchedule

class MonitoringSchedule:
    """
    Monitoring schedule resource.

    Class Methods:
        create(monitoring_schedule_name, monitoring_schedule_config, tags=None, 
               sagemaker_session=None, ...) -> MonitoringSchedule
        get(monitoring_schedule_name, sagemaker_session=None) -> MonitoringSchedule

    Methods:
        refresh() -> MonitoringSchedule
        update(monitoring_schedule_config) -> None
        delete() -> None
        start() -> None
            Start monitoring schedule.
        stop() -> None
            Stop monitoring schedule.

    Attributes:
        monitoring_schedule_name: str - Schedule name
        monitoring_schedule_arn: str - Schedule ARN
        monitoring_schedule_status: str - Status
            - "Pending", "Failed", "Scheduled", "Stopped"
        monitoring_schedule_config: Dict - Schedule configuration
        last_monitoring_execution_summary: Dict - Last execution summary
        creation_time: datetime - Creation timestamp

    Notes:
        - Prefer ModelMonitor classes for standard monitoring
        - Direct API access for custom monitoring
    """

Experiment Resources

Experiment

class Experiment:
    """
    Experiment resource.

    Class Methods:
        create(experiment_name, description=None, display_name=None, tags=None, 
               sagemaker_session=None, ...) -> Experiment
        get(experiment_name, sagemaker_session=None) -> Experiment

    Methods:
        refresh() -> Experiment
        delete() -> None

    Attributes:
        experiment_name: str - Experiment name
        experiment_arn: str - Experiment ARN
        display_name: str - Display name
        description: str - Description
        creation_time: datetime - Creation timestamp

    Notes:
        - Prefer high-level Experiment class
        - Resource class for direct API access
    """

Trial

class Trial:
    """
    Trial resource.

    Class Methods:
        create(trial_name, experiment_name, display_name=None, tags=None, 
               sagemaker_session=None, ...) -> Trial
        get(trial_name, sagemaker_session=None) -> Trial

    Methods:
        refresh() -> Trial
        delete() -> None

    Attributes:
        trial_name: str - Trial name
        trial_arn: str - Trial ARN
        experiment_name: str - Parent experiment
        display_name: str - Display name
        creation_time: datetime - Creation timestamp

    Notes:
        - Prefer Run class for V3
        - Trial for V2 compatibility
    """

Pipeline Resources

Pipeline

class Pipeline:
    """
    Pipeline resource.

    Class Methods:
        create(pipeline_name, pipeline_definition, pipeline_description=None, 
               role_arn, tags=None, parallelism_configuration=None, 
               sagemaker_session=None, ...) -> Pipeline
        get(pipeline_name, sagemaker_session=None) -> Pipeline

    Methods:
        refresh() -> Pipeline
        update(pipeline_definition=None, pipeline_description=None, role_arn=None, 
               parallelism_configuration=None) -> None
        delete() -> None
        start(pipeline_parameters=None, execution_display_name=None, 
              execution_description=None, parallelism_configuration=None, 
              selective_execution_config=None) -> PipelineExecution

    Attributes:
        pipeline_name: str - Pipeline name
        pipeline_arn: str - Pipeline ARN
        pipeline_display_name: str - Display name
        pipeline_description: str - Description
        role_arn: str - Execution role
        pipeline_definition: str - JSON definition
        creation_time: datetime - Creation timestamp

    Notes:
        - Prefer Pipeline from mlops.workflow
        - Resource for direct definition manipulation
    """

PipelineExecution

class PipelineExecution:
    """
    Pipeline execution resource.

    Class Methods:
        get(pipeline_execution_arn, sagemaker_session=None) -> PipelineExecution

    Methods:
        refresh() -> PipelineExecution
        stop() -> None
        wait(poll=30, timeout=None) -> None

    Attributes:
        pipeline_execution_arn: str - Execution ARN
        pipeline_execution_display_name: str - Display name
        pipeline_execution_status: str - Status
            - "Executing", "Stopping", "Stopped", "Failed", "Succeeded"
        pipeline_arn: str - Parent pipeline ARN
        pipeline_parameters: List[Dict] - Parameter values
        creation_time: datetime - Creation timestamp
        last_modified_time: datetime - Last modification time
        pipeline_execution_description: str - Description

    Notes:
        - Execution state management
        - Monitor execution progress
    """

Tuning Resources

HyperParameterTuningJob

class HyperParameterTuningJob:
    """
    Hyperparameter tuning job resource.

    Class Methods:
        create(...) -> HyperParameterTuningJob
        get(hyper_parameter_tuning_job_name, sagemaker_session=None) -> HyperParameterTuningJob

    Methods:
        refresh() -> HyperParameterTuningJob
        stop() -> None

    Attributes:
        hyper_parameter_tuning_job_name: str - Job name
        hyper_parameter_tuning_job_arn: str - Job ARN
        hyper_parameter_tuning_job_status: str - Status
        best_training_job: Dict - Best training job details
        training_job_status_counters: Dict - Job status counts
        objective_status_counters: Dict - Objective status counts

    Notes:
        - Prefer HyperparameterTuner
        - Resource for direct API access
    """

Feature Store Resources

FeatureGroup

class FeatureGroup:
    """
    Feature store feature group resource.

    Class Methods:
        create(...) -> FeatureGroup
        get(feature_group_name, sagemaker_session=None) -> FeatureGroup

    Methods:
        refresh() -> FeatureGroup
        delete() -> None

    Attributes:
        feature_group_name: str - Feature group name
        feature_group_arn: str - Feature group ARN
        feature_group_status: str - Status
        record_identifier_feature_name: str - Record ID feature
        event_time_feature_name: str - Event time feature
        online_store_config: Optional[Dict] - Online store config
        offline_store_config: Optional[Dict] - Offline store config

    Notes:
        - Online store: low-latency retrieval
        - Offline store: S3-based historical features
    """

Infrastructure Resources

NotebookInstance

class NotebookInstance:
    """
    SageMaker notebook instance resource.

    Class Methods:
        create(...) -> NotebookInstance
        get(notebook_instance_name, sagemaker_session=None) -> NotebookInstance

    Methods:
        refresh() -> NotebookInstance
        start() -> None
        stop() -> None
        delete() -> None

    Attributes:
        notebook_instance_name: str - Instance name
        notebook_instance_arn: str - Instance ARN
        notebook_instance_status: str - Status
            - "Pending", "InService", "Stopping", "Stopped", "Failed", "Deleting", "Updating"
        instance_type: str - Instance type
        url: str - Notebook URL
        creation_time: datetime - Creation timestamp

    Notes:
        - Classic notebook instances (not Studio)
        - Manual lifecycle management
        - Billed when InService
    """

Domain

class Domain:
    """
    SageMaker Studio domain resource.

    Class Methods:
        create(...) -> Domain
        get(domain_id, sagemaker_session=None) -> Domain

    Methods:
        refresh() -> Domain
        delete() -> None

    Attributes:
        domain_id: str - Domain ID
        domain_arn: str - Domain ARN
        domain_name: str - Domain name
        status: str - Domain status
        home_efs_file_system_id: str - EFS file system ID
        auth_mode: str - Authentication mode

    Notes:
        - SageMaker Studio infrastructure
        - Contains user profiles and apps
    """

Usage Patterns

Creating Resources Programmatically

from sagemaker.core.resources import Model, EndpointConfig, Endpoint
import boto3

# Create model with multiple containers (pipeline)
model = Model.create(
    model_name="inference-pipeline",
    containers=[
        {
            "Image": "preprocessing-image",
            "ModelDataUrl": "s3://bucket/preprocessor.tar.gz",
            "Environment": {"STAGE": "preprocess"}
        },
        {
            "Image": "inference-image",
            "ModelDataUrl": "s3://bucket/model.tar.gz",
            "Environment": {"STAGE": "inference"}
        }
    ],
    execution_role_arn=role_arn
)

# Multi-variant endpoint config (A/B testing)
config = EndpointConfig.create(
    endpoint_config_name="ab-test-config",
    production_variants=[
        {
            "VariantName": "model-a",
            "ModelName": "model-a-name",
            "InitialInstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "InitialVariantWeight": 0.5  # 50% traffic
        },
        {
            "VariantName": "model-b",
            "ModelName": "model-b-name",
            "InitialInstanceCount": 1,
            "InstanceType": "ml.m5.xlarge",
            "InitialVariantWeight": 0.5  # 50% traffic
        }
    ]
)

# Create endpoint
endpoint = Endpoint.create(
    endpoint_name="ab-test-endpoint",
    endpoint_config_name=config.endpoint_config_name
)

endpoint.wait_for_in_service()

Getting and Updating Existing Resources

# Get resources
training_job = TrainingJob.get("my-training-job-2024-01-15")
model = Model.get("my-model")
endpoint = Endpoint.get("production-endpoint")

# Check status
endpoint.refresh()
print(f"Endpoint status: {endpoint.endpoint_status}")

if endpoint.endpoint_status == "InService":
    # Update endpoint with new config
    new_config = EndpointConfig.create(
        endpoint_config_name="new-config",
        production_variants=[...]
    )
    
    endpoint.update(endpoint_config_name=new_config.endpoint_config_name)
    endpoint.wait_for_in_service()
    
    print("Endpoint updated successfully")

Resource Cleanup

# Delete resources in correct order
# 1. Delete endpoint (releases instances)
try:
    endpoint.delete()
    endpoint.wait_for_delete()
    print("Endpoint deleted")
except ClientError as e:
    print(f"Endpoint deletion error: {e}")

# 2. Delete endpoint config
try:
    endpoint_config.delete()
    print("Endpoint config deleted")
except ClientError as e:
    print(f"Config deletion error: {e}")

# 3. Delete model
try:
    model.delete()
    print("Model deleted")
except ClientError as e:
    if e.response['Error']['Code'] == 'ResourceInUse':
        print("Model still in use by another endpoint")
    else:
        raise

Advanced Usage

These resource classes provide the foundation for the high-level APIs (ModelBuilder, ModelTrainer, Pipeline, etc.) but can be used directly for advanced scenarios requiring fine-grained control over SageMaker resources.

For most use cases, prefer the high-level APIs documented in other sections. Use resource classes when you need:

  • Direct API access
  • Features not yet abstracted by high-level APIs
  • Custom resource configurations
  • Integration with infrastructure-as-code tools
  • Bulk resource management

Bulk Resource Management

from sagemaker.core.resources import Endpoint, Model

# List all endpoints
import boto3
sagemaker = boto3.client('sagemaker')

response = sagemaker.list_endpoints(MaxResults=100)

# Check status of all endpoints
for ep_summary in response['Endpoints']:
    endpoint = Endpoint.get(ep_summary['EndpointName'])
    
    print(f"{endpoint.endpoint_name}:")
    print(f"  Status: {endpoint.endpoint_status}")
    print(f"  Created: {endpoint.creation_time}")
    print(f"  Config: {endpoint.endpoint_config_name}")
    
    # Take action based on status
    if endpoint.endpoint_status == "Failed":
        print(f"  Failure reason: {endpoint.failure_reason}")
        # Optionally delete failed endpoints
        # endpoint.delete()

Validation and Constraints

Resource Naming Constraints

  • Model names: 1-63 characters, alphanumeric and hyphens
  • Endpoint names: 1-63 characters, alphanumeric and hyphens
  • Endpoint config names: 1-63 characters, alphanumeric and hyphens
  • Names must be unique within account and region

Resource Limits

  • Maximum models per account: 10,000
  • Maximum endpoints per account: 200 (can request increase)
  • Maximum endpoint configs per account: 1,000
  • Maximum variants per endpoint: 10

Common Error Scenarios

  1. Resource Already Exists:

    • Cause: Creating resource with existing name
    • Solution: Use unique names or get existing resource
  2. Resource In Use:

    • Cause: Deleting model used by endpoint
    • Solution: Delete endpoint first
  3. Invalid State Transition:

    • Cause: Updating endpoint while updating
    • Solution: Wait for current operation to complete
  4. Quota Exceeded:

    • Cause: Reached account limit for resource type
    • Solution: Delete unused resources or request quota increase
  5. Validation Error:

    • Cause: Invalid resource configuration
    • Solution: Check API documentation for valid parameters
  6. Not Found:

    • Cause: Resource doesn't exist or deleted
    • Solution: Verify resource name and region