를 사용하여 EC2 태스크로 클러스터를 생성합니다. AWS CLI - Amazon Elastic Container Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

를 사용하여 EC2 태스크로 클러스터를 생성합니다. AWS CLI

다음 단계는 AWS CLI를 사용하여 Amazon ECS에서 클러스터를 설정하고, 태스크 정의를 등록하고, 태스크를 실행하고, 기타 일반적인 시나리오를 수행하는 데 도움이 됩니다. 최신 버전의 AWS CLI를 사용하고 있는지 확인합니다. 최신 버전으로 업그레이드하는 방법에 대한 자세한 정보는 AWS Command Line Interface 설치를 참조하세요.

필수 조건

이 자습서에서는 다음 사전 조건이 충족되었다고 가정합니다.

  • 의 최신 AWS CLI 버전이 설치 및 구성되어 있습니다. 설치 또는 업그레이드에 대한 자세한 AWS CLI 내용은 설치를 참조하십시오 AWS Command Line Interface.

  • Amazon ECS 사용 설정의 단계가 완료되었습니다.

  • AWS 사용자는 AmazonECS_ FullAccess IAM 정책 예제에 지정된 필수 권한을 가지고 있습니다.

  • 사용할 VPC 및 보안 그룹이 생성되었습니다. 자세한 설명은 Virtual Private Cloud 생성 섹션을 참조하세요.

  • (선택 사항) AWS CloudShell 은 고객이 직접 EC2 인스턴스를 생성할 필요 없이 명령줄을 제공하는 도구입니다. 자세한 내용은 무엇입니까를 참조하십시오. AWS CloudShell AWS CloudShell 사용 설명서에서.

1단계: 클러스터 생성

기본적으로 첫 번째 컨테이너 인스턴스를 시작할 때 계정에 default 클러스터가 생성됩니다.

참고

제공된 default 클러스터를 사용하는 이점은 후속 명령에서 --cluster cluster_name 옵션을 지정할 필요가 없다는 것입니다. 기본 클러스터가 아닌 자체 클러스터를 생성하는 경우, 해당 클러스터에 사용할 각 명령에 --cluster cluster_name을 지정해야 합니다.

다음 명령을 사용하여 고유한 이름의 자체 클러스터를 생성합니다.

aws ecs create-cluster --cluster-name MyCluster

출력:

{ "cluster": { "clusterName": "MyCluster", "status": "ACTIVE", "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/MyCluster" } }

2단계: Amazon ECS AMI를 사용하여 인스턴스 시작

Amazon ECS 컨테이너 인스턴스에서 태스크를 실행하려면 먼저 클러스터에 해당 컨테이너 인스턴스가 있어야 합니다. 클러스터에 컨테이너 인스턴스가 없는 경우 자세한 정보는 Amazon ECS Linux 컨테이너 인스턴스 시작 섹션을 참조하세요.

단계 3: 컨테이너 인스턴스 나열

컨테이너 인스턴스를 시작한지 몇 분 이내에 Amazon ECS 에이전트가 기본 클러스터에 인스턴스를 등록합니다. 다음 명령을 실행하여 클러스터의 컨테이너 인스턴스를 나열할 수 있습니다.

aws ecs list-container-instances --cluster default

출력:

{ "containerInstanceArns": [ "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID" ] }

4단계: 컨테이너 인스턴스 설명

컨테이너 인스턴스의 ARN 또는 ID를 지정한 후 describe-container-instances 명령을 사용하여 잔여 및 등록된 CPU 및 메모리 리소스와 같은 인스턴스에 대한 가치 있는 정보를 가져올 수 있습니다.

aws ecs describe-container-instances --cluster default --container-instances container_instance_ID

출력:

{ "failures": [], "containerInstances": [ { "status": "ACTIVE", "registeredResources": [ { "integerValue": 1024, "longValue": 0, "type": "INTEGER", "name": "CPU", "doubleValue": 0.0 }, { "integerValue": 995, "longValue": 0, "type": "INTEGER", "name": "MEMORY", "doubleValue": 0.0 }, { "name": "PORTS", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [ "22", "2376", "2375", "51678" ], "type": "STRINGSET", "integerValue": 0 }, { "name": "PORTS_UDP", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [], "type": "STRINGSET", "integerValue": 0 } ], "ec2InstanceId": "instance_id", "agentConnected": true, "containerInstanceArn": "arn:aws:ecs:us-west-2:aws_account_id:container-instance/container_instance_ID", "pendingTasksCount": 0, "remainingResources": [ { "integerValue": 1024, "longValue": 0, "type": "INTEGER", "name": "CPU", "doubleValue": 0.0 }, { "integerValue": 995, "longValue": 0, "type": "INTEGER", "name": "MEMORY", "doubleValue": 0.0 }, { "name": "PORTS", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [ "22", "2376", "2375", "51678" ], "type": "STRINGSET", "integerValue": 0 }, { "name": "PORTS_UDP", "longValue": 0, "doubleValue": 0.0, "stringSetValue": [], "type": "STRINGSET", "integerValue": 0 } ], "runningTasksCount": 0, "attributes": [ { "name": "com.amazonaws.ecs.capability.privileged-container" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.17" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.18" }, { "name": "com.amazonaws.ecs.capability.docker-remote-api.1.19" }, { "name": "com.amazonaws.ecs.capability.logging-driver.json-file" }, { "name": "com.amazonaws.ecs.capability.logging-driver.syslog" } ], "versionInfo": { "agentVersion": "1.5.0", "agentHash": "b197edd", "dockerVersion": "DockerVersion: 1.7.1" } } ] }

