EB 정복하기 - 1

EB 정복하기 - 2

EB 정복하기 - 3

EB 정복하기 - 4

EB 정복하기 - 5

EB 정복하기 - 6

EB 정복하기 - 7

EB 정복하기 - 8

 

이전에 애플리케이션 EB Health Check URL 지정과 환경 변수 지정한. ebextensions 자주 쓸만한 옵션들을 알아보고 다음 포스팅에서 적용해 볼 예정이다. 

 

aws:autoscaling:asg

 

인스턴스의 가용 영역 설정, 스케일링 아웃 다운 휴지기 시간 지정, 용량 리밸런싱, 최소 사이즈, 최대 사이즈가 있다.

 

간단하게 모든 옵션에 대해서 예시를 적어봤다. 필요에 맞게 설정하면 된다.

 

option_settings:
  aws:autoscaling:asg:
    Cooldown: '720' # default 360
    MinSize: '4' # 1~10000 사이 값으로 default 4 
    MaxSize: '1' # 1~10000 사이 값으로 default 1
    EnableCapacityRebalancing: true # default false
    Custom Availability Zones: # 오류뜸 vpc에서 설정해야 한다. (Namespace: 'aws:ec2:vpc', OptionName: 'Custom Availability Zones'): Custom Availability Zones option not supported for VPC environments.


인스턴스의 가용 영역은 해당 설정에 넣으면 오류가 뜬다. 그래서 aws:ec2:vpc: 네임스페이스에서 가용 영역 설정을 해야한다.

aws:autoscaling:launchconfiguration

 

인스턴스의 IMDSv1 활성 여부, EC2 Key, Instance Profile, AMI ID, 태그 전파, 모니터 간격, 시큐리티 그룹, SSH 접근 제한, 볼륨 맵핑이 있다. 

 

option_settings:
  aws:autoscaling:launchconfiguration:
    MonitoringInterval: "1 minute"
    DisableIMDSv1: false
    EC2KeyName: my-keypair
    IamInstanceProfile: "aws-elasticbeanstalk-ec2-role"
    LaunchTemplateTagPropagationEnabled: # default false 태그를 전파하여 배포가능 예상치 못한 다운 타임 있을 수 있음
    MonitoringInterval: 5 minuite # 1 or 5 minute default 5 minute
    SecurityGroups: sg-id # default elasticbeanstalk-default
    SSHSourceRestriction: tcp, 22, 22, 0.0.0.0/32 # default 없음 protocol, fromPort, toPort, source_restriction ssh 접근 지정
    BlockDeviceMappings: "/dev/sdj=:100,/dev/sdh=snap-51eef269,/dev/sdb=ephemeral0" # default 없음

 

aws:autoscaling:scheduledaction

 

오토스케일링 예약으로 시작 시간, 끝나는 시간, 최대 사이즈, 최소 사이즈, 원하는 용량, 크론 식, 일시적 비활성화 옵션이 있다.

 

option_settings:
  ScheduledWeekendScaleDown.aws:autoscaling:scheduledaction:
    StartTime: '2015-12-12T07:00:00Z' # default 없음 최초 실행 날짜
    EndTime: '2016-01-12T07:00:00Z' # default 없음 해당 기간까지 실행
    MinSize: '1' # 1~10000 default 없음
    MaxSize: '4' # 1~10000 default 없음
    DesiredCapacity: '1' # 1~10000 default 없음
    Recurrence: 0 18 * * 5 # cron 식 default 없음
    Suspend: false # default false 

 

aws:autoscaling:trigger

 

오토스케일링 트리거 설정으로 지표 한도, 스케일링 아웃 시 인스턴스 수, 상위 임계값, 제거 시 인스턴스 수, 하위 임계값, 매트릭 이름, 측정 빈도, 연속되는 평가 기간, 통계 방식, 측정 단위

 

option_settings:
  aws:autoscaling:trigger
    BreachDuration: 5 # 1~600 default 5
    UpperBreachScaleIncrement: 1 # 1 ~ 600 default 1
    UpperThreshold: 6000000 # 0~20000000 default 6000000
    LowerBreachScaleIncrement: -1 # default -1
    LowerThreshold: 2000000 # 0~20000000 default 2000000
    MeasureName: NetworkOut # CPUUtilization NetworkIn NetworkOut DiskWriteOps DiskReadBytes DiskReadOps DiskWriteBytes Latency RequestCount HealthyHostCount UnhealthyHostCount TargetResponseTime
    Period: 5 # 1 ~ 600 default 5
    EvaluationPeriods: 1 # 1 ~ 600 default 1
    Statistic: Average # Minimum Maximum Sum Average
    Unit: Bytes # Seconds Percent Bytes Bits Count Bytes/Second Bits/Second Count/Second None

 

aws:autoscaling:updatepolicy:rollingupdate

 

