실습
목표
ECS 만들어 보자.
Amazon Elastic Container Service(ECS)는 완전관리형 컨테이너 오케스트레이션 서비스
<0> 일반 계정으로 ECS사용시 할당 해야 할 권한
<1> ecs 샘플 이미지로 작업정의 등록
<2> 클러스터 생성과 서비스 생성
<3> 새 버전 서비스 = ECS 내용 수정해 다시 배포하기
<4> ECS란?
<0> 일반 계정으로 ECS사용시 할당 해야 할 권한
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_managed_policies.html
1
생성 프로세스 확인 하세요.
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html
<1> ecs 샘플 이미지로 작업 정의
1
Service > ECS > 작업 정의 > 새 작업 정의 > EC2 > 다음 >
화면 맨아래 Json을 통해 구성
// JSON 코드입력
// 컨테이너 정의등 내용 확인
> 생성
// IAM > Elastic Container Service가 ecsTaskExecutionRole을(를) 생성하고 사용할 수 있는 권한을 부여하고 있습니다
2
ECS > 작업 정의 > 컨테이너 생성 확인
<2> 클러스터 생성과 서비스 생성
1
ECS 클러스터를 생성한다.
ECS > 클러스터 > 클러스터 생성 > EC2 Linux + 네트워킹 > ECSCluster1
t3.small
ecsinstanceRole 사용
ec2
role
서비스 : ec2
ecsInstanceRole
policy
AmazonEC2ContainerServiceforEC2Role
{
"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
ecs > 클러스터 > ECSCluster 클릭 > 서비스 > 생성 > EC2 선택
서비스이름
seo-service1
작업 개수
2
다음
3
로드 밸런싱 > Network Load Balancer
IAM 역할 awsserviceroleforecs
{
"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
로드 밸런서 생성하기
Network Load Balancer > Create
ecs-nlb1
public subnet에 lb를 위치해야 한다.
80 tcp > mytargetGroup
Create Target group > ecs-tg
서버 선택
다음단계 > 다음 단계 > 서비스 생성
5
서비스 보기
ECS > Clousters > ECSCluster 클릭 >
6
이벤트 > 새로 고침
대상 그룹 이름 확인
세부 정보 > 대상 그룹 이름 > 로드밸런서 클릭 > DNS 이름 복사
// 로드밸런서 DNS로 사이트가 안뜨면 개별 EC2 public IP를 브라우저로 접속해보라.
7
사이트 확인
시간이 10분 정도 걸린다.
좀 기다린후 확인하라.
대상 그룹에서 NLB에 연결된 서버 상태 확인하라.
<3> 새 버전 서비스 = ECS 내용 수정해 다시 배포하기
1
작업 정의 > JSON 에서 내용 수정
2
ECSCluster > myservice 체크 > 업데이트 > Revision 을 latest로 변경하자!!
1
ECS > 작업 정의 > 생생되어 있는 작업정의 mycontainer 체크 >
새 계정 생성 (Create new revison) > 맨아래 JSON을 통해 구성
// 화면 내용 수정
Congratulations ! => sssss 로 변경
Your application is now running xxxxxxxx 을 sssssssss 로 변경
> 생성
작업 정의 mycontainer:2 의 새버전 생성이 완료 된다!!!
2
ECS > Cluster > ECSCluster > myservice 체크 > 업데이트 클릭 > 다음 > 다음 > 다음
> 서비스 업데이트 > 서비스 보기
3
배포 탭 > 갱신 클릭 > 10분 소요
4
웹브라우저로 다시 접속
> 새버전으로 사이트가 변경 되었다.
<4> ECS란?
https://brunch.co.kr/@topasvga/1291
https://aws.amazon.com/ko/ecs/
감사합니다.