일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AWS
- angular
- pandas
- python
- javascript
- data
- opencv
- analyzing
- Method
- TypeScript
- data analyze
- webcrawling
- 크롤링
- keras
- adaptive life cycle
- 애자일
- Crawling
- 프로젝트
- 다나와
- matplotlib
- ECS
- Scrum
- DANAWA
- Agile
- 자바스크립트
- Project
- instance
- tensorflow
- algorithm
- visualizing
Archives
- Today
- Total
LiJell's 성장기
EC2 Auto Scaling Multiple Launch Templates 본문
반응형
개요
나는 ECS capacity provider를 Fargate
에서 Spot Instance
로 전환 중이였고, 안정성을 위한 EC2 Auto Scaling Multiple Launch Templates을 적용하며 겪은 내용을 정리해봤다.
문제점
ECS capacity provider를 EC2 spot instance로 전환하면서 안정성을 위해 multiple launch templates
을 사용하고자 했습니다.
하지만, ARM architecture family instance만 적용이 되고 X86 architecture family instance는 찾아볼 수 없었습니다.
그에 대한 원인은 MixedInstancesPolicy
configureation의 오류였습니다.
원인
작업은 Terraform에서 이루어졌지만, 설명을 위해 AWS Docs 기준으로 함께 보시죠.
Before
{
"AutoScalingGroupName":"my-asg",
"MixedInstancesPolicy":{
"LaunchTemplate":{
"LaunchTemplateSpecification":{
"LaunchTemplateName":"my-launch-template-for-x86",
"Version":"$Latest"
},
"Overrides":[
{
"InstanceType":"c6g.*",
"LaunchTemplateSpecification": {
"LaunchTemplateName": "my-launch-template-for-arm",
"Version": "$Latest"
}
}
]
},
"InstancesDistribution":{
"OnDemandBaseCapacity": 1,
"OnDemandPercentageAboveBaseCapacity": 50,
"SpotAllocationStrategy": "capacity-optimized"
}
},
"MinSize":1,
"MaxSize":5,
"DesiredCapacity":3,
"VPCZoneIdentifier":"subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782",
"Tags":[ ]
}
- 위 코드 블록을 보시면,
Overrides
에 InstanceType을c6g.*
로 주었습니다. 제가 기대한 것은 Graviton Instance의 LaunchTemplateName으로my-launch-template-for-arm
로 적용되고, 그 외 값들은 x86이 적용될 것으로 기대했지만, 말 그대로 Override기 때문에 기대와는 달랐습니다. 모두 Gravition Instance만 적용됐죠.
해결 방법
After
{
"AutoScalingGroupName":"my-asg",
"MixedInstancesPolicy":{
"LaunchTemplate":{
"LaunchTemplateSpecification":{
"LaunchTemplateName":"my-launch-template-for-x86",
"Version":"$Latest"
},
"Overrides":[
{
"InstanceType":"c6g.*",
"LaunchTemplateSpecification": {
"LaunchTemplateName": "my-launch-template-for-arm",
"Version": "$Latest"
}
},
{
"InstanceType":"c5.*"
},
{
"InstanceType":"c5a.*"
}
]
},
"InstancesDistribution":{
"OnDemandBaseCapacity": 1,
"OnDemandPercentageAboveBaseCapacity": 50,
"SpotAllocationStrategy": "capacity-optimized"
}
},
"MinSize":1,
"MaxSize":5,
"DesiredCapacity":3,
"VPCZoneIdentifier":"subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782",
"Tags":[ ]
}
- 즉, 변경 후에는
Overrides
에 X86 architecture family instance에 대한 type을 따로 명시 해줬고, 해당instance type
에 대한LaunchTemplateSpecification
은 override되지 않았기 때문에 default 값이 적용되는 겁니다.
"LaunchTemplateSpecification":{
"LaunchTemplateName":"my-launch-template-for-x86",
"Version":"$Latest"
},
결론
Multiple Launch Templates를 위해서 Overrides
를 사용할 땐 원하는 architecture family instance type에 override하고싶은 LaunchTemplateSpecification
을 명시해줘야 합니다. 즉 Overrides에 명시하지 않은 내용은 최상단에 명시해둔 default값을 따르게 됩니다.
반응형
'Cloud' 카테고리의 다른 글
Efficient Multi-Architecture and Multi-Region Container Deployment with Amazon ECS and EC2 Spot Instances (2) | 2024.01.22 |
---|---|
ECS EC2 Spot instance scaling 속도 개선 방법 (2) | 2023.12.29 |
S3 Cache-Control (0) | 2023.10.13 |
ECS Speeding up deployments (0) | 2023.08.17 |
AWS Lambda@Edge (0) | 2023.08.06 |
Comments