Amazon EC2 콘솔이나 aws ec2 describe-instances --instance-id instance_id 명령을 사용하여 인스턴스를 모니터링하는 데 사용할 수 있는 Amazon EC2 인스턴스 ID를 찾을 수도 있습니다.

5단계: 작업 정의 등록

ECS 클러스터에서 작업을 실행하려면 먼저 작업 정의를 등록해야 합니다. 태스크 정의는 그룹화된 컨테이너의 목록입니다. 다음 예제는 Docker Hub의 busybox 이미지를 사용하고 단지 360초 동안 대기하는 간단한 작업 정의입니다. 사용 가능한 태스크 정의 파라미터에 대한 자세한 정보는 Amazon ECS 작업 정의 섹션을 참조하세요.

{ "containerDefinitions": [ { "name": "sleep", "image": "busybox", "cpu": 10, "command": [ "sleep", "360" ], "memory": 10, "essential": true } ], "family": "sleep360" }

위의 예제 JSON은 두 가지 방법으로 에 전달될 수 있습니다. 작업 정의 JSON을 파일로 저장하고 옵션과 함께 전달할 수 있습니다. AWS CLI --cli-input-json file://path_to_file.json 또는 아래 예제와 같이 JSON에서 따옴표를 제거하고 명령줄에서 JSON 컨테이너 정의를 전달할 수 있습니다. 명령줄에서 컨테이너 정의를 전달하려는 경우 명령에 여러 버전의 작업 정의를 서로 연결하는 데 사용되는 --family 파라미터가 추가로 필요합니다.

컨테이너 정의에 JSON 파일을 사용하려면

aws ecs register-task-definition --cli-input-json file://$HOME/tasks/sleep360.json

컨테이너 정의에 JSON 문자열을 사용하려면

aws ecs register-task-definition --family sleep360 --container-definitions "[{\"name\":\"sleep\",\"image\":\"busybox\",\"cpu\":10,\"command\":[\"sleep\",\"360\"],\"memory\":10,\"essential\":true}]"

register-task-definition은 등록 후 작업 정의의 설명을 반환합니다.

{ "taskDefinition": { "volumes": [], "taskDefinitionArn": "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep360:1", "containerDefinitions": [ { "environment": [], "name": "sleep", "mountPoints": [], "image": "busybox", "cpu": 10, "portMappings": [], "command": [ "sleep", "360" ], "memory": 10, "essential": true, "volumesFrom": [] } ], "family": "sleep360", "revision": 1 } }

6단계: 작업 정의 나열

언제라도 list-task-definitions 명령을 사용하여 계정의 작업 정의를 나열할 수 있습니다. 이 명령은 run-task 또는 start-task를 호출할 때 함께 사용할 수 있는 familyrevision 값을 출력합니다.

aws ecs list-task-definitions

출력:

{ "taskDefinitionArns": [ "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep300:1", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep300:2", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/sleep360:1", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:3", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:4", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:5", "arn:aws:ec2:us-east-1:aws_account_id:task-definition/wordpress:6" ] }

7단계: 작업 실행

계정에 대한 작업을 등록하고 클러스터에 등록된 컨테이너 인스턴스를 시작한 후 클러스터에서 등록된 작업을 실행할 수 있습니다. 이 예제에서는 기본 클러스터에 sleep360:1 작업 정의의 단일 인스턴스를 배치합니다.

aws ecs run-task --cluster default --task-definition sleep360:1 --count 1

출력:

{ "tasks": [ { "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "overrides": { "containerOverrides": [ { "name": "sleep" } ] }, "lastStatus": "PENDING", "containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID", "clusterArn": "arn:aws:ecs:us-east-1:aws_account_id:cluster/default", "desiredStatus": "RUNNING", "taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:1", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:aws_account_id:container/container_ID", "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "lastStatus": "PENDING", "name": "sleep" } ] } ] }

8단계: 작업 나열

클러스터의 작업을 나열합니다. 이전 섹션에서 실행한 작업이 보일 것입니다. 이 명령에서 반환된 작업 ID 또는 전체 ARN을 나중에 작업을 설명하는 데 사용할 수 있습니다.

aws ecs list-tasks --cluster default

출력:

{ "taskArns": [ "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID" ] }

9단계: 실행 작업 설명

앞서 검색한 작업 ID로 작업을 설명하여 작업에 대한 더 많은 정보를 가져옵니다.

aws ecs describe-tasks --cluster default --task task_ID

출력:

{ "failures": [], "tasks": [ { "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "overrides": { "containerOverrides": [ { "name": "sleep" } ] }, "lastStatus": "RUNNING", "containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id:container-instance/container_instance_ID", "clusterArn": "arn:aws:ecs:us-east-1:aws_account_id:cluster/default", "desiredStatus": "RUNNING", "taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id:task-definition/sleep360:1", "containers": [ { "containerArn": "arn:aws:ecs:us-east-1:aws_account_id:container/container_ID", "taskArn": "arn:aws:ecs:us-east-1:aws_account_id:task/task_ID", "lastStatus": "RUNNING", "name": "sleep", "networkBindings": [] } ] } ] }