AWS CLI를 사용하여 EC2 시작 유형에 대한 Amazon ECS 작업 생성
다음 단계는 AWS CLI를 사용하여 Amazon ECS에서 클러스터를 설정하고, 태스크 정의를 등록하고, 태스크를 실행하고, 기타 일반적인 시나리오를 수행하는 데 도움이 됩니다. AWS CLI의 최신 버전을 사용합니다. 최신 버전으로 업그레이드하는 방법에 대한 자세한 내용은 AWS CLI 최신 버전의 설치 또는 업데이트를 참조하세요.
주제
사전 조건
이 자습서에서는 다음 사전 조건이 충족되었다고 가정합니다.
-
최신 버전의 AWS CLI가 설치 및 구성됩니다. AWS CLI 설치 및 업그레이드에 대한 자세한 내용은 AWS CLI 최신 버전의 설치 또는 업데이트를 참고하세요.
-
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-instancescontainer_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은 두 가지 방법으로 AWS CLI에 전달할 수 있습니다. 작업 정의 JSON을 파일로 저장하고
옵션을 사용하여 전달할 수 있습니다. 또는 아래 예제와 같이 JSON에서 따옴표를 제거하고 명령줄에서 JSON 컨테이너 정의를 전달할 수 있습니다. 명령줄에서 컨테이너 정의를 전달하려는 경우 명령에 여러 버전의 작업 정의를 서로 연결하는 데 사용되는 --cli-input-json
file://path_to_file.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를 호출할 때 함께 사용할 수 있는 family
및 revision
값을 출력합니다.
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-definitionsleep360:1
--count1
출력:
{
"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
--tasktask_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": []
}
]
}
]
}