AWS-ECS 클러스터 인스턴스가 Scale-In
될때 드레이닝 해주는 예시 프로젝트입니다.
- Run
pip install -r requirements.txt
- Update
config.yaml
- Run
lambda deploy
- 배포툴로 python-lambda 라이브러리를 사용하고 있습니다.
- SNS 주제를 만들고 배포된 람다 함수를 구독
- 수명주기 후크 생성
aws autoscaling put-lifecycle-hook --lifecycle-hook-name <훅이름> --auto-scaling-group-name <AS그룹 이름> --lifecycle-transition "autoscaling:EC2_INSTANCE_TERMINATING" --notification-target-arn <SNS ARN> --role-arn <Role ARN> --heartbeat-timeout 300
event.json
을 활용하여 로컬에서 테스트할 수 있습니다.lambda invoke -v
명령어로 로컬에서 테스트할 수 있습니다.
lambda deploy
명령어를 통해 배포할 수 있습니다(실행하면 AWS-Lambda
함수를 만듬).
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": "*",
"Action": [
"sqs:SendMessage",
"sqs:GetQueueUrl",
"sns:Publish"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:CompleteLifecycleAction",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ec2:DescribeInstances",
"ec2:DescribeInstanceAttribute",
"ec2:DescribeInstanceStatus",
"ec2:DescribeHosts",
"ecs:ListContainerInstances",
"ecs:SubmitContainerStateChange",
"ecs:SubmitTaskStateChange",
"ecs:DescribeContainerInstances",
"ecs:UpdateContainerInstancesState",
"ecs:ListTasks",
"ecs:DescribeTasks",
"sns:Publish",
"sns:ListSubscriptions"
],
"Resource": "*"
}
]
}