brunch

(1시간 공부) ECS 퀵하게 구축해보기

by Master Seo


EC2 기반의 ECS를 퀵하게 구축해보자.

ECS 애플리케이션을 업데이트해보자.


<1> ECS 개요

<2> ECS 구축 순서

<3> role 참고

<4> 애플리케이션 내용 업데이트

<5> 서비스 Task 수 늘리기 - 사용자가 늘떄

<6> ECS 삭제 순서



<1> ECS 개요


2 종류로 서비스할 수 있다.

ECS - EC2 ( EC2는 사용자가 관리한다.)

ECS- Fargate ( Fargate는 AWS에서 관리한다)




<2> ECS 구축 순서


ECS 클러스터를 구축한다.

작업 정의를 한다. Task Definition = contailer 정의 = 샘플 이미지 정의 = JASON 파일

서비스를 만든다.- LB도 만들어 추가한다.

접속 확인한다.

애플리케이션 업데이트하여 반영해 본다.



1

ECS 클러스터를 구축한다.

EC2 기반의 ECS를 구축한다.

ECS > Clusers > Create Cluster

cluster name

Cluser instance IAM role이 필요하다. > ecsinstanceRole을 사용한다.

2분 걸림

참고 사이트

https://brunch.co.kr/@topasvga/1595


2

작업 정의를 한다.

EC2 기반으로 한다.

contailer1

Task Definition = 샘플 이미지 정의 = JASON 파일

https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/getting-started-ecs-ec2.html


Configure task and container definitions > Task Role이 필요하다. > ecsTaskExecution Role

인증된 AWS 서비스에 API 요청을 할 때 작업이 사용할 수 있는 IAM 역할 옵션입니다

//admin 계정으로 사용하면 role 새로 생성으로 사용하면 된다.

// 개발자 계정이면 관리자를 통해 role을 생성 받아 사용해야 한다.


Task execution IAM role = 작업 실행 IAM 역할

작업에서 컨테이너 이미지를 가져오고 사용자를 대신하여 Amazon CloudWatch에 컨테이너 로그를 게시하려면 이 역할이 필요합니다.

ecsTaskExecutionRole이 아직 없는 경우 AWS가 생성할 수 있습니다.




3

서비스를 만든다.- LB도 만들어 추가한다.

클러스터 > 서비스 > 생성 > seo-web01

LB 사용 시 ecsServiceRole 이 필요함

AWS ServiceRoleForECS role 이 필요함.

미리 LB를 만들어 놓아도 된다. EC2 로드 밸런서

LB생성 시 대상그룹에 EC2를 추가해야 한다. 정상 상태까지 확인 필요 (20분 걸림)


참고 사이트

https://brunch.co.kr/@topasvga/1595


4

접속 확인한다.

LB DNS로 접속 확인한다.

Amazon ECS Sample App

Congratulations!

Your application is now running on a container in Amazon ECS.




<3> role 참고

admin권한으로 작업하면 상관 없다.

하지만 운영자와 개발자 계정이 분리되어 있는 계정이면 role 생성과 사용이 필요하다.



1

Cluser instance IAM role이 필요하다. > ecsinstanceRole을 사용한다.

AWS Service: ec2

클러스터 생성하는데 필요한 권한

EC2 , ECS , ECR , Logs 필요



{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Action": [

"ec2:DescribeTags",

"ecs:CreateCluster",

"ecs:DeregisterContainerInstance",

"ecs:DiscoverPollEndpoint",

"ecs:Poll",

"ecs:RegisterContainerInstance",

"ecs:StartTelemetrySession",

"ecs:UpdateContainerInstancesState",

"ecs:Submit*",

"ecr:GetAuthorizationToken",

"ecr:BatchCheckLayerAvailability",

"ecr:GetDownloadUrlForLayer",

"ecr:BatchGetImage",

"logs:CreateLogStream",

"logs:PutLogEvents"

],

"Resource": "*"

}

]

}



2

Configure task and container definitions > Task Role이 필요하다. > ecsTaskExecution Role

AWS Service: ecs-tasks

Task 작업하는데 필요한 권한

우선은 ECR과 logs만 있으면 된다.

task role은 다이나모 DB , SSM 등 추가 서비스를 사용하는 경우 권한을 추가 해야 한다.



{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Action": [

"ecr:GetAuthorizationToken",

"ecr:BatchCheckLayerAvailability",

"ecr:GetDownloadUrlForLayer",

"ecr:BatchGetImage",

"logs:CreateLogStream",

"logs:PutLogEvents"

],

"Resource": "*"

}

]

}



3

LB 사용 시 AWS ServiceRoleForECS role 이 필요함.

