FargateでService,RunTask,Cronを運用する/fargate-service-runtask-cron-operation-tips

 FargateでService,RunTask,Cronを運用する/fargate-service-runtask-cron-operation-tips

9531f234b83ebdc2e656b4ad3f36006e?s=128

Shohei Koyama

June 24, 2020
Tweet

Transcript

  1. @sion_cojp 'BSHBUFͰ4FSWJDF 3VO5BTL $SPOΛӡ༻͢Δ 4IPIFJ,PZBNB

  2. 自己紹介 Shohei Koyama / @sion_cojp Timee, Inc. SRE,DRE,ίʔϙϨʔτΤϯδχΞ ݩϓϩήʔϚʔͰΞδΞνϟϯϐΦϯ GetWildۦಈ։ൃ

  3.   λΠϛʔ ͙͢ಇ͚͙͓͕ͯۚ͢΋ Β͑Δ
 εΩϚόΠτΞϓϦ

  4. 目次 ͳͥk8s͡Όͳͯ͘ECS͔ʁ Service, RunTask, Cronͱ͸ʁ ΞʔΩςΫνϟ ࣮ࡍͷӡ༻ςΫχοΫ ؅ཧํ๏ ڞ௨Խ Deploy

    ϝϯςφϯε ϩΪϯά ϞχλϦϯά
  5. なぜk8sじゃなくてECSか? ECSʢFargateʣͰे෼ k8sΛ΍ΔΑΓɺSRE͕αʔόαΠυͷαϙʔτ΍৭Μͳ ͜ͱ΍ͬͨ΄͏͕ελʔτΞοϓతʹخ͍͠ FargateͩͱΫϥελ؅ཧ΋ෆཁͰخ͍͠ vs

  6. Service,RunTask,Cronとは? Service...αʔόʔ RunTask…೚ҙͷλΠϛϯάͰ࣮ߦ Cron…ఆظ࣮ߦʢcloudwatch eventsͰ ࢦఆͨ࣌ؒ͠ʹRunTaskΛ࣮ߦʣ

  7. Railsで例えるとこんな感じ Service...rails s RunTask...rake db:migrate Cron...ఆظ࣮ߦ͍ͨ͠rake task

  8. ServiceとRunTaskについて Fargateʹ͸λεΫ։࢝ํ๏͕̎ͭ͋Γ·͢ ͦΕ͕ServiceͱRunTaskͰ͢ https://docs.aws.amazon.com/cli/latest/reference/ecs/index.html#cli-aws-ecs console上より

  9. ͦΕͧΕͷΞʔΩςΫνϟ

  10. Service

  11. Cron

  12. RunTask

  13. ࣮ࡍͷӡ༻ςΫχοΫ

  14. 管理方法: terraformの話 terraform
 ࢖͏ج൫Λڞ௨Խ γϯϓϧͳઃܭ εέʔϧΛ؆୯ʹग़དྷΔΑ͏ʹ͢Δ Serviceでは、 大きなスパイクを予測してるときはこんな感じでコンテナを増します

  15. 管理方法: 図の話 ΞʔΩςΫνϟਤͷอଘ ৽͘͠ࢀೖ͢Δਓ͕ཧղ͠΍͍͢ͷͰਤ͸ඞͣ࡞Γ·͠ΐ͏ drawioͰॻ͍ͯ .drawio .pngϑΝΠϧΛอଘͯ͠·͢ ΞʔΩςΫνϟ͸͍͍ײ͡ʹվम͞Ε͍ͯ͘΋ͷͳͷͰɺ
 ඞཁͳͱ͖मਖ਼͠·͢

  16. 管理方法: チュートリアルの話 νϡʔτϦΞϧ sandboxͰ୭΋͕ؾܰʹ࡞੒ग़དྷΔΑ͏ʹͳͬͯ·͢ ࣮ࡍίʔυݟΔΑΓಈ͔ͯ͠ίϯιʔϧΛϙνϙν
 ͷํ͕ཧղ͠΍͍ͨ͢Ί 1つ15分くらいで出来上がります チュートリアルで使うコマンド類は Docker化 or

    バイナリダウンロード terraformはmake経由で バイナリがダウンロードされるので makeさえ入ってればすぐ叩けます
  17. 共通化 terraform moduleͰڞ௨Խ มԽ͕ଟ͍ͱ͜Ζ͸ผͷιϦϡʔγϣϯΛߟ͑·͢
 ʢྫ͑͹TaskDefinitionͷ࡞੒ͳͲʣ
 ʢฐࣾͩͱιϑτ΢ΣΞΛ࡞੒ͯ͠ղܾ͢Δ͜ͱ͕ଟ͍ʣ λΠϛʔ͸ڞ௨Խ͕ਐΜͰ͓Γɺ
 ৽نαʔϏε௥Ճ͢ΔࡍͰ΋Dockerfile͑͋͞Ε͹
 ͙͢ग़དྷ·͢

  18. 共通化: Serviceの場合 ALBとfargateは切り離したmoduleで管理してる またclusterは変更が発生しない + 共通なので切り離し

  19. 共通化: 実際のcronのterraform clusterͱtaskͷ̎ͭͷmoduleߏ੒ Լه͕clusterͷίʔυ RunTaskもほぼ同じmoduleを扱ってます Cloudwatch eventsがあるかないかなので。

  20. ͪ͜Β͕λεΫ௥Ճ༻ جຊతʹmodule͚ͩͰ ࣄ଍ΓΔ͕ɺ IAMͷ௥Ճ͕͋Ε͹ ը૾ͷ௨Γઃఆ 共通化: 実際のcronのterraform

  21. Deploy ecs-deployͱ͍͏಺੡πʔϧʢGoʣ TaskDefinitionͷupdate Serviceͷupdate RunTaskͷ࣮ߦ Cronͷ࣌ؒมߋ ϩΪϯάͷͨΊɺfluent-bitΛαΠυΧʔͰཱͯΔ

  22. Deploy αʔϏεଆͰ༻ҙ͞ΕͨMakefileʹecs-deployΛ࢖ͬͨ
 deployϩδοΫ͕ॻ͔Εͯ·͢ ݖݶ͑͋͞Ε͹ϩʔΧϧͰ࣮ߦՄೳͳMakefile
 ͦΕΛslack-deployͱ͍͏αʔόʢGoʣΛܦ༝ͯ͠ɺ
 slackܦ༝Ͱ࣮ߦͯ͠·͢

  23. メンテナンス slack-deploy͔ΒϝϯςφϯεϞʔυʹͰ͖·͢ʢલड़ͷπʔϧʣ Service ALBʹର̎͠छྨͷlistenerϧʔϧΛ੾Γସ͑ͯΔ͚ͩ ECSʹશ෦ߦ͘ϧʔϧ ϝϯς༻ͷಛఆͷhttp response + 503Λฦ͢ϧʔϧ Cron

    ࢦఆͨ͠΋ͷ or શͯΛdisable/enableͰ͖·͢
  24. ロギング Fargateʢfirelens) → fluent-bit → datadog logs → firehose →s3

    moduleઃܭΛͩ͜Θͬͨ݁Ռɺs3΋ྑ͍ײ͡ʹอଘ͞Ε·͢
  25. ロギング ecs-deployଆͰ؀ڥม਺Λ͍͍ײ͡ʹηοτͯ͘͠Ε·͢ datadog logsͷλάʹΑΔݕࡧੑ޲্ https://hub.docker.com/r/sioncojp/fluent-bit-datadog-firehose

  26. モニタリング: Service ecs-update-notify ʢGoͷπʔϧʣ λεΫ͕׬શʹ੾ΓସΘͬͨ࣌ͷ௨஌ λεΫ͕੾ΓସΘΒͳ͔ͬͨ࣌ͷΤϥʔ௨஌ https://github.com/sioncojp/ecs-update-notify

  27. モニタリング: Service ͦΕҎ֎͸DatadogͰ؂ࢹ

  28. モニタリング: RunTask, Cron clusterʹඥ͍ͮͨlambdaͰɺexit 0Ҏ֎ͷ৔߹͸ࢦఆͨ͠
 Slack Webhook URLʹ௨஌

  29. モニタリング: RunTask, Cron lambda͔Βdatadogʹ࣮ߦʹ͔͔ͬͨ࣌ؒʢελʔτ ~ ετοϓʣ
 Λඈ͹ͯ͠·͢

  30. 最後に Fargate͸ͱͯ΋ศརͰɺ
 λΠϛʔͰ͸ͱͯ΋ศརʹ༗ޮ׆༻ͯ͠·͢ʂ Ͱ͕͢ɺ࣮ࡍʹޮ཰Α͘ӡ༻͢Δͷ͸େมͰ͢ɻ ͦͷͨΊͷઃܭ͸ͱͯ΋ηϯε͕͍Γ·͢͠ɺ ղܾ͢ΔͨΊͷιϑτ΢ΣΞ։ൃೳྗ΋େࣄͰ͢ɻ

  31. None