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 지우기
작업 정의 지우기
감사합니다.