EB 정복하기 - 1

EB 정복하기 - 2

EB 정복하기 - 3

EB 정복하기 - 4

EB 정복하기 - 5

EB 정복하기 - 6

EB 정복하기 - 7

EB 정복하기 - 8

EB 정복하기 - 9

 

환경을 구성하고, 해당 환경을 EBExtensions로 환경을 변경해 본다.

 

 

환경 구성 

 

구성한 환경은 아래 캡처를 참고하면 된다. 

환경은 도커이고, 고가용성을 선택했다. 

 

 

현재 구성은 최소 인스턴스 1, 최대 인스턴스 4, 스케일 아웃 인 트리거는 NetworkOut이다. 

 

 

 

활용한 EBExtensions

 

오토 스케일링 크기를 지정하는 ebextension

option_settings:
  aws:autoscaling:asg:
    MinSize: 2
    MaxSize: 4

 

EC2의 config다. 여기서 좋은 것은 SSHSourceRestriction인데, EB는 22 포트를 0.0.0.0/0으로 여는데, 콘솔에서는 제한을 줄 수 없기에 ebextensions로 제한을 줄 수 있다. 

 

option_settings:
  aws:autoscaling:launchconfiguration:
    SecurityGroups: # sg-id 적어야 함
    MonitoringInterval: 5 minute
    DisableIMDSv1: false
    IamInstanceProfile: DemoRoleForEC2 # arn을 적어도 무방 
    MonitoringInterval: 5 minuite 
    SSHSourceRestriction: tcp, 22, 22, 61.74.29.28/32 # ssh 접근 제한
    RootVolumeType: gp2
    RootVolumeSize: 10

 

오토 스케일링의 트리거다. 기본 설정은 NetworkOut인데, CPUUtilization으로 변경할 수 있다. 

 

option_settings:
  aws:autoscaling:trigger:
    UpperBreachScaleIncrement: 1 
    UpperThreshold: 70
    LowerBreachScaleIncrement: -1 
    LowerThreshold: 30
    MeasureName: CPUUtilization 
    Period: 1 
    EvaluationPeriods: 1 
    Statistic: Average
    Unit: Percent

 

EC2 인스턴스의 사양과 OS를 지정할 수 있다. 

 

option_settings:
  aws:ec2:instances:
    InstanceTypes: t2.micro,t3.micro
    SupportedArchitectures: x86_64

 

EC2와 LoadBalancer의 VPC와 Subnet을 지정할 수 있다. 

 

option_settings:
  aws:ec2:vpc:
    VPCId: # vpc-id
    Subnets: # a, b subnet-id 리스트 형식
    ELBScheme: public
    AssociatePublicIpAddress: true # false를 주는 것이 좋음

 

배포 방식을 지정할 수 있다. 한 번에, 롤링, 추가 롤링, 불변이 있는데 선택하고 배치 사이즈를 고를 수 있다. 

 

option_settings:
  aws:elasticbeanstalk:command:
    DeploymentPolicy: RollingWithAdditionalBatch 
    Timeout: 600 
    BatchSizeType: Percentage 
    BatchSize: 100 

 

EB 환경에 대한 서비스 롤과 단일 인스턴스인지 로드밸런서를 사용하는지 고를 수 있다.

하지만 단일 인스턴스와 로드밸런서를 고르는 것은 이미 만들어진 환경의 경우 콘솔에서 변경 가능하고, ebextensions으로는 변경 불가하다.

 

option_settings:
  aws:elasticbeanstalk:environment:
    EnvironmentType: LoadBalanced 
    ServiceRole: aws-elasticbeanstalk-service-role
    LoadBalancerType: application

 

LoadBalancer -> EC2에 가는 방식을 표현한 것으로 default로 만들어진 것을 변경할 수 있다. 원래는 health-check url은 /인데, 자신의 애플리케이션에 맞게 변경하면 된다. 추가적인 프로세스가 필요하면 default 말고 이름을 지정하면 된다.

 

option_settings:
    aws:elasticbeanstalk:environment:process:default:
      DeregistrationDelay: 20 
      HealthCheckInterval: 30 
      HealthCheckPath: /health-check
      HealthCheckTimeout: 5 
      HealthyThresholdCount: 3 
      MatcherHTTPCode: 200 
      Port: 80
      Protocol: HTTP
      UnhealthyThresholdCount: 3 

 

클라이언트 -> LoadBalancer의 요청에 대한 정의다. 이때 위에서 만든 default or 자신이 만든 프로세스를 지정해줘야 한다. 

 

option_settings:
    aws:elbv2:listener:default:
      DefaultProcess: default 
      ListenerEnabled: true 
      Protocol: HTTP 

 

애플리케이션에서 사용하는 환경 변수를 지정할 수 있다. profile를 선택할 수 있다. 

 

option_settings:
  aws:elasticbeanstalk:application:environment:
    ENVIRONMENT: dev

 

클라이언트와 LoadBalancer사이의 연결 종료 대기 시간과 보안 그룹을 지정할 수 있다. 

 

option_settings:
    aws:elbv2:loadbalancer:
      IdleTimeout: 120
      ManagedSecurityGroup: # sg-id
      SecurityGroups: # sg-id

 

 

변경 사항 확인

 

트리거가 변경됐고, 최소 인스턴수 수도 2로 바뀐 것을 볼 수 있다. 

 

 

이렇게 환경을 새로 만들 때 혹은 환경을 업데이트할 때 구성할 수 있다. 

 

추가적인 활용

 

EB는 사실 CloudFormation이라는 AWS에서 제공하는 IaC 도구를 사용해서 생성한다. 그래서 CloudFormation 스크립트에 맞춰서 config 파일을 작성하면, 그대로 실행이 된다. 예를 들어서 추가적인 알람을 설정해 보자. 

 

 

Resources:
  EC2CPUUtilizationAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: {"Fn::Join": ["", [{"Ref": "AWSEBEnvironmentName"}, " CPU Utilization"]]}
      AlarmDescription: {"EC2 CPU Alarm"}
      Namespace: AWS/EC2
      MetricName: CPUUtilization
      Dimensions:
        - Name: AutoScalingGroupName
          Value: {Ref: AWSEBAutoScalingGroup}
      Statistic: Average
      Period: 70
      EvaluationPeriods: 3
      Threshold: {"60.0"}
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - "sns-arn"

 

자세한 구성법은 아래의 링크에서 볼 수 있다.

 

CloudFormation 구성법

 

여기까지 EB의 고급 활용법까지 알아봤고, 다음은 Terraform(tofu)로 환경을 만드는 방법을 포스팅하겠다.