본문 바로가기

Cloud/AWS

AWS ECS Anywhere - Part 2 (Task 정의 및 실행 예제)

Today Keys : ECS, Anywhere, task, definition, run, 작업정의, 작업실행 hybrid, cluster, aws, 하이브리드


이번 포스팅은 AWS ECS Anywhere 테스트를 위해서 간단한 Task를 정의하고, 이 작업을 외부 인스턴스에서 실행해보는 예제입니다.  이 예제에서는 nginx를 올려서 웹서비스를 제공하는 인바운드 서비스로 테스트를 하였지만, 현재 ECS 외부 인스턴스는 아웃바운드 트래픽 혹은 데이터를 처리하는 애플리케이션을 실행하는 데 최적화 되어 있습니다. 이 예제에서는 가장 간단하게 ECS Anywhere를 통해서 AWS가 아닌 사용자가 원하는 위치와 장비로 ECS를 사용해 보게 됩니다.


ECS Anywhere에 올릴 Task를 먼저 정의합니다.

Task Definitions에서 'Create new Task Definition'을 클릭합니다.

 

 

Task 정의 1단계로 ECS Anywhere에 올릴 Task의 Launch type을 선택합니다.

기존의 FARGATE, EC2 이외에 외부 인스턴스와 호환이 되는 Launch Type인 'EXTERNAL'을 선택합니다. 

 

 

Step 2에서는 실제 Task에 대한 상세 값을 입력하게 되는 데,

JSON으로 등록하기 위해서 하단에 있는 'Configure via JSON'을 클릭해서 JSON으로 Task 정의를 입력합니다.

 

ECS Task 정의 시에, 'requiresCompatibilities' 파라미터를 사용해서 해당 Task 정의가 외부 인스턴스에서 동작할 ECS 워크로드라는 것을 'EXTERNAL' 으로 설정합니다.

기타 Task 정의의 나머지 부분은 기존 ECS Task 정의와 동일하게 하면 됩니다. 

단, 외부 인스턴스를 사용하는 ECS Anywhere의 Task 정의에서는 네트워크 모드(networkMode)로 awsvpc 모드를 사용할 수 없으며, 'Bridge', 'Host', 'None' 중의 하나를 선택합니다.

다음은 실제 테스트에 적용한 Task 정의의 JSON 내용입니다.

{
	"requiresCompatibilities": [
		"EXTERNAL"
	],
	"containerDefinitions": [{
		"name": "ZIGI-ECS-Anywhere-nginx1",
		"image": "public.ecr.aws/nginx/nginx:latest",
		"memory": 256,
		"cpu": 256,
		"essential": true,
		"portMappings": [{
			"containerPort": 80,
			"hostPort": 8080,
			"protocol": "tcp"
		}]
	}],
	"networkMode": "bridge",
	"family": "ZIGI-ECS-Anywhere-nginx1"
}

 

JSON을 입력하고 나면, Task 정의가 JSON으로 입력한 값으로 설정된 것을 확인 할 수 있습니다.

설정된 값을 확인하고, 하단의 'Create' 버튼을 클릭하여 Task 정의를 완료합니다.

Task 정의 메뉴에서 방금 전에 생성한 Task 정의(ZIGI-ECS-Anywhere-nginx1)을 선택하면,

다음과 같이 Task 정의에 설정된 값을 다시 확인 할 수 있습니다.

 

이제 정의한 Task를 외부 인스턴스에서 실행해 보겠습니다. 

작업 실행을 위해서 Task 정의의 상단의 'Actions' - 'Run Task' 메뉴를 클릭합니다.

 

 

작업 실행에 Launch type을 'External'로 선택합니다. 

그리고 외부 인스턴스를 등록한 ECS 클러스터(zigi-ecs-anywhere-cluster)를 선택합니다. 

Task Group 명을 입력하고, 나머지 값을 기본 값으로 두고, 'Run Task' 버튼을 클릭해서 작업을 실행합니다.

 

작업 실행을 시작하고, ECS 클러스터 하단의 Tasks를 확인해 보면

Task 1개가 정상적으로 RUNNING 상태로 수행 중인 것을 확인 할 수 있습니다.

 

정상적으로 Task가 동작 중인지 확인하기 위해서 외부 인스턴스에서 'docker ps' 명령으로 컨테이너가 동작 중인지 확인해보면, 정상적으로 컨테이너가 동작 중인 것을 확인 할 수 있습니다.

 

현재 ECS Anywhere의 외부 인스턴스의 공인 IP를 확인해보면, 52.X.X.194 인 것을 확인 할 수 있고

이 IP를 통해서 방금 전에 ECS Anywhere의 외부 인스턴스에 올린 컨테이너를 접속해 보겠습니다.

 

ECS Anywhere의 외부 인스턴스의 공인 IP로 웹 접속을 해보면, Task 정의로 만들었던 nginx 페이지가 정상적으로 열리는 것을 확인 할 수 있습니다.