Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ECS×スポットインスタンス活用の秘訣

 ECS×スポットインスタンス活用の秘訣

2020/06/10開催された「【オンラインセミナー】「コンテナ × スポットインスタンス」 活用セミナー」(https://aws-seminar.smktg.jp/public/seminar/view/2212)にて発表した資料です

Avatar for NAVITIME JAPAN

NAVITIME JAPAN

June 10, 2020
Tweet

More Decks by NAVITIME JAPAN

Other Decks in Technology

Transcript

  1. ձࣾ঺հ • גࣜձࣾ φϏλΠϜδϟύϯ • ઃཱ 2000 ೥ 3 ݄

    1 ೔ • ۀ຿಺༰ • φϏήʔγϣϯαΠτɾΞϓϦͷӡӦ։ൃ • ௨৴ΧʔφϏήʔγϣϯࣄۀ • ܦ࿏୳ࡧΤϯδϯͷϥΠηϯεࣄۀ ͳͲ • ैۀһ਺ ໿ 540 ໊ (ΤϯδχΞ 80% Ҏ্ʣ
  2. αʔϏε঺հ NAVITIME ৐׵NAVITIME όεNAVITIME ͜ΈΕΆ ެڞަ௨ υϥΠϒ ΧʔφϏλΠϜ υϥΠϒαϙʔλʔ τϥοΫΧʔφϏ

    πʔϦϯά πʔϦϯάαϙʔλʔ ࣗసंNAVITIME Travel/Inbound JapanTravel NAVITIME Transit NAVITIME Travel Plat ϔϧεέΞ ALKOO PC/SP Web όεΧʔφϏ
  3. AWSҠߦ 2. AWSҠߦޙͷߏ੒Λݕ౼ • ݱঢ়ͷΞϓϦέʔγϣϯߏ੒ͷ··ར༻ • VM Import/ExportΛར༻ • CLB+EC2ߏ੒

    • ΞϓϦέʔγϣϯΛίϯςφԽ͠ECSΛར༻ • ׬શʹ৽نߏங • ALB+ECSߏ੒
  4. AWSҠߦ 2. AWSҠߦޙͷߏ੒Λݕ౼ • ݱঢ়ͷΞϓϦέʔγϣϯߏ੒ͷ··ར༻ • VM Import/ExportΛར༻ • CLB+EC2ߏ੒

    • ΞϓϦέʔγϣϯΛίϯςφԽ͠ECSΛར༻ • ׬શʹ৽نߏங • ALB+ECSߏ੒ ɾҠߦίετ͸௿͍ ɾΦϯϓϨͰͷ՝୊͸ͦͷ··Ҡߦ ɾECS͕Α͠ͳʹ΍ͬͯ͘ΕΔ ɾଞαʔϏεͷAWSҠߦָ͕ʹͳΔ ɾֶशίετ͕ߴ͍
  5. AWSҠߦ 2. AWSҠߦޙͷߏ੒Λݕ౼ • ݱঢ়ͷΞϓϦέʔγϣϯߏ੒ͷ··ར༻ • VM Import/ExportΛར༻ • CLB+EC2ߏ੒

    • ΞϓϦέʔγϣϯΛίϯςφԽ͠ECSΛར༻ • ׬શʹ৽نߏங • ALB+ECSߏ੒ ɾҠߦίετ͸௿͍ ɾΦϯϓϨͰͷ՝୊͸ͦͷ··Ҡߦ ɾECS͕Α͠ͳʹ΍ͬͯ͘ΕΔ ɾଞαʔϏεͷAWSҠߦָ͕ʹͳΔ ɾֶशίετ͕ߴ͍
  6. AWSҠߦ 3. ίϯςφͷߏங • ίϯςφԽͨ͜͠ͱͰεϧʔϓοτ͕Լ͕Βͳ͍͔ʁ • JMeterΛ༻͍ͯϩϯάϥϯςετ • ݱঢ়ͷΞΫηεϩάΛ༻͍ͨෛՙࢼݧ •

    Ϩεϙϯεʹࠩ෼͕ͳ͍͔ϦάϨογϣϯςετ • ࠓ͸Locustͱ͍͏πʔϧΛ࢖ͬͯෛՙࢼݧͱϦάϨογϣϯςετΛ ͍ͯ͠·͢(Fargate Spot+CloudMap)
  7. AWSҠߦ Ҡߦ׬ྃޙ • ΞϓϦέʔγϣϯͷΤϥʔ͕සൃ • ௨৴தʹίϯςφ͕མͪͯΤϥʔ͕ൃੜ • DBͱͷίωΫγϣϯ΍ηογϣϯͳͲΞϓϦέʔγϣϯͷվम • Circuit

    Breakerͷಋೖ • ALBͷΤϥʔ͕ଟൃ • Πϯελϯε͕ϝϯςφϯε౳Ͱγϟοτμ΢ϯ͞ΕΔͱ͖ʹυϨΠχϯ άॲཧ͕͏·͘͞Εͳ͍ • ASGͷϥΠϑαΠΫϧϑοΫͱLambdaΛ༻͍ͯυϨΠχϯάΛ࣮ࢪ
  8. AWSҠߦޙͷར༻අ༻/ΞΫηεਪҠ 0% 20% 40% 60% 80% 100% 120% 140% コスト⽐率

    アクセス⽐率 AWSҠߦ௚ޙ=100% վम/੾Γ໭͠ͳͲͷରԠ
  9. 0% 20% 40% 60% 80% 100% 120% 140% コスト⽐率 アクセス⽐率

    AWSҠߦޙͷར༻අ༻/ΞΫηεਪҠ εϙοτར༻։࢝ Φʔτεέʔϧ৚݅ௐ੔ ϛοΫεΠϯελϯεάϧʔϓ ػೳ׆༻ RIߪೖ
  10. 0% 20% 40% 60% 80% 100% 120% 140% コスト⽐率 アクセス⽐率

    AWSҠߦޙͷར༻අ༻/ΞΫηεਪҠ εϙοτར༻։࢝ Φʔτεέʔϧ৚݅ௐ੔ RIߪೖ ϛοΫεΠϯελϯεάϧʔϓ ػೳ׆༻
  11. EC2ྉۚ • ྫʣm5.large(౦ژϦʔδϣϯ) ※Ձ֨͸2020/05࣌఺ On-Demand Instances $0.124/h Spot Instances $0.035/h

    Reserved Instances (1೥શֹલ෷͍) $0.073/h Savings Plans (1೥શֹલ෷͍) $0.073/h Scheduled Reserved Instances
  12. EC2ྉۚ • ྫʣm5.large(౦ژϦʔδϣϯ) ※Ձ֨͸2020/05࣌఺ On-Demand Instances $0.124/h Spot Instances $0.035/h

    Reserved Instances (1೥શֹલ෷͍) $0.073/h Savings Plans (1೥શֹલ෷͍) $0.073/h Scheduled Reserved Instances 41%OFF 71%OFF 41%OFF
  13. εϙοτΠϯελϯε • େ෯ͳ௿ίετʹҾ͖׵͑ϦεΫ͋Γ
 • ೖࡳՁ֨ΑΓࢢ৔Ձ͕֨Լճ͍ͬͯΔؒͷΈར༻Մೳ • ࢢ৔Ձ͕֨ೖࡳՁ֨Λ্ճΔͱγϟοτμ΢ϯ͞ΕΔ • AWSଆͷ༨৒ΠϯελϯεͰߏ੒ •

    ىಈதͰ΋༨৒Πϯελϯε͕ͳ͘ͳΔͱγϟοτμ΢ϯ͞ΕΔ • ϦεΫΛ൐͏͕ɺՄೳͳݶΓར༻͍ͨ͠ • ΦϯσϚϯυΠϯελϯε͸ͳΔ΂͘ར༻͠ͳ͍ • ΋͠ར༻͢ΔͳΒϦβʔϒυΠϯελϯεΛߪೖ͢Δ
  14. εϙοτΠϯελϯε • ίϯςφ • ϔϧενΣοΫ͕ࣦഊͨ͠ΒམͪΔ • མͪͯ΋ECS͕ࣗಈͰίϯςφΛىಈͯ͘͠ΕΔ • ಥવམͪͯ΋໰୊ͳ͍Α͏ʹߏ੒ʢϩά΍ΞϓϦέʔγϣϯʣ •

    εϙοτΠϯελϯε • AWSଆͷ౎߹Ͱγϟοτμ΢ϯ͞ΕΔ • མͪͯ΋AutoScalingGroupΛઃఆ͓͚ͯ͠͹ࣗಈͰىಈͯ͘͠ΕΔ
  15. εϙοτΠϯελϯε • ίϯςφ • ϔϧενΣοΫ͕ࣦഊͨ͠ΒམͪΔ • མͪͯ΋ECS͕ࣗಈͰίϯςφΛىಈͯ͘͠ΕΔ • ಥવམͪͯ΋໰୊ͳ͍Α͏ʹߏ੒ʢϩά΍ΞϓϦέʔγϣϯʣ •

    εϙοτΠϯελϯε • AWSଆͷ౎߹Ͱγϟοτμ΢ϯ͞ΕΔ • མͪͯ΋AutoScalingGroupΛઃఆ͓͚ͯ͠͹ࣗಈͰىಈͯ͘͠ΕΔ ίϯςφͱεϙοτΠϯελϯεͷ਌࿨ੑ͸ߴ͍ʂ
  16. εϙοτΠϯελϯε • ίϯςφ • ϔϧενΣοΫ͕ࣦഊͨ͠ΒམͪΔ • མͪͯ΋ECS͕ࣗಈͰίϯςφΛىಈͯ͘͠ΕΔ • ಥવམͪͯ΋໰୊ͳ͍Α͏ʹߏ੒ʢϩά΍ΞϓϦέʔγϣϯʣ •

    εϙοτΠϯελϯε • AWSଆͷ౎߹Ͱγϟοτμ΢ϯ͞ΕΔ • མͪͯ΋AutoScalingGroupΛઃఆ͓͚ͯ͠͹ࣗಈͰىಈͯ͘͠ΕΔ ίϯςφͱεϙοτΠϯελϯεͷ਌࿨ੑ͸ߴ͍ʂ
  17. ϛοΫεΠϯελϯεάϧʔϓػೳ • Α͘ݕ౼͞ΕΔΠϯελϯελΠϓ • ಉ͡ίΞ਺ͷ΋ͷΛෳ਺ੈ୅ฒ΂Δ • ྫʣm5.large, c5.large, r5.large, m4.large,

    c4.large, r4.large
 ※ϝϞϦαΠζ͸࠷௿ݶඞཁͳαΠζͰܾΊΔ • ͋·Γ࢖ΘΕͯͳͦ͞͏ͳΠϯελϯελΠϓ΋બͿ • ྫʣm5.large, m5d.large, r5.large, m4.large, r4.large
 φϏλΠϜͷΞϓϦέʔγϣϯ͸ɺm5ͱm5dͰύϑΥʔϚϯεʹେ͖ͳ ࠩҟ͸Ͱͳ͍ͨΊੵۃతʹར༻
  18. ϛοΫεΠϯελϯεάϧʔϓػೳ ࢀߟ ɹuserdata಺Ͱͷॲཧ mkdir $DOCKER_MOUNT_DIR instance_type=$(curl -H "X-aws-ec2-metadata-token: $(curl -X

    PUT -H ‘X-aws-ec2- metadata-token-ttl-seconds: 10’)" -v http://169.254.169.254/latest/meta-data/instance-type) if [[ "${!instance_type}" =~ ^(c5d|m5d|z1d)\.[0-9]{1,}xlarge$ ]]; then #z1d,c5d,m5dͷ৔߹͸ϩʔΧϧssdΛར༻ mkfs.ext4 -I 512 /dev/nvme2n1 mount /dev/nvme2n1 $DOCKER_MOUNT_DIR echo "/dev/nvme2n1 $DOCKER_MOUNT_DIR ext4 defaults 0 0" >>/etc/fstab fi
  19. 0% 20% 40% 60% 80% 100% 120% 140% コスト⽐率 アクセス⽐率

    ݁Ռ ϛοΫεΠϯελϯεάϧʔϓ ػೳ׆༻
  20. 0% 20% 40% 60% 80% 100% 120% 140% コスト⽐率 アクセス⽐率

    ݁Ռ ΞΫηε਺૿Ճʹର͠ɺίετ͸ݮগ܏޲ ϛοΫεΠϯελϯεάϧʔϓ ػೳ׆༻
  21. ݁Ռ • εϙοτΠϯελϯεΛར༻࢝͠Ί௚ޙɺ࠶౓ALBͰΤϥʔ͕૿Ճ • υϨΠχϯάॲཧ͕͏·͍͍ͬͯ͘ͳ͍ • εϙοτΠϯελϯε͕γϟοτμ΢ϯ͞ΕΔࡍʹϥΠϑαΠΫϧϑοΫ͕ ൃՐͤͣʢϥΠϑαΠΫϧϑοΫ͕ൃՐ͢Δࡍʹ͸͢Ͱʹγϟοτμ΢ϯ͞ Ε͍ͯΔʣ •

    2෼લʹड͚औΕΔεϙοτΠϯελϯεͷγϟοτμ΢ϯΠϕϯτΛ CloudWatchEventͰड͚औͬͯυϨΠχϯάॲཧΛ࣮ࢪ • ͨͩ͠ɺݱঢ়͸AWSଆͰ࣮ߦͯ͘͠ΕΔ echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config