Elastic Beanstalk 정복하기 - 10 (EBExtensions 활용하기)
환경을 구성하고, 해당 환경을 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"
자세한 구성법은 아래의 링크에서 볼 수 있다.
여기까지 EB의 고급 활용법까지 알아봤고, 다음은 Terraform(tofu)로 환경을 만드는 방법을 포스팅하겠다.
'Aws > Elastic Beanstalk' 카테고리의 다른 글
Elastic Beanstalk 정복하기 - 9 (EBExtensions 정리) (4) | 2024.03.12 |
---|---|
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 정복하기 - 9 (EBExtensions 정리)
Elastic Beanstalk 정복하기 - 9 (EBExtensions 정리)
2024.03.12 -
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