Amazon ECS ์ค์ผ์ค๋ง
Amazon EventBrdige ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Amazon ECS ํด๋ฌ์คํฐ๋ก ์ด์ฉ๋๋ ์๋น์ค์ EC2 ์ธ์คํด์ค์ ๊ท๋ชจ๋ฅผ ์กฐ์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, AWS Instance Scheduler ์๋ฃจ์ ๋ก ์คํ ์ด์ง์ด๋ ํ ์คํธ ํ๊ฒฝ์ ๋ํ EC2 ์ธ์คํด์ค๋ค์ ํ์ผ ์ ๋ฌด ์๊ฐ์๋ง ์คํ๋๋๋ก ์์, ์ข ๋ฃ ์ค์ผ์ค๋ง์ ์ํํ ์ ์๋ค. Amazon ECS์ ์์ฝ๋ ์์ ์ผ๋ก๋ ํน์ ํ์คํฌ๋ฅผ ์ผ์ ์๊ฐ์ ์์ํ ์ ์์ผ๋ ์ข ๋ฃํ ์ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ Application Auto Scaling์ ํ์ฉํด์ผํ๊ณ AWS CLI๋ฅผ ๋์ ํ์ฌ ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์คํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก Amazon EventBridge ์ค์ผ์ค๋ฌ ์ด๋ค.
์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ์์ฝ๋ ์์
Amazon EventBridge ์ค์ผ์ค๋ฌ๋ก ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ EC2 ์ธ์คํด์ค ์ฉ๋์ ์กฐ์ ํ ์ ์๋ค. ๊ทธ์ ์ ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ๋ํ ์ฝ์์์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ์์ฝ๋ ์์ ์ ๋ํด์ ์์๋ณด์. EC2 ์ฉ๋ ๊ณต๊ธ์๋ก ์ฌ์ฉ์ค์ธ ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ์๋ ํ์ฅ ๊ธฐ๋ฅ์ผ๋ก ์์ฝ๋ ์์ ์ ์ ์ํ๋ฉด ํฌ๋ก ํํ์์ ์ํด ํ์ผ ์ ๋ฌด ์๊ฐ์ ์ํ ์๋น์ค ํ๊ฒฝ์ ์คํํ ์ ์๋ค. ์คํ ์ด์ง ๋๋ ํ ์คํธ ํ๊ฒฝ์ ๊ฐ๋ฐ์ ๋๋ ํ ์คํธ ์์ง๋์ด๊ฐ ํ์ํ์ง ์์ ์๊ฐ์๋ ์ข ๋ฃํ์ฌ ์์ฌ ์๊ฐ์ ๋ํ ์๊ธ์ ์ค์ฌ๊ฐ ์ ์๋ค.
๋ค๋ง, ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน ์ฝ์์์ ์ ๊ณตํ๋ ์์ฝ๋ ์์ ์ผ๋ก ๋ง๋ค์ด์ง๋ ์ค์ผ์ค์ ์ผ์์ ์ผ๋ก ๋นํ์ฑํํ์ง ๋ชปํ๋ ๋จ์ ์ด ์๊ณ , ECS ํด๋ฌ์คํฐ์์ EC2 ์ธ์คํด์ค์ ์คํ๋๊ณ ์๋ ์๋น์ค๊ฐ ์๋ ๊ฒฝ์ฐ ecs-managed-draining-termination-hook ์๋ช ์ฃผ๊ธฐ ํํฌ์ ์ ํ ์๊ฐ(๊ธฐ๋ณธ๊ฐ 3,600์ด)์ผ๋ก ์ธํด ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ์์ฝ๋ ์์ ์ ์ํด ์ข ๋ฃ๋์ง ์๊ณ ๊ธฐ๋ค๋ฆด ์ ์๋ค.
๐ฅ TaskFailedToStart: EMPTY CAPACITY PROVIDER
์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ์์ฝ๋ ์์ ์ผ๋ก EC2 ์ธ์คํด์ค๊ฐ ๊ฐ์ ๋ก ์ข ๋ฃ๋ ๊ฒฝ์ฐ ์๋น์ค๋ก ์คํ๋๋ ํ์คํฌ๋ ์๋กญ๊ฒ ๋ง๋ค์ด์ง๋ฉฐ ์ง์์ ์ผ๋ก ํ๋ก๋น์ ๋์ ์ํํ ์ ์๋ค.
Amazon EventBridge ์ค์ผ์ค๋ฌ๋ก ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน ์กฐ์
Amazon EventBridge ์ค์ผ์ค๋ฌ์์ EC2 Auto Scaling ์๋น์ค์ SetDesiredCapacity ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ๋ํด ์ํ๋ ์ฉ๋์ ์ค์ ํ ์ ์๋ค. ๋ง์ฝ, EC2 ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํ ์ํ๋ก ์ ์งํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ํ๋ ์ฉ๋์ด 0 ์ด ๋๋๋ก ํ์ด๋ก๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
{
"AutoScalingGroupName": "mambo-ecs-cluster-asg",
"DesiredCapacity": 0
}
Amazon EventBridge ์ค์ผ์ค๋ฌ์ ๋ํ ์ด๋ฒคํธ ๋ก๊ทธ
๋ง์ฝ, ์์ Amazon EventBridge ์ค์ผ์ค๋ฌ์ ์ํด EC2 Auto Scaling ์๋น์ค๋ก ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ์ฉ๋์ ์ค์ด๊ณ ์ ํ๋๋ฐ ์ด๋ฒคํธ๊ฐ ๋์ํ๋์ง๋ฅผ ์๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ CloudTrail์ ์ด๋ฒคํธ ๊ธฐ๋ก์์ ํ์ธํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด ์คํ ์ค์ผ์ผ๋ง ๊ทธ๋ฃน์ ๋ํ ์ด๋ฒคํธ ๋์์ ECS ํด๋ฌ์คํฐ ์ด๋ฆ์ผ๋ก ์๋ชป ์ง์ ํด์ ValidationException
์ด ๋ฐ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "xxxxx:xxxxx",
"arn": "arn:aws:sts::xxxxx:assumed-role/ecsEventsRole/xxxxx",
"accountId": "xxxxx",
"accessKeyId": "xxxxx",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "xxxxx",
"arn": "arn:aws:iam::xxxxx:role/ecsEventsRole",
"accountId": "xxxxx",
"userName": "ecsEventsRole"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2024-11-15T15:57:59Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2024-11-15T15:57:59Z",
"eventSource": "autoscaling.amazonaws.com",
"eventName": "SetDesiredCapacity",
"awsRegion": "ap-northeast-2",
"sourceIPAddress": "3.34.11.70",
"userAgent": "AmazonEventBridgeScheduler aws-sdk-java/2.28.29 md/io#async md/http#NettyNio md/internal ua/2.0 os/Linux#5.10.226-214.880.amzn2.x86_64 lang/java#17.0.13 md/OpenJDK_64-Bit_Server_VM#17.0.13+11-LTS md/vendor#Amazon.com_Inc. md/en_US md/kotlin/1.6.21-release-334(1.6.21) exec-env/AWS_ECS_FARGATE cfg/retry-mode#legacy cfg/auth-source#stat",
"errorCode": "ValidationException",
"errorMessage": "AutoScalingGroup name not found - null",
"requestParameters": {
"autoScalingGroupName": "mambo-ecs-cluster",
"desiredCapacity": 1
},
"responseElements": null,
"requestID": "1d4e8568-2303-48ee-a6fa-2c3ca5be257d",
"eventID": "99a3097c-96ce-43dd-8c97-1aa0985c701b",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "xxxx",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "autoscaling.ap-northeast-2.amazonaws.com"
}
}
์๋ฌด๋๋ Amazon ECS ์์ Amazon ECR์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ฒ๋ผ Amazon EventBridge ์ค์ผ์ค๋ฌ ์ฝ์์์๋ Amazon CloudTrail ์ ๋ํ ๋งํฌ๋ฅผ ์ ๊ณตํด์ฃผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
Amazon EventBridge ์ค์ผ์ค๋ฌ๋ก ์๋น์ค ๊ท๋ชจ ์กฐ์
{
"Cluster": "mambo-ecs-cluster",
"Service": "app-service",
"DesiredCount": 0
}
EC2 ์ธ์คํด์ค์ ์์๊ณผ ์ข ๋ฃ์ ๋ํ ์ผ์ ์ ๊ตฌ์ฑํ๋ค๋ฉด ์ด์ Amazon EventBridge ์ค์ผ์ค๋ฌ์์ Amazon ECS ์๋น์ค ๋์์ผ๋ก UpdateService๋ฅผ ํธ์ถํ์ฌ ํน์ ํด๋ฌ์คํฐ์ ์กด์ฌํ๋ ์๋น์ค์ ๋ํด DesiredCount๋ฅผ ์ค์ ํ์ฌ ์๋น์ค์ ๋ํ ๊ท๋ชจ๋ฅผ ์กฐ์ ํด๋ณด๋๋ก ํ์.
Application Auto Scaling ๋ก ์๋น์ค ๊ท๋ชจ ์กฐ์
Amazon ECS ์๋น์ค๊ฐ ์๋ Application Auto Scaling ์๋น์ค์ register-scalable-target๋ฅผ ํธ์ถํ์ฌ ๋์ผํ ๋์์ ์ํํ ์ ์๋ค.
{
"ResourceId": "service/mambo-ecs-cluster/app-service",
"ScalableDimension": "ecs:service:DesiredCount",
"ServiceNamespace": "ecs",
"MinCapacity": 0,
"MaxCapacity": 0
}
Amazon EventBridge Scheduler IAM ์ญํ
Amazon ECS EventBridge IAM ์ญํ ๋ฅผ ์ฐธ๊ณ ํ์ฌ Amazon EventBridge ์ค์ผ์ค๋ฌ์์ Amazon ECS ์ EC2 Auto Scaling ์ ๋ํ ๊ถํ์ ๊ฐ์ง๋ IAM ์ญํ ์ธ ecsEventsRole
์ ๊ตฌ์ฑํ ์์์ด๋ค. ์ผ์ ์ ๋ํ ์ด๋ฒคํธ ๊ธฐ๋ก์์ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด IAM ์ญํ ์ ์ ๋ขฐ ๊ด๊ณ์ ์ฐ๊ฒฐ๋ ์ ์ฑ
์ ์ดํด๋ณด๋๋ก ํ์.
์ ๋ขฐํ ์ ์๋ ์ํฐํฐ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": [
"events.amazonaws.com",
"autoscaling.amazonaws.com",
"scheduler.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
์ฐ๊ฒฐ๋ ์ ์ฑ
- AmazonECS_FullAccess
- AmazonEventBridgeSchedulerFullAccess
- AutoScalingFullAccess