Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Service

Slide 11

Slide 11 text

Cron

Slide 12

Slide 12 text

RunTask

Slide 13

Slide 13 text

࣮ࡍͷӡ༻ςΫχοΫ

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

管理方法: チュートリアルの話 νϡʔτϦΞϧ sandboxͰ୭΋͕ؾܰʹ࡞੒ग़དྷΔΑ͏ʹͳͬͯ·͢ ࣮ࡍίʔυݟΔΑΓಈ͔ͯ͠ίϯιʔϧΛϙνϙν
 ͷํ͕ཧղ͠΍͍ͨ͢Ί 1つ15分くらいで出来上がります チュートリアルで使うコマンド類は Docker化 or バイナリダウンロード terraformはmake経由で バイナリがダウンロードされるので makeさえ入ってればすぐ叩けます

Slide 17

Slide 17 text

共通化 terraform moduleͰڞ௨Խ มԽ͕ଟ͍ͱ͜Ζ͸ผͷιϦϡʔγϣϯΛߟ͑·͢
 ʢྫ͑͹TaskDefinitionͷ࡞੒ͳͲʣ
 ʢฐࣾͩͱιϑτ΢ΣΞΛ࡞੒ͯ͠ղܾ͢Δ͜ͱ͕ଟ͍ʣ λΠϛʔ͸ڞ௨Խ͕ਐΜͰ͓Γɺ
 ৽نαʔϏε௥Ճ͢ΔࡍͰ΋Dockerfile͑͋͞Ε͹
 ͙͢ग़དྷ·͢

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

No content