구성 업데이트로 인한 롤링 업데이트 시 사용하는 설정으로 최대 배치 크기, 최소 인스턴스 수, 구성 롤링 업데이트 가능 여부, 롤링 업데이트 타입, 배치 대기 시간, 배치 타임 아웃

 

option_settings:
  aws:autoscaling:updatepolicy:rollingupdate:
    MaxBatchSize: 1 # 1 ~ 10000 default 그룹 최소 크기 / 3 올림계산
    MinInstancesInService: 1 # 0 ~ 9999 default 그룹 최소 크기 or 최대 크기보다 작은 크기
    RollingUpdateEnabled: false # true or false default false
    RollingUpdateType: Time # Time Health Immutable default Time
    PauseTime: 600 # 0초 ~ 1시간 default 자동 계산 PT0H0M0S 형식
    Timeout: 30 # 5분 ~ 1시간 default 30분 PT0H0M0S 형식

 

aws:ec2:instances

 

스팟 옵션을 포함해서, 환경의 인스턴스를 구성할 수 있는 네임스페이스다. 섹션은 한 개로 정의돼 있다.

 

 

option_settings:
  aws:ec2:instances:
    EnableSpot: true # true or false default false
    InstanceTypes: 't2.micro,t3.micro,t3.small' # 1 ~ 10개 최소 2개 권장
    SpotFleetOnDemandBase: '1' # 그룹의 온디맨드 수에 달려있음 default 0
    SpotFleetOnDemandAboveBasePercentage: '33' # 0 ~ 100 default 단일일 때 0, 로드밸런싱 환경일 때 70 
    SpotMaxPrice: 0.021 # 0.001 ~ 20.0 default 각 온디맨드의 가격
    SupportedArchitectures: x86_64 # arm64, x86_64, i386 default 없음

 

aws:ec2:vpc

 

VPC관련한 설정으로 인스턴스, RDS, ELB의 서브넷을 지정할 수 있다. 

 

option_settings:
  aws:ec2:vpc:
    VPCId: vpec-~ # default 없음
    Subnets: subnet-id
    ELBSubents: subnet-id # default 없음
    ELBScheme: public # public or internal default public
    DBSubnets: subnet-id # default 없음
    AssociatePublicIpAddress: true # true or false default 없음

 

aws:elasticbeanstalk:application

 

애플리케이션의 상태 확인 경로를 구성할 수 있다. 콘솔로 환경을 구성한 경우. ebextensions로 설정할 수 없음

 

option_settings:
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: /health # default 80:/으로 감

 

aws:elasticbeanstalk:cloudwatch:logs

 

로그 스트림에 대해서 생성 여부, 환경 삭제 시 삭제 옵션, 보관 기간을 설정할 수 있다. 

 

option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: false # true or false default false 
    DeleteOnTerminate: false # true or false default false 
    RetentionInDays: 7 # 1, 3, 5, 7, 14 30 ~ 클라우드 워치 옵션과 동일함 default 7

 

aws:elasticbeanstalk:cloudwatch:logs:health

 

환경 상태 로그 스트림에 대해서 생성 여부, 환경 삭제 시 삭제 옵션, 보관 기간을 설정할 수 있다.

 

option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:health:
    StreamLogs: false # true or false default false 
    DeleteOnTerminate: false # true or false default false 
    RetentionInDays: 7 # 1, 3, 5, 7, 14 30 ~ 클라우드 워치 옵션과 동일함 default 7

 

aws:elasticbeanstalk:command

 

배포 옵션에 대해서 배포 방식, 시간 초과, 배치 사이즈 타입, 배치 사이즈, 헬스 체크 무시 옵션이 있다.

 

option_settings:
  aws:elasticbeanstalk:command:
    DeploymentPolicy: AllAtOnce # AllAtOnce Rolling RollingWithAdditionalBatch Immutable TrafficSplitting
    Timeout: 600 # 1 ~ 3600초 default 600초
    BatchSizeType: Percentage # Percentage or Fixed default Percentage 퍼센트 비율로 새로운 인스턴스를 교체할 지 or 고정된 인스턴스 수만큼 교체할 지 타입 선택
    BatchSize: 100 # 1 ~ 100 default 100 퍼센트 비율 or 고정된 인스턴스 수
    IgnoreHealthCheck: false # true or false default false 배포할 때 헬스체크를 할지 말지

 

aws:elasticbeanstalk:environment

 

환경 웹티어 타입중에 단일 인스턴스 유형 or 밸런서 유형, EB 서비스 롤, 로드밸런서 유형, 로드밸런서 공유가 있다.

 

option_settings:
  aws:elasticbeanstalk:environment:
    EnvironmentType: SingleInstance # SingleInstance or LoadBalanced default LoadBalaced
    ServiceRole: None # IAM role name, path/name, or ARN
    LoadBalancerType: classic # classic network application default classic
    LoadBalancerIsShared: true # true or false default false

 