AWS Service: ecs (Service-Linked Role

서비스를 올린다는 건 ELB로 외부에서 서버로 접속해 사용하도록 한다는 것으로 권한 필요

EC2 , ELB , route53 , 서비스 디스커버리 , loggs 권한이 필요함. auto scaling , cloudwatch, ssm 필요



{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "ECSTaskManagement",

"Effect": "Allow",

"Action": [

"ec2:AttachNetworkInterface",

"ec2:CreateNetworkInterface",

"ec2:CreateNetworkInterfacePermission",

"ec2:DeleteNetworkInterface",

"ec2:DeleteNetworkInterfacePermission",

"ec2:Describe*",

"ec2:DetachNetworkInterface",

"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",

"elasticloadbalancing:DeregisterTargets",

"elasticloadbalancing:Describe*",

"elasticloadbalancing:RegisterInstancesWithLoadBalancer",

"elasticloadbalancing:RegisterTargets",

"route53:ChangeResourceRecordSets",

"route53:CreateHealthCheck",

"route53:DeleteHealthCheck",

"route53:Get*",

"route53:List*",

"route53:UpdateHealthCheck",

"servicediscovery:DeregisterInstance",

"servicediscovery:Get*",

"servicediscovery:List*",

"servicediscovery:RegisterInstance",

"servicediscovery:UpdateInstanceCustomHealthStatus"

],

"Resource": "*"

},

{

"Sid": "AutoScaling",

"Effect": "Allow",

"Action": [

"autoscaling:Describe*"

],

"Resource": "*"

},

{

"Sid": "AutoScalingManagement",

"Effect": "Allow",

"Action": [

"autoscaling:DeletePolicy",

"autoscaling:PutScalingPolicy",

"autoscaling:SetInstanceProtection",

"autoscaling:UpdateAutoScalingGroup"

],

"Resource": "*",

"Condition": {

"Null": {

"autoscaling:ResourceTag/AmazonECSManaged": "false"

}

}

},

{

"Sid": "AutoScalingPlanManagement",

"Effect": "Allow",

"Action": [

"autoscaling-plans:CreateScalingPlan",

"autoscaling-plans:DeleteScalingPlan",

"autoscaling-plans:DescribeScalingPlans"

],

"Resource": "*"

},

{

"Sid": "CWAlarmManagement",

"Effect": "Allow",

"Action": [

"cloudwatch:DeleteAlarms",

"cloudwatch:DescribeAlarms",

"cloudwatch:PutMetricAlarm"

],

"Resource": "arn:aws:cloudwatch:*:*:alarm:*"

},

{

"Sid": "ECSTagging",

"Effect": "Allow",

"Action": [

"ec2:CreateTags"

],

"Resource": "arn:aws:ec2:*:*:network-interface/*"

},

{

"Sid": "CWLogGroupManagement",

"Effect": "Allow",

"Action": [

"logs:CreateLogGroup",

"logs:DescribeLogGroups",

"logs:PutRetentionPolicy"

],

"Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*"

},

{

"Sid": "CWLogStreamManagement",

"Effect": "Allow",

"Action": [

"logs:CreateLogStream",

"logs:DescribeLogStreams",

"logs:PutLogEvents"

],

"Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*:log-stream:*"

},

{

"Sid": "ExecuteCommandSessionManagement",

"Effect": "Allow",

"Action": [

"ssm:DescribeSessions"

],

"Resource": "*"

},

{

"Sid": "ExecuteCommand",

"Effect": "Allow",

"Action": [

"ssm:StartSession"

],

"Resource": [

"arn:aws:ecs:*:*:task/*",

"arn:aws:ssm:*:*:document/AmazonECS-ExecuteInteractiveCommand"

]

}

]

}




4

기타

LB 사용 시 ecsServiceRole 이 필요함

AWS Service: ecs

서비스를 올린다는 건 ELB로 외부에서 서버로 접속해 사용하도록 한다는 것으로 권한 필요

EC2 권한과 ELB 권한 필요.


{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Action": [

"ec2:AuthorizeSecurityGroupIngress",

"ec2:Describe*",

"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",

"elasticloadbalancing:DeregisterTargets",

"elasticloadbalancing:Describe*",

"elasticloadbalancing:RegisterInstancesWithLoadBalancer",

"elasticloadbalancing:RegisterTargets"

],

"Resource": "*"

}

]

}






<4> 애플리케이션 내용 업데이트


1

애플리케이션 새로 작업 정의하여, 서비스 업데이트하여 반영해 본다.


ECS > 작업 정의 > 사용 중인 컨테이너 클릭 > 해당 컨터이너 클릭 > 새 버전 > JSON내용 수정 2222

또는 새 수정 내용 JSON 반영


2

클러스터 > 서비스 > 업데이트 > 새 버전으로 변경 > 업데이트 (10분 소요)




<5> 서비스 Task 수 늘리기 - 사용자가 늘떄


클러스터

서비스 선택

업데이트

Task 수 2

업데이트

배포 탭 보기




<5> 정리


1

생성 순서는?

클러스터

Task 정의

서비스 생성


2

롤이 필요하다.


3

업데이트 순서는?

Task 정의에서 컨테이너 수정

클러스터의 서비스 업데이트


4

서비스 Task 수 늘리기 - 사용자가 늘떄

서비스 가서 Task를 늘린다.




<6> ECS 삭제 순서


1

서비스 지우기


2

클러스터 지우기 (10분)


3

작업 정의 지우기


4

LB 지우기

작업 정의 지우기



감사합니다.

keyword
매거진의 이전글12탄-클라우드 , 삼성 SmartTV