$30 off During Our Annual Pro Sale. View Details »

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

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

Shohei Koyama

June 24, 2020
Tweet

More Decks by Shohei Koyama

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide



  3. λΠϛʔ
    ͙͢ಇ͚͙͓͕ͯۚ͢΋
    Β͑Δ

    εΩϚόΠτΞϓϦ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. Service

    View Slide

  11. Cron

    View Slide

  12. RunTask

    View Slide

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

    View Slide

  14. 管理方法: terraformの話
    terraform

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

    View Slide

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

    ඞཁͳͱ͖मਖ਼͠·͢

    View Slide

  16. 管理方法: チュートリアルの話
    νϡʔτϦΞϧ
    sandboxͰ୭΋͕ؾܰʹ࡞੒ग़དྷΔΑ͏ʹͳͬͯ·͢
    ࣮ࡍίʔυݟΔΑΓಈ͔ͯ͠ίϯιʔϧΛϙνϙν

    ͷํ͕ཧղ͠΍͍ͨ͢Ί
    1つ15分くらいで出来上がります
    チュートリアルで使うコマンド類は
    Docker化 or バイナリダウンロード
    terraformはmake経由で
    バイナリがダウンロードされるので
    makeさえ入ってればすぐ叩けます

    View Slide

  17. 共通化
    terraform moduleͰڞ௨Խ
    มԽ͕ଟ͍ͱ͜Ζ͸ผͷιϦϡʔγϣϯΛߟ͑·͢

    ʢྫ͑͹TaskDefinitionͷ࡞੒ͳͲʣ

    ʢฐࣾͩͱιϑτ΢ΣΞΛ࡞੒ͯ͠ղܾ͢Δ͜ͱ͕ଟ͍ʣ
    λΠϛʔ͸ڞ௨Խ͕ਐΜͰ͓Γɺ

    ৽نαʔϏε௥Ճ͢ΔࡍͰ΋Dockerfile͑͋͞Ε͹

    ͙͢ग़དྷ·͢

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. Deploy
    αʔϏεଆͰ༻ҙ͞ΕͨMakefileʹecs-deployΛ࢖ͬͨ

    deployϩδοΫ͕ॻ͔Εͯ·͢
    ݖݶ͑͋͞Ε͹ϩʔΧϧͰ࣮ߦՄೳͳMakefile

    ͦΕΛslack-deployͱ͍͏αʔόʢGoʣΛܦ༝ͯ͠ɺ

    slackܦ༝Ͱ࣮ߦͯ͠·͢

    View Slide

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

    View Slide

  24. ロギング
    Fargateʢfirelens) → fluent-bit
    → datadog logs
    → firehose →s3
    moduleઃܭΛͩ͜Θͬͨ݁Ռɺs3΋ྑ͍ײ͡ʹอଘ͞Ε·͢

    View Slide

  25. ロギング
    ecs-deployଆͰ؀ڥม਺Λ͍͍ײ͡ʹηοτͯ͘͠Ε·͢
    datadog logsͷλάʹΑΔݕࡧੑ޲্
    https://hub.docker.com/r/sioncojp/fluent-bit-datadog-firehose

    View Slide

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

    View Slide

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

    View Slide

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

    Slack Webhook URLʹ௨஌

    View Slide

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

    Λඈ͹ͯ͠·͢

    View Slide

  30. 最後に
    Fargate͸ͱͯ΋ศརͰɺ

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

    View Slide

  31. View Slide