https://jawsug-container.connpass.com/event/177732/
@sion_cojp'BSHBUFͰ4FSWJDF 3VO5BTL $SPOΛӡ༻͢Δ4IPIFJ,PZBNB
View Slide
自己紹介Shohei Koyama / @sion_cojpTimee, Inc.SRE,DRE,ίʔϙϨʔτΤϯδχΞݩϓϩήʔϚʔͰΞδΞνϟϯϐΦϯGetWildۦಈ։ൃ
λΠϛʔ͙͢ಇ͚͙͓͕ͯۚ͢Β͑Δ εΩϚόΠτΞϓϦ
目次ͳͥk8s͡Όͳͯ͘ECS͔ʁService, RunTask, CronͱʁΞʔΩςΫνϟ࣮ࡍͷӡ༻ςΫχοΫཧํ๏ڞ௨ԽDeployϝϯςφϯεϩΪϯάϞχλϦϯά
なぜk8sじゃなくてECSか?ECSʢFargateʣͰेk8sΛΔΑΓɺSRE͕αʔόαΠυͷαϙʔτ৭Μͳ͜ͱͬͨ΄͏͕ελʔτΞοϓతʹخ͍͠FargateͩͱΫϥελཧෆཁͰخ͍͠vs
Service,RunTask,Cronとは?Service...αʔόʔRunTask…ҙͷλΠϛϯάͰ࣮ߦCron…ఆظ࣮ߦʢcloudwatch eventsͰࢦఆͨ࣌ؒ͠ʹRunTaskΛ࣮ߦʣ
Railsで例えるとこんな感じService...rails sRunTask...rake db:migrateCron...ఆظ࣮ߦ͍ͨ͠rake task
ServiceとRunTaskについてFargateʹλεΫ։࢝ํ๏͕̎ͭ͋Γ·ͦ͢Ε͕ServiceͱRunTaskͰ͢https://docs.aws.amazon.com/cli/latest/reference/ecs/index.html#cli-aws-ecsconsole上より
ͦΕͧΕͷΞʔΩςΫνϟ
Service
Cron
RunTask
࣮ࡍͷӡ༻ςΫχοΫ
管理方法: terraformの話terraform ͏ج൫Λڞ௨ԽγϯϓϧͳઃܭεέʔϧΛ؆୯ʹग़དྷΔΑ͏ʹ͢ΔServiceでは、大きなスパイクを予測してるときはこんな感じでコンテナを増します
管理方法: 図の話ΞʔΩςΫνϟਤͷอଘ৽͘͠ࢀೖ͢Δਓ͕ཧղ͍͢͠ͷͰਤඞͣ࡞Γ·͠ΐ͏drawioͰॻ͍ͯ .drawio .pngϑΝΠϧΛอଘͯ͠·͢ΞʔΩςΫνϟ͍͍ײ͡ʹվम͞Ε͍ͯ͘ͷͳͷͰɺ ඞཁͳͱ͖मਖ਼͠·͢
管理方法: チュートリアルの話νϡʔτϦΞϧsandboxͰ୭͕ؾܰʹ࡞ग़དྷΔΑ͏ʹͳͬͯ·࣮͢ࡍίʔυݟΔΑΓಈ͔ͯ͠ίϯιʔϧΛϙνϙν ͷํ͕ཧղ͍ͨ͢͠Ί1つ15分くらいで出来上がりますチュートリアルで使うコマンド類はDocker化 or バイナリダウンロードterraformはmake経由でバイナリがダウンロードされるのでmakeさえ入ってればすぐ叩けます
共通化terraform moduleͰڞ௨ԽมԽ͕ଟ͍ͱ͜ΖผͷιϦϡʔγϣϯΛߟ͑·͢ ʢྫ͑TaskDefinitionͷ࡞ͳͲʣ ʢฐࣾͩͱιϑτΣΞΛ࡞ͯ͠ղܾ͢Δ͜ͱ͕ଟ͍ʣλΠϛʔڞ௨Խ͕ਐΜͰ͓Γɺ ৽نαʔϏεՃ͢ΔࡍͰDockerfile͑͋͞Ε ͙͢ग़དྷ·͢
共通化: Serviceの場合ALBとfargateは切り離したmoduleで管理してるまたclusterは変更が発生しない + 共通なので切り離し
共通化: 実際のcronのterraformclusterͱtaskͷ̎ͭͷmoduleߏԼه͕clusterͷίʔυRunTaskもほぼ同じmoduleを扱ってますCloudwatch eventsがあるかないかなので。
ͪ͜Β͕λεΫՃ༻جຊతʹmodule͚ͩͰࣄΓΔ͕ɺIAMͷՃ͕͋Εը૾ͷ௨Γઃఆ共通化: 実際のcronのterraform
Deployecs-deployͱ͍͏πʔϧʢGoʣTaskDefinitionͷupdateServiceͷupdateRunTaskͷ࣮ߦCronͷ࣌ؒมߋϩΪϯάͷͨΊɺfluent-bitΛαΠυΧʔͰཱͯΔ
DeployαʔϏεଆͰ༻ҙ͞ΕͨMakefileʹecs-deployΛͬͨ deployϩδοΫ͕ॻ͔Εͯ·͢ݖݶ͑͋͞ΕϩʔΧϧͰ࣮ߦՄೳͳMakefile ͦΕΛslack-deployͱ͍͏αʔόʢGoʣΛܦ༝ͯ͠ɺ slackܦ༝Ͱ࣮ߦͯ͠·͢
メンテナンスslack-deploy͔ΒϝϯςφϯεϞʔυʹͰ͖·͢ʢલड़ͷπʔϧʣServiceALBʹର̎͠छྨͷlistenerϧʔϧΛΓସ͑ͯΔ͚ͩECSʹશ෦ߦ͘ϧʔϧϝϯς༻ͷಛఆͷhttp response + 503Λฦ͢ϧʔϧCronࢦఆͨ͠ͷ or શͯΛdisable/enableͰ͖·͢
ロギングFargateʢfirelens) → fluent-bit→ datadog logs→ firehose →s3moduleઃܭΛͩ͜Θͬͨ݁Ռɺs3ྑ͍ײ͡ʹอଘ͞Ε·͢
ロギングecs-deployଆͰڥมΛ͍͍ײ͡ʹηοτͯ͘͠Ε·͢datadog logsͷλάʹΑΔݕࡧੑ্https://hub.docker.com/r/sioncojp/fluent-bit-datadog-firehose
モニタリング: Serviceecs-update-notify ʢGoͷπʔϧʣλεΫ͕શʹΓସΘͬͨ࣌ͷ௨λεΫ͕ΓସΘΒͳ͔ͬͨ࣌ͷΤϥʔ௨https://github.com/sioncojp/ecs-update-notify
モニタリング: ServiceͦΕҎ֎DatadogͰࢹ
モニタリング: RunTask, Cronclusterʹඥ͍ͮͨlambdaͰɺexit 0Ҏ֎ͷ߹ࢦఆͨ͠ Slack Webhook URLʹ௨
モニタリング: RunTask, Cronlambda͔Βdatadogʹ࣮ߦʹ͔͔ͬͨ࣌ؒʢελʔτ ~ ετοϓʣ Λඈͯ͠·͢
最後にFargateͱͯศརͰɺ λΠϛʔͰͱͯศརʹ༗ޮ׆༻ͯ͠·͢ʂͰ͕͢ɺ࣮ࡍʹޮΑ͘ӡ༻͢ΔͷେมͰ͢ɻͦͷͨΊͷઃܭͱͯηϯε͕͍Γ·͢͠ɺղܾ͢ΔͨΊͷιϑτΣΞ։ൃೳྗେࣄͰ͢ɻ