ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS - 서버배포 - ECS 생성 - 사전작업(IAM,ASG(Launch Template, health check, Target group) - 4
    Cloud/aws 2026. 4. 8. 23:13

     

    👉 ECS란 ? 


    ECS는 ’AWS Fargate에서 관리하는 서버를 사용하지 않는 인프라에서 태스크 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해 관리하는 Amazon EC2 인스턴스의 클러스터에서 태스크와 서비스를 실행할 수 있습니다.’ 위 AWS 설명의 일부를 추출한 내용이다.

    사실 이 내용은 크게 어렵지 않다. ECS가 컨테이너를 관리하는 대상을 말하는 내용이다. ECS에서는 현재 두 가지 플랫폼을 지원한다. 바로 EC2와 Fargate이다. 이 둘의 차이점은 사용자가 서버를 직접 관리하는 IAAS와 사용자가 서버를 직접 관리하지 않는 PaaS의 차이이다.

    한마디로 ECS는 우리가 흔히 사용하는 컨테이너(ex: Docker)를 관리하기 위한 도구이다. 컨테이너를 쉽게 실행, 중지하는 등의 관리가 가능하다. 유명한 오케스트레이션 툴인 Kubernetes와 비슷하다.

     

    ECS 서비스를 올리기전에 미리 사전에 작업을 해야할것들을 적어놓으려고 한다.

     

    1. IAM ROLE 설정

    - ecsTaskExecutionRole (태스크가 ECR pull, CloudWatch 로그 쓰기에 필요)

     

     

    2. health check용 api endpoint 개발 및 셋팅

    나중에 얘기할 내용일것같지만 미리 적는내용

    target group에서 health check 셋팅을 해줘야 하기 때문에 api 서버에 미리 health check 용 200으로 응답오게끔 추가해준다
    server api에 작업한 Health check api 내용
    Target Group에 위 내용 가지고 셋팅한 Health check settings

     

    [CLI 기준으로 순서대로 생성]

     

     Step 1. ECS Cluster 생성

     aws ecs create-cluster --cluster-name prod-an2-ecs(클러스터명)

     

    3. ASG (Auto scadling Group) 생성 

    EC2 - spot 형태로 셋팅하려고 하는데 나중에 얘기할 내용이지만 code deploy에서 배포를 위해 자동으로 EC2 생성을 늘렸다가 줄이는 형태로 만들려고 할때 미리 EC2 스펙값을 적어놓는 단계를 적어놓으려고 한다. (비용절감을 위하여 spot으로 생성하였지만 안정적인 서비스는 ondemand로 생성추천)

     - ECS-optimized Amazon Linux 2 AMI 사용
     - Instance type: t3.medium
     - User data: ECS cluster에 join하는 스크립트
     - VPC: vpc-****** (prod ALB와 동일)
     - Security Group 설정 필요

     

     

    3-1. Launch Template 생성

    (인스턴스타입, 스토리지설정, ECS AMI 선택, User data(ECS 클러스터에 인스턴스를 등록하는 핵심 스크립트)

    aws ec2 create-launch-template \
       --launch-template-name prod-ecs-lt \
       --launch-template-data '{
         "ImageId": "<ECS_AMI_ID>",
         "SecurityGroupIds": ["<SG_ID>"],
         "IamInstanceProfile": {"Arn": "<ECS_INSTANCE_PROFILE_ARN>"},
         "UserData": "<base64 encoded: #!/bin/bash\necho ECS_CLUSTER=prod-an2-ecs >> /etc/ecs/ecs.config>"
       }'

     

     

    3-2. Auto Scaling Group 생성

     - Subnets: prod VPC의 private subnets

     - Min/Max/Desired: 1/2/1 (필요에 따라 조정)

     - MixedInstancesPolicy: t3.medium Spot

     
    aws autoscaling create-auto-scaling-group \
       --auto-scaling-group-name prod-ecs-asg \
       --mixed-instances-policy '{
         "LaunchTemplate": {
           "LaunchTemplateSpecification": {
             "LaunchTemplateName": "prod-ecs-lt",
             "Version": "$Latest"
           },
           "Overrides": [{"InstanceType": "t3.medium"}]
         },
         "InstancesDistribution": {
           "OnDemandBaseCapacity": 0,
           "OnDemandPercentageAboveBaseCapacity": 0,
           "SpotAllocationStrategy": "price-capacity-optimized"
         }
       }' \
       --min-size 1 --max-size 2 --desired-capacity 1 \
       --vpc-zone-identifier "subnet-04067c20335db3c08,subnet-07b537a70166009da" \
       --tags Key=Name,Value="ECS Instance - prod-an2-ecs",PropagateAtLaunch=true \
              Key=AmazonECSManaged,Value="",PropagateAtLaunch=true

     

    3-3. Capacity Provider 생성 & 클러스터 연결

    # Capacity Provider 생성

     aws ecs create-capacity-provider \
       --name prod-asg-cp \
       --auto-scaling-group-provider '{
         "autoScalingGroupArn": "<ASG_ARN>",
         "managedScaling": {
           "status": "ENABLED",
           "targetCapacity": 100,
           "minimumScalingStepSize": 1,
           "maximumScalingStepSize": 1
         },
         "managedTerminationProtection": "DISABLED"
       }'

     

    3-4. ECS 클러스터에 Capacity Provider 연결

    aws ecs put-cluster-capacity-providers \
       --cluster prod-an2-ecs \
       --capacity-providers prod-asg-cp \
       --default-capacity-provider-strategy capacityProvider=prod-asg-cp,weight=1,base=0

     

    3-5. Target Group 생성 (Blue - ab)

    aws elbv2 create-target-group \
       --name prod-ecs-albtg-ab \
       --protocol HTTP --port 80 \
       --vpc-id vpc-****** \
       --target-type instance \
       --health-check-protocol HTTP \
       --health-check-path /v1/hello/status \
       --health-check-interval-seconds 30 \
       --healthy-threshold-count 5 \
       --unhealthy-threshold-count 2

     

    3-6. Target Group 생성 (Green - ag)

     

    aws elbv2 create-target-group \
       --name prod-ecs-albtg-ag \
       --protocol HTTP --port 80 \
       --vpc-id vpc-******* \
       --target-type instance \
       --health-check-protocol HTTP \
       --health-check-path /v1/hello/status \
       --health-check-interval-seconds 30 \
       --healthy-threshold-count 5 \
       --unhealthy-threshold-count 2

     

     

    다음에 이어서  ALB(Application Load Balancer) - Listener Rule 추가 하는 글 작성하겠습니다

Designed by Tistory.