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)로 환경을 만드는 방법을 포스팅하겠다.