Share
Embed
MENTAをAWSに移行して振り返る(ECS/Fargate + Laravel編)
https://lancersrecruit.connpass.com/event/219434/
【SPACEMARKET×Lancers】シェアリングエコノミーを支えるインフラ/SREでのスライドとなります。
adachi.ryo
August 25, 2021
Transcript
41 slides
-
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ΞδΣϯμ ɾࣗݾհ ɾ3લͷγεςϜߏ/͘͞ΒͷΫϥυʹ͍ͭͯ(ۤ࿑) ɾ։ൃڥΛ࡞ΔϙΠϯτ ɾStg/ຊ൪ڥͷߏʹ͍ͭͯ ɾCircleCIʹΑΔίϯςφσϓϩΠ ɾECS Scheduled
TasksʹΑΔόον࣮ʹ͍ͭͯ ɾϩά/ίϯςφࢹʹ͍ͭͯ ɾຊ൪DBϚεΩϯάࣗಈԽʹ͍ͭͯ ɾECSΦʔτεέʔϧʹ͍ͭͯ ɾੳج൫ͷհ(Digdag,Embulk,BigQuery,Redash) ɾҠߦલͷ՝ͱҠߦޙͷτϥϒϧ ɾ·ͱΊ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ࣗݾհ ɾ҆ୡ ྋ(adachin) ɾLancers SRE 2018/5~ ɾ@adachin0817 ɾRVIRUS0817
ɾblog.adachin.me ɾwiki.adachin.me ɾݸਓ։ൃ(famii) ɾOSS -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE 3લͷγεςϜߏ ɾ2018ϦϦʔεɹ ɾ෭ۀͰ͕ࣗαʔόʔอक͍ͯͨ͠ ɾ͘͞ΒͷΫϥυ ɾPHP 7.2 /
Laravel 5.5 ɹɾNginx / MariaDB /Redis / Ansible ɹɾSendGrid/Redash ɹɾࢹ/Mackerel ɹɾ΄ͱΜͲVPSతͳӡ༻ ɾ։ൃڥ ɹɾDocker ɾϦϦʔεํ๏ ɹɾSSHʹΑΔγΣϧεΫϦϓτ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE 3લͷγεςϜߏ(ۤ࿑) ɾσϓϩΠ͕͍͠ ɹɾγΣϧεΫϦϓτ͕ͩɺ΄΅खಈͰϦϦʔε ɾΞΫηεෛՙʹΑΔϨΠςϯγʔͷѱ͞ ɹɾϩʔυΞϕϨʔδϝϞϦʔ͕ΧπΧπ… ɾੑෛՙࢄͳͲ୲อ͍ͯ͠ͳ͍ঢ়ଶ
ɹɾ1Ͱࡹ͘ͷͱʹ͔͘͠ΜͲ͍…͕ϐʔΫ ɾͳΔ͘ίετΛ͑ͨΠϯϑϥڥ ɹɾStgͰςετ͍͚ͨ͠ͲεϖοΫ͕ΓͶ͑..! -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ։ൃڥΛ࡞ΔϙΠϯτ ɾຊ൪ڥͱಉͷߏΛ࠶ݱ ɾELB(Nginx)ίϯςφ(ϦόʔεϓϩΩγ) ɾApp(PHP7.2-alpine/Nginx) ɾMySQL 5.7 ɾSendGrid/phpMyAdmin/Redis ɾStripe/Selenium/node/Digdag(Embulk)
ɾWordPress(PHP7.3-alpine/Nginx) ɾ֤ΞϓϦέʔγϣϯͷىಈSupervisorͰཧ ɾcomposer installAppίϯςφͰϩάΠϯ࣌ʹ࣮ߦ ɹɾsupervisorctlͰΞϓϦΛrestart͢ΔΑ͏ʹ ɾM1 MacͰಈ࡞ݕূࡁΈ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE Stg/ຊ൪ڥͷߏʹ͍ͭͯ TerraformͰશϦιʔείʔυԽ ɾStagingڥۃྗίετΛ͑λεΫ1ͭ ɾࣾ༻ϥϯαʔζRProxyͰΞΫηε(phpMyAdmin,SendGrid,Digdag,Redash) ɾWordPressίϯςφʹΑΔϝσΟΞӡ༻ ɾphpMyAdminίϯςφʹΑΔσʔλग़͠ ɾΦʔτεέʔϧʹΑΔ࠷େ6ͷAppίϯςφͰӡ༻ ɾdevops/SSHίϯςφͷར༻Ͱaws
cli.MySQLͷૢ࡞ ɹɾݱࡏഇࢭ͕ͨ͠EC2ຊ൪DBϚεΩϯά༻ͷڥͱͯ͠ར༻ ɾDigdag/Embulk/BigQueryʹΑΔੳج൫ͷߏங ɾDBRDS AuroraʹҠߦ ɾElastiCacheʹΑΔϩάΠϯΩϟογϡԽ ɾը૾S3Խ ɾϩάCloudWatch Logs ɾόονECS Scheduled Tasks ɾ෦ࠪ(ϩάͷू) ɹɾAmazon Kinesis ɾAWS KMSʹΑΔ҉߸Խ ɾAWS WAFͰͷDDoSΞλοΫ੍ޚ ɾࢹDatadogͰίϯςφϦιʔεͱAPMͰͷΤϥʔݕ ɾຊ൪ڥΧφϦΞڥ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE SSH/࡞ۀ༻ίϯςφʮdevopsʯʹ͍ͭͯ ɾAppʹSSH͠ͳ͍ ɾSSH/࡞ۀ༻ίϯςφ(Appͱಉ) ɹɾdevopsͱ໋໊ ɾίϚϯυͰRDSଓ ɹɾdumprestore ɾaws
cliͷར༻ ɾSSMͷSession Manager ͋Δ͕ ɹɾखܰʹ౿Έ͔ΒSSHΛ͍ͨͨ͠Ί ɾVPC PeeringͰϥϯαʔζͷωοτϫʔΫ͔ΒSSHϩάΠϯ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE SSH/࡞ۀ༻ίϯςφʮdevopsʯͷݱࡏ ɾdevopsίϯςφΛഇࢭ(2021/04~) ɾECS Execͷొ ɾAppίϯςφʹϩάΠϯ ɾγΣϧεΫϦϓτͰ࣮ ɹɾݱࡏecspressoͰίϯςφཧ ↑ݸਓϒϩάΛνΣοΫ👍
$ ls /etc/ecspresso/menta/ README.md app.yaml digdag.yaml $ export AWS_PROFILE=menta $ ecspresso --config /etc/ecspresso/menta/app.yaml exec --command bash $ ecspresso --config /etc/ecspresso/menta/digdag.yaml exec --command bash -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE APIܦ༝ͰͷStgڥͷσϓϩΠ ɾStgڥͷσϓϩΠ ɹɾgithub flow ɹɾγΣϧεΫϦϓτ ɹɹɾҙͷϒϥϯνΛࢦఆ ɾૉૣ͘σϓϩΠ͕Մೳ
ɹɾ։ൃޮ͕Ξοϓ ɾMasterϚʔδͰຊ൪ڥϦϦʔε ɾTerraform CIڥΛ࣮ $ sh deploy.sh ԼهͷΑ͏ʹϒϥϯνΛࢦఆ࣮ͯ͠ߦ͍ͯͩ͘͠͞ɻ (ྫ) sh deploy.sh ϒϥϯν໊ $ sh deploy.sh fix-nginx { "number" : 74, "state" : "pending", "id" : "xxxxxx-xxxxx-xxxxx-xxx-xxxxxxxx", "created_at" : “2021-06-27T06:14:43.973Z" } ϒϥϯν໊/ fix-nginx ͷStgσϓϩΠΛ։࢝͠·ͨ͠! -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ECS Scheduled TasksʹΑΔόον࣮ʹ͍ͭͯ ɾࠓ·Ͱ ɹɾLaravelͷλεΫεέδϡʔϧ ɾݱࡏ ɹɾECS
Scheduled Tasks ɹɹɾCloudWatchͷΠϕϯτϧʔϧ ɹɹɾTerraformԽ { "containerOverrides": [ { "name": "menta-app", "command": [ "php", "artisan", "admin:coupon-mail:send" ] } ] } -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ϩά/ίϯςφࢹʹ͍ͭͯ ɾΞΫηε/ΞϓϦϩάɺRDSࠪ/Τϥʔϩά ɹɾCloudWatch Logsʹ ɹɾࠓ·Ͱ ɹɹɾLambdaͰS3ʹγϯΫɹɹ ɹɹɾPythonͰ࣮͍ͯͨͨ͠Ίӡ༻ίετΞοϓ
ɹɾࠓճ ɹɹɾAmazon Kinesis Data FirehoseͰS3ʹू ɹɹɾTerraformԽ ɾࢹ ɹɾMackerel→DatadogʹҠߦ ɹɾλεΫఆٛʹdatadog-agentΛಈ࡞ͤ͞ΔΑ͏ʹ ɹɾcpu:10ɺmemory:256 TerraformԽ ɹɾAPMͰͷΞϓϦΤϥʔݕ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ຊ൪DBϚεΩϯάࣗಈԽ ɾStgڥͷDB ɹɾຖि1ճຊ൪DBͱಉ͡σʔλΛೖΕͯ΄͍͠ʂ ɹɾݸਓใͪΖΜϚεΩϯά ɾdevops(EC2)ͷ෮׆ ɾECS/FargateͰΖ͏ͱࢥͬͨ ɹɾσΟεΫྔ͕গͳ͍ͨΊஅ೦
ɾauto-masking ɹɾprd-masking.sh ຖि༵0࣌ʙ ɹɹɾDump ɹɾstg-masking-restore.sh ຖि༵5࣌ʙ ɹɹɾRestore ɾpost_slack.sh ݁ՌΛSlack௨ ɾ։ൃڥ(MySQLίϯςφ) ɾauto-renew-mysql-container ຖि༵9࣌ʙ ɾCodeBuild ɹɾMySQLίϯςφΛbuild͠ϚεΩϯάσʔλΛRestore -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ECSॳͷΦʔτεέʔϧ࠾༻ ɾECS/FargateͰॳͷΦʔτεέʔϧ࠾༻ ɾTerraformԽ ɹɾCloudWatch Alarmઃఆ(CPU 40%ͰλεΫ૿Ճ) ɹɾECS/Service AutoScaling
ઃఆ (λεΫͷ࠷େ4) ɹɾAuto Scaling Policyઃఆ ɾEC2ͷΑ͏ʹAMIͳͲͷ࡞ΓࠐΈ͕Ұͳ͍ˠָ -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ੳج൫ͷհ ɾLancersͷੳج൫ΛԠ༻ ɾੳج൫ ɹɾDigdag/Embulk/Redash/BigQuery ɹɾຖਂʹRDSͷσʔλΛBigQueryʹγϯΫ ɹɾLancersͱಉ͡ϓϩδΣΫτͰཧ
ɾઌ݄·ͰEC2(Digdagαʔόʔ)Ͱӡ༻͍ͯͨ͠ ɹɾECS/FargateʹҠߦ(։ൃڥߏங) ɹɾຊՈϥϯαʔζҠߦ ɾৄࡉϥϯαʔζΤϯδχΞϒϩάͰ👍 -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE Ҡߦ࣌ͷ՝ͱΑ͔ͬͨ͜ͱ ɾϩάΛίϯςφͰཧͯ͠͠·͏ͱσϓϩΠ͢Δͨͼফ͑ͯ͠·͏ ɹɾCloudWatch Logsʹඪ४ग़ྗ͠ͳ͚ΕͳΒͳ͍ ɹɾLaravelΞϓϦϩάͷstdout͕5.8Ҏ্͡Όͳ͍ͱରԠͰ͖ͳ͍ ɹɾόʔδϣϯΞοϓΛߦͳͬͨ ɾը૾ܥ ɹɾS3
ը૾Ξοϓϩʔυ͕Ұ෦ͷػೳ͔͠ରԠ͍ͯ͠ͳ͔ͬͨ ɹɹɾ1ϲ݄Ҏ্͔͚ͯҠߦ ɾόονաڈͷاըͷιʔεΛ୨Է ɹɾෛ࠴ͱͳ͍ͬͯͨιʔεΛཧͰ͖ͨ ɾUnit/Feature/E2Eͷࣗಈςετඋ ɹɾPHPCSΛͬͨن౷Ұ ɹɾPHPStanʢLarastanʣͬͨ੩తղੳͰͷ্࣭όάݮ ɹɾϦϑΝΫλϦϯά 💦 -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE Ҡߦޙͷτϥϒϧ ɾECS Scheduled Tasks ɹɾຖͷόονͰNAT Gatewayͷ௨৴අ͕ංେԽ ɹɾECRCloudWatch
Logsͷ͖ઌΛมߋ ɹɹɾVPCΤϯυϙΠϯτܦ༝ʹ ɾଞͷάϧʔϓձࣾ10ສԁίετΞοϓ͍ͯͨ͠ ɹɾؒ120ສݮʹվળͨ͠ ɾݸਓϒϩάॻ͍͍ͯΔͷͰࢀߟʹʂ 💦 -
2021/08/25ʲLancers×SPACEMARKETʳγΣΞϦϯάΤίϊϛʔΛࢧ͑ΔΠϯϑϥ/SRE ɾࠓޙ ɹɾ։ൃڥͷDBϚεΩϯά͞ΕͨDBΛར༻ ɹɹɾcodebuild ɹɾPHP/LaravelͷόʔδϣϯΞοϓ ɹɾίϯςφͷ੬ऑੑݕ (Trivy) ɹɾDatadogͰΞΫηεϩά࿈ܞ ɹɾϥϯαʔζຊՈίϯςφҠߦʹνϟϨϯδ
ɹɹɾࣾͰӡ༻͍ͯ͠ΔͷҠߦࡁΈ ·ͱΊ ɾͰҠߦ͢Δ͜ͱ͕Ͱ͖ͨ(2020/10~2021/03) ɹɾٕज़తͳෛ࠴ͷཧΛߦ͍ҠߦΛ࣮ࢪͰ͖ͨ ɾاըɾΞΠσΟΞϕʔεͷϓϩτλΠϓ։ൃ͔Β ɹɾকདྷΛݟਾ͑ӡ༻ɾอकҙࣝͨ͠։ൃελΠϧʹ ɹɾϥϯαʔζͱಉ͡։ൃελΠϧʹมΘͬͨ ɾImmutableͳαʔόʔͷӡ༻ ɹɾ҆ఆӡ༻ɺӡ༻ޮͷΞοϓ ɹɾԽΦʔτεέʔϦϯάʹΑΔߴ͍Մ༻ੑΛ࣮ݱͨ͠ߏ ɾDatadogͷAPMͰΞϓϦͷΤϥʔ௨͕Ͱ͖ΔΑ͏ʹ ɾϗετΠϯελϯεͷཧ͕ল͚Δ ɾλεΫ୯ҐͰࣗ༝ʹϦιʔεมߋՄೳ ɾλεΫͷىಈ͕Ί ɹɾόον࣮ߦ͘ͳΔ ɾ͘͞ΒͷΫϥυֹ݄࣌Ͱेສԁˢ