aws:elasticbeanstalk:environment:process:default and name

로드밸런서 -> 인스턴스로의 요청 맵핑을 한다. 여기서 default는 기존에 만들어져 있는 값이고, name은 새로 만들 수 있다. 옵션은 모두 동일하게 들어간다.

 

등록 취소 전 요청 완료 대기 시간, 헬스 체크 인터벌, 헬스 체크 패스, 헬스 체크 응답 대기 시간, 헬스 체크 연속 성공 임계값, HTTP Code, Port, Protocol, 스티키 세션, 스티키 세션 수명 주기, 스티키 세션 타입, 헬스 체크 연속 실패 임계값

 

option_settings:
    aws:elasticbeanstalk:environment:process:default: # or name
      DeregistrationDelay: 20 # 0 ~ 3600 default 20
      HealthCheckInterval: 30 # ALB CLB 5 ~ 300 NLB 10, 30 default ALB CLB 15 NLB 30
      HealthCheckPath: / # default /
      HealthCheckTimeout: 5 # 1 ~ 60 default 5
      HealthyThresholdCount: 3 # 2 ~ 10 default ALB CLB 3 NLB 5
      MatcherHTTPCode: 200 # ALB 200 ~ 499 NLB 200 ~ 399 default 200
      Port: 80 # 1 ~ 65535 default 80
      Protocol: TPC # TCP HTTP HTTPS default CLB ALB HTTP NLB TCP
      StickinessEnabled: false # true or false default false
      StickinessLBCookieDuration: 86400 # 1 ~ 604800초 default 86400
      StickinessType: lb_cookie # default lb_cookie ALB만 가능
      UnhealthyThresholdCount: 3 # 2 ~ 10 default ALB CLB 3 NLB 5

 

aws:elbv2:listener:default or listener_port

 

사용자 -> 로드밸런서 -> process를 맵핑한다. default는 80이 default다. 단 공유 로드 밸런서를 사용하고 있는 경우에 디폴트는 적용 되지 않는다.

 

option_settings:
    aws:elbv2:listener:listener_port
      DefaultProcess: default # 프로세스 이름 default default
      ListenerEnabled: true # true or false default true
      Protocol: HTTP # ALB CLB HTTP or HTTPS NLB TCP default ALB CLB HTTP NLB TCP
      Rules: rule : 생성한 rule 이름 default 없음
      SSLCertificateArns: ACM-arn # SSL인증서 arn default 없음
      SSLPolicy: # 로드밸런서 보안 정책 이름 default 없음 ALB만 가능

 

aws:elbv2:listenerrule:rule_name

 

리스너의 룰을 지정하는 생성할 수 있는 옵션으로 호스트 해더, 경로 패턴, 우선순위, 프로세스 이름이 있다.

 

간단하게 80으로 왔을 때 443으로 리다이렉트하는 규칙으로 HTTPS통신을 강제하는 방법이 있다. 

 

option_settings:
    aws:elbv2:listenerrule:rule_name # NLB에 적용 불가능함
      HostHeaders: /* # CNAME의 호스트 해더 ALB만 가능 default 공용일 때만 EB의 도메인이 CNAME으로 있음
      PathPatterns: /* # 패턴 표현식 사용 가능 ALB만 가능 default 없음
      Priority: 1 # 1 ~ 1000 default 1 낮을수록 우선순위가 높음
      Process: default # 프로세스 이름 default default
     

 

aws:elbv2:loadbalancer

 

로드밸런서의 보안 그룹, 로그 저장, 로드밸런서 공유를 설정하는 옵션들이다. 

 

option_settings:
    aws:elbv2:loadbalancer
      AccessLogsS3Bucket: bucket # 버킷 이름 default 없음
      AccessLogsS3Enabled: true # true or false default false
      AccessLogsS3Prefix: /prefix # AWSLogs에 로그를 업로드 하는데, prefix를 지정 default 없음
      IdleTimeout: 30 # 1 ~ 3600초 default 없음 클라이언트와 인스턴스 간의 요청 완료 대기시간
      ManagedSecurityGroup: security-id # 보안 그룹 id # default EB생성 시 만들어지는 보안그룹 생성
      SecurityGroups: sec-id1, sec-id2 # 보안 그룹 id 리스트 default EB생성 시 만들어지는 보안그룹 생성
      SharedLoadBalancer: lb-arn # 로드밸런서의 arn default 없음

 

 

모든 옵션은 아니지만, 자주 쓰이는 옵션들을 알아봤다. 다음은 로드밸런서 타입에서 사용할 수 있는 ebextensions를 써보고, 추가적으로 알림을 구성하도록 config를 작성해보려고 한다.