[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