Doc AWSSDK 예제 GitHub 리포지토리에서 더 많은 SDK 예제를 사용할 수 있습니다. AWS
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWSSDK 또는 CLI와 RunTask 함께 사용
다음 코드 예제는 RunTask의 사용 방법을 보여 줍니다.
작업 예제는 대규모 프로그램에서 발췌한 코드이며 컨텍스트에 맞춰 실행해야 합니다. 다음 코드 예제에서는 컨텍스트 내에서 이 작업을 확인할 수 있습니다.
- CLI
-
- AWS CLI
-
예시 1: 기본 클러스터에서 작업 실행
다음
run-task예시에서는 기본 클러스터에서 작업을 실행하고 클라이언트 토큰을 사용합니다.aws ecs run-task \ --clusterdefault\ --task-definitionsleep360:1\ --client-token550e8400-e29b-41d4-a716-446655440000출력:
{ "tasks": [ { "attachments": [], "attributes": [ { "name": "ecs.cpu-architecture", "value": "x86_64" } ], "availabilityZone": "us-east-1b", "capacityProviderName": "example-capacity-provider", "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/default", "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/default/bc4d2ec611d04bb7bb97e83ceEXAMPLE", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/default/d6f51cc5bbc94a47969c92035e9f66f8/75853d2d-711e-458a-8362-0f0aEXAMPLE", "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/default/d6f51cc5bbc94a47969c9203EXAMPLE", "name": "sleep", "image": "busybox", "lastStatus": "PENDING", "networkInterfaces": [], "cpu": "10", "memory": "10" } ], "cpu": "10", "createdAt": "2023-11-21T16:59:34.403000-05:00", "desiredStatus": "RUNNING", "enableExecuteCommand": false, "group": "family:sleep360", "lastStatus": "PENDING", "launchType": "EC2", "memory": "10", "overrides": { "containerOverrides": [ { "name": "sleep" } ], "inferenceAcceleratorOverrides": [] }, "tags": [], "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/default/d6f51cc5bbc94a47969c9203EXAMPLE", "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/sleep360:1", "version": 1 } ], "failures": [] }자세한 내용은 Amazon ECS 개발자 안내서의 애플리케이션을 독립 실행형 작업으로 실행을 참조하세요.
예시 2: 독립 실행형 작업에 대한 Amazon EBS 볼륨 구성
다음
run-task예시에서는 기본 클러스터의 Fargate 작업에 대해 암호화된 Amazon EBS 볼륨을 구성합니다.AmazonECSInfrastructureRolePolicyForVolumes관리형 정책과 연결된 Amazon ECS 인프라 역할이 구성되어 있어야 합니다.run-task요청에서와 동일한 볼륨 이름으로 작업 정의를 지정해야 합니다. 이 예시에서는--cli-input-json옵션과ebs.json이라는 JSON 입력 파일을 사용합니다.aws ecs run-task \ --cli-input-jsonfile://ebs.jsonebs.json의 콘텐츠:{ "cluster": "default", "taskDefinition": "mytaskdef", "launchType": "FARGATE", "networkConfiguration":{ "awsvpcConfiguration":{ "assignPublicIp": "ENABLED", "securityGroups": ["sg-12344321"], "subnets":["subnet-12344321"] } }, "volumeConfigurations": [ { "name": "myEBSVolume", "managedEBSVolume": { "volumeType": "gp3", "sizeInGiB": 100, "roleArn":"arn:aws:iam::1111222333:role/ecsInfrastructureRole", "encrypted": true, "kmsKeyId": "arn:aws:kms:region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } } ] }출력:
{ "tasks": [ { "attachments": [ { "id": "ce868693-15ca-4083-91ac-f782f64000c9", "type": "ElasticNetworkInterface", "status": "PRECREATED", "details": [ { "name": "subnetId", "value": "subnet-070982705451dad82" } ] }, { "id": "a17ed863-786c-4372-b5b3-b23e53f37877", "type": "AmazonElasticBlockStorage", "status": "CREATED", "details": [ { "name": "roleArn", "value": "arn:aws:iam::123456789012:role/ecsInfrastructureRole" }, { "name": "volumeName", "value": "myEBSVolume" }, { "name": "deleteOnTermination", "value": "true" } ] } ], "attributes": [ { "name": "ecs.cpu-architecture", "value": "x86_64" } ], "availabilityZone": "us-west-2b", "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/default", "containers": [ { "containerArn": "arn:aws:ecs:us-west-2:123456789012:container/default/7f1fbd3629434cc4b82d72d2f09b67c9/e21962a2-f328-4699-98a3-5161ac2c186a", "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/7f1fbd3629434cc4b82d72d2f09b67c9", "name": "container-using-ebs", "image": "amazonlinux:2", "lastStatus": "PENDING", "networkInterfaces": [], "cpu": "0" } ], "cpu": "1024", "createdAt": "2025-01-23T10:29:46.650000-06:00", "desiredStatus": "RUNNING", "enableExecuteCommand": false, "group": "family:mytaskdef", "lastStatus": "PROVISIONING", "launchType": "FARGATE", "memory": "3072", "overrides": { "containerOverrides": [ { "name": "container-using-ebs" } ], "inferenceAcceleratorOverrides": [] }, "platformVersion": "1.4.0", "platformFamily": "Linux", "tags": [], "taskArn": "arn:aws:ecs:us-west-2:123456789012:task/default/7f1fbd3629434cc4b82d72d2f09b67c9", "taskDefinitionArn": "arn:aws:ecs:us-west-2:123456789012:task-definition/mytaskdef:4", "version": 1, "ephemeralStorage": { "sizeInGiB": 20 }, "fargateEphemeralStorage": { "sizeInGiB": 20 } } ], "failures": [] }자세한 내용은 Amazon ECS 개발자 안내서의 Amazon ECS에서 Amazon EBS 볼륨 사용을 참조하세요.
-
API 세부 정보는 AWS CLI 명령 참조의 RunTask
섹션을 참조하세요.
-
- Python
-
- SDK for Python(Boto3)
-
참고
GitHub에 더 많은 내용이 있습니다. AWS 코드 예제 리포지토리
에서 전체 예를 찾고 설정 및 실행하는 방법을 배워보세요. class EcsWrapper: """Encapsulates Amazon ECS operations.""" def __init__(self, ecs_client: BaseClient): """ Initializes the EcsWrapper with an ECS client. :param ecs_client: A Boto3 Amazon ECS client. Boto3 clients are created by the ``boto3.client`` factory function and are instances of ``botocore.client.BaseClient``, which is the correct type to annotate here (``boto3.client`` itself is a function, not a type). """ self.ecs_client = ecs_client @classmethod def from_client(cls) -> "EcsWrapper": """Creates an EcsWrapper using a default Boto3 ECS client.""" ecs_client = boto3.client("ecs") return cls(ecs_client) def run_task( self, cluster: str, task_definition: str, subnets: List[str], security_groups: List[str], count: int = 1, ) -> List[Dict[str, Any]]: """ Runs a standalone Fargate task. :param cluster: The cluster name or ARN. :param task_definition: The task definition family or family:revision. :param subnets: List of subnet IDs. :param security_groups: List of security group IDs. :param count: Number of tasks to run. :return: A list of task details. :raises ClientError: If the request fails (e.g., ClusterNotFoundException). """ try: response = self.ecs_client.run_task( cluster=cluster, taskDefinition=task_definition, launchType="FARGATE", count=count, networkConfiguration={ "awsvpcConfiguration": { "subnets": subnets, "securityGroups": security_groups, "assignPublicIp": "ENABLED", } }, ) tasks = response.get("tasks", list()) failures = response.get("failures", list()) if failures: logger.warning("Task run failures: %s", failures) for task in tasks: logger.info( "Started task '%s' with status '%s'", task["taskArn"], task["lastStatus"], ) return tasks except ClientError as err: if err.response["Error"]["Code"] == "ClusterNotFoundException": logger.error( "Cluster '%s' not found: %s", cluster, err.response["Error"]["Message"], ) raise-
API 세부 정보는 AWSSDK for Python (Boto3) API 참조의 RunTask를 참조하세요.
-