Elastic Beanstalk 정복하기 - 9 (EBExtensions 정리)
이전에 애플리케이션 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를 작성해보려고 한다.
'Aws > Elastic Beanstalk' 카테고리의 다른 글
Elastic Beanstalk 정복하기 - 10 (EBExtensions 활용하기) (0) | 2024.03.16 |
---|---|
Elastic Beanstalk 정복하기 - 8 (CI/CD - CodePipeline) (0) | 2024.03.09 |
Elastic Beanstalk 정복하기 - 7 (CI/CD - Github Action) (4) | 2024.03.08 |
Elastic Beanstalk 정복하기 - 6 (CI/CD 사전 준비) (0) | 2024.03.04 |
Elastic Beanstalk 정복하기 - 5 (모니터링, 플랫폼 업데이트, 배포) (0) | 2024.03.02 |
댓글
이 글 공유하기
다른 글
-
Elastic Beanstalk 정복하기 - 10 (EBExtensions 활용하기)
Elastic Beanstalk 정복하기 - 10 (EBExtensions 활용하기)
2024.03.16 -
Elastic Beanstalk 정복하기 - 8 (CI/CD - CodePipeline)
Elastic Beanstalk 정복하기 - 8 (CI/CD - CodePipeline)
2024.03.09 -
Elastic Beanstalk 정복하기 - 7 (CI/CD - Github Action)
Elastic Beanstalk 정복하기 - 7 (CI/CD - Github Action)
2024.03.08 -
Elastic Beanstalk 정복하기 - 6 (CI/CD 사전 준비)
Elastic Beanstalk 정복하기 - 6 (CI/CD 사전 준비)
2024.03.04