[AWS] Fargate Spot instance
Fargate๋ AWS์์ ์ ๊ณตํ๋ ๋ฉ์ง ๊ธฐ๋ฐ์๋น์ค ์ค ํ๋๋ค.
Docker ๊ธฐ๋ฐ ์ปจํ
์ด๋๋ฅผ ๋ค๋ฃจ๋ ์์คํ
์ด๋ผ๋ฉด, ๋๋ถ๋ถ Fargate๋ฅผ ํตํด ๊ตฌ๋๋๋ค.
ํ์ง๋ง Fargate์ ๊ฐ์ฅ ํฐ ๋จ์ ์.. ๋น์ฉ์ด๋ค.
EC2๋ฅผ ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋นํ๋ฉด ์กฐ๊ธ ๋น์ผ ํธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ AWS๋ 2020๋
๋ถํฐ Fargate์ Spot ์๊ธ์ ๋ฅผ ์ถ๊ฐํ๋ค.
์ด๊ฒ ๋ญ๋๋ฉด, ๋ ์ผ ๊ฐ๊ฒฉ์ ์ ๊ณตํ๋ ๋์ ์ AWS์์ ์์์ด ๋ชจ์๋ ๊ฒฝ์ฐ์ "๊ฐ์ ๋ก ์ข
๋ฃ๋ ์ ์๋ค."๋ ๊ฒ์ด๋ค.
๊ทธ๋๋ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ํ ๋งํผ ๊ฐ๊ฒฉ์ด ๊ฝค ์ธ๊ธด ํ๋ค.
๊ธฐ๋ณธ๋น์ฉ์ด ์ด๋ฐ๋ฐ
Spot์ ์ฐ๋ฉด 3๋ฐฐ ์ ๋ ์ธ๋ค.
๋ง์ฝ vcpu ํ๊ฐ์ 4๊ธฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ค๋ฉด,
๊ธฐ๋ณธ Farate๋ ํ๋ฌ์ (0.04656 * 24 * 30) + (0.001533 * 4 * 24 * 30) => 37.93824๋ฌ๋ฌ = 50000์์ด๊ณ
Spot์ (0.013968 * 24 * 30) + (0.001533 * 4 * 24 * 30) => 14.472๋ฌ๋ฌ = 19000์์ด ๋๋ ์
์ด๋ค.
๊ฑฐ์ 3๋ฐฐ ๊ฐ๊น์ด ์ธ๋ค.
์ฌ์ฉ๋ฒ
๋จผ์ ECS ํด๋ฌ์คํฐ ๋จ์์์ ๊ณต๊ธ์ ์ ๋ต์ ์์ ํด์ค์ผ ํ๋ค.
์ด๋ฐ์์ผ๋ก ์ถ๊ฐํ ์ ์๋๋ฐ, ์๋ฌด๋๋ ํต์งธ๋ก Spot์ ๋์ฐ๋๊ฑด ์ข ์ํํ ๊ตฌ์ฑ์ด๋ค๋ณด๋
์ด๋ฐ์์ผ๋ก ์์ด์ ์ฐ๋๊ฒ ์ข๋ค. ๊ฐ์ค์น๊ฐ ๋์์๋ก ํผ์ผํธ๊ฐ ๋์์ง๋ ๊ฒ์ด๋ค.
์ด๋ฌ๋ฉด ์ธ์คํด์ค๊ฐ 2๊ฐ ํ์ํ ๋, ํ๋๋ Spot, ํ๋๋ ๊ธฐ๋ณธ์ผ๋ก ๋์์ ํน์๋ผ๋ SPOT์ด ์ฃฝ์ด๋ ์ ๋ถ ๋ค ์ฃฝ์ง๋ ์๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ SPOT์ด ๊ฐ์ ๋ก ์ฃฝ๋๋ผ๋, ECS๊ฐ ๊ทธ ๋น์๋ฆฌ๋ฅผ ๊ธฐ๋ณธ Fargate๋ก ๋ค์ ํ๋ก๋น์ ๋ํด์ค ๊ฒ์ด๋ค.
์๋น์ค๋ฅผ ์์ฑํ ๋๋ ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ๊ฐ์ ๋ฐ๋ฅด๋๋ก ํ๋ค.

์ด๋ฏธ์ง๋ ๊ทธ๋ฅ nginx ๊ฐ๋ค์ผ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์คํฌ๋ 2๊ฐ๋ง ๋์ ๋ค.
๊ฐ์ค์น๋ฅผ 1:1๋ก ์ค์ ํ์ผ๋, ํน๋ณํ ์ํฉ์ด ์๋๋ผ๋ฉด
ํ๋๋ SPOT
ํ๋๋ ๊ธฐ๋ณธ์ผ๋ก ๋ฌ๋ค.
์๋ฆผ๋ฐ๊ธฐ
๊ทผ๋ฐ ๋ญ ECS ์ค์ผ์ผ๋ง์ผ๋ก ์ด๋ป๊ฒ ํฐ์ง๋ ์ํฉ์ ๋ฉดํผํ ์๋ ์๋ค๊ณ ํด๋, ํฐ์ก์๋ ๋์ฒ๋ฅผ ํ ์๋ ์์ด์ผ ํ๋ค.
๋คํํ๋ AWS๋ ์คํ์ ํฐ๋จ๋ฆฌ๊ธฐ ์ ์ ํฐ๋จ๋ฆด๊ฑฐ๋ผ๊ณ ์๋ฆผ์ ๋ณด๋ด์ค๋ค.
์ด๋ฐ์์ผ๋ก ๋ง์ด๋ค.
{
"version": "0",
"id": "a99d3f53-4a7c-4153-a1a5-48957fc83b8f",
"detail-type": "ECS Task State Change",
"source": "aws.ecs",
"account": "1111222233334444",
"resources": [
"arn:aws:ecs:ap-southeast-2:1111222233334444:task/4be29e5b-b05c-42a2-a596-be62090eea9b"
],
"detail": {
"clusterArn": "arn:aws:ecs:ap-southeast-2:1111222233334444:cluster/default",
"createdAt": "2022-02-25T10:13:08.455Z",
"desiredStatus": "STOPPED",
"lastStatus": "RUNNING",
"stoppedReason": "Your Spot Task was interrupted.",
"stopCode": "SpotInterruption",
"taskArn": "arn:aws:ecs:ap-southeast-2:1111222233334444:task/4be29e5b-b05c-42a2-a596-be62090eea9bEXAMPLE",
...
}
}
๊ทธ๋์ ์ ๊ฑธ ํธ๋ฆฌ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด eventbridge rule์ ๋ง๋ค์ด์

์ด๋ฒคํธ๋ฅผ ์ด๋ฐ์์ผ๋ก ๋ฃ์ด์ค๋ค.
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"stopCode": [
"SpotInterruption"
],
"clusterArn": [
"arn:aws:ecs:๋ฆฌ์ :๊ณ์ ๋ฒํธ:cluster/ํด๋ฌ์คํฐ๋ช
"
]
}
}
๊ทธ๋ฆฌ๊ณ ํ์์ ๋ฐ๋ผ SNS ๊ฐ์๊ฑธ ๋ถ์ฌ์ ์ด๋ฉ์ผ๋ก ํ์ธํ ์ ์๊ฒ ํ๋ฉด ๋๋ค.
์ฐธ์กฐ
https://aws.amazon.com/ko/blogs/korea/aws-fargate-spot-now-generally-available/
https://repost.aws/knowledge-center/fargate-spot-termination-notice