ćÆććć« ę¬čØäŗćÆdely Advent Calendar 2018ć®4ę„ē®ć®čØäŗć§ćć dely Advent Calendar 2018 - Adventar dely Advent Calendar 2018 - Qiita ęØę„ćÆå¼ē¤¾ć®ę©ę¢°å¦ēæćØć³ćøćć¢ć®č¾»ćNixOSć«ć¤ćć¦ć®čØäŗćęøćć¾ććć®ć§čå³ć®ććę¹ćÆęÆéčŖćć§ćæć¦ćć ććć tech.dely.jp ććć«ć”ćÆļ¼delyć§SREććć£ć¦ććäŗäøć§ćć ę¬čØäŗć§ćÆćWEBććć©ć¼ćć³ć¹ć®å®ē¹č¦³ęø¬ć®ä»ēµćæćę軽ć«ę§ēÆåŗę„ćććć«ććć®ć§ćć®ē“¹ä»ćććććØęćć¾ćć ę¬čØäŗć§ćÆäøčØć®ćµć¼ćć¹ććć¼ć«ćå©ēØćć¦ćć¾ćć AWS Terraform sitespeed.io åē½®ććÆććććę§ēÆę¹ę³ć ćē„ććććØććę¹ćÆ ćć”ćļ¼ ē®ę¬” ćÆććć« ē®ę¬” WEBććć©ć¼ćć³ć¹ć«ć¤ć㦠sitespeed.ioć«ć¤ć㦠主ćŖę©č½ å種ć¹ć³ć¢ Waterfall Visual Metrics Browser Metrics ć¬ć³ććŖć³ć°ęć®åē»åē ć¹ć³ć¢ć«åƾććć¢ććć¤ć¹ć®č”Øē¤ŗ ć¬ć¹ćć³ć¹ć®é
ććŖćÆćØć¹ć ćµć¤ćŗć®å¤§ććē»åćjavascript äø»ćŖē¹å¾“ å®ē¹č¦³ęø¬ć«ć¤ć㦠å®ē¹č¦³ęø¬ć®ę¹ę³ CodeBuildć®ć”ćŖćć å®ē¹č¦³ęø¬åŗē¤ć®ę§ēÆę¹ę³ ę§ęå³ åę ęŗå ļ¼ļ¼ć¬ććøććŖć®ćć©ć¼ćÆ ļ¼ļ¼Terraformć®tfstatećć”ć¤ć«ē®”ēēØć®S3ćć±ććć®ä½ę ļ¼ļ¼terraform.tfvarsć®ä½ę ļ¼ļ¼backend.tfvarsć®ä½ę ļ¼ļ¼Terraformä½ę„ćć£ć¬ćÆććŖć®åęå ļ¼ļ¼åÆ¾č±”ćµć¤ćć®ęå® ę§ēÆ sitespeed.ioć«ććčØęø¬ēµęć®åē
§ HTML SQL VIEWä½ę Redashć«ććåÆč¦åä¾ ć«ć¹ćæćć¤ćŗ sitespeed.ioć®č©¦č”åę°ć®čŖæę“ čØęø¬ééć®čŖæę“ ęéć«ć¤ć㦠ćććć« WEBććć©ć¼ćć³ć¹ć«ć¤ć㦠2018幓7ęć®Googleć®ć¹ćć¼ćć¢ćććć¼ćć§ćåććéććWEBćć¼ćøć®čŖćæč¾¼ćæéåŗ¦ćÆPCćć¢ćć¤ć«ćć«é¢ćććććäøå±¤éč¦č¦ććć¦ćć¦ćć¾ćć čŖćæč¾¼ćæéåŗ¦ć®é
ćWEBćć¼ćøćę¹åććććØćŖć£ććØććć¾ććÆććć«ē¾ē¶ćęę”ććåæ
č¦ććććć®ććć«ćÆWEBć®ććć©ć¼ćć³ć¹čØęø¬ćč”ćåæ
č¦ćććć¾ćć ē¾åØćWEBć®ććć©ć¼ćć³ć¹ćčØęø¬ććęꮵćØćć¦ćÆ google chromeć®Lighthouseę©č½ WebPageTest( https://www.webpagetest.org ) PageSpeed Insights( https://developers.google.com/speed/pagespeed/insights/ ) ćŖć©ććć¤ćććć¾ćććę¬čØäŗć§ćÆē¾åØdelyć§å©ēØćć¦ććsitespeed.ioćØćććć¼ć«ć瓹ä»ććććØęćć¾ćć sitespeed.ioć«ć¤ć㦠sitespeed.ioćÆćŖć¼ćć³ć½ć¼ć¹ć®WEBććć©ć¼ćć³ć¹čØęø¬ćć¼ć«ć§ćć www.sitespeed.io äø»ćŖę©č½ sitespeed.ioć使ćććØć§äøčØć®ćććŖćć¼ćæćWEBćć©ć¦ć¶ć§é²č¦§ććććØćåÆč½ć«ćŖćć¾ćć å種ć¹ć³ć¢ Waterfall Visual Metrics Browser Metrics ć¬ć³ććŖć³ć°ęć®åē»åē ć¹ć³ć¢ć«åƾććć¢ććć¤ć¹ć®č”Øē¤ŗ ć¬ć¹ćć³ć¹ć®é
ććŖćÆćØć¹ć ćµć¤ćŗć®å¤§ććē»åćjavascript äø»ćŖē¹å¾“ ć¾ćåꮵć§ęććWEBććć©ć¼ćć³ć¹čØęø¬ćć¼ć«ćØéććäøčØć®ćććŖē¹å¾“ćęć£ć¦ćć¾ćć Dockerć«ććē°”åćŖå®č” å
¬å¼ć®docker imagećććć®ć§ćäøčØć®ć³ćć³ćć«ćć£ć¦ē°”åć«å®č”ććććØćåÆč½ć§ćć $ docker run --shm-size=1g --rm -v "$(pwd)":/sitespeed.io sitespeedio/sitespeed.io:7.7.2 https://www.sitespeed.io/ ēµęć®htmlåŗå å®č”å¾ćčØęø¬ēµęćhtmlć§åŗåććć¦ććć®ć§WEBćć©ć¦ć¶ć§ē°”åć«é²č¦§ććććØćåÆč½ć«ćŖć£ć¦ćć¾ćć ā» YYYY-MM-DD-HH-mm-ss ćÆå®č”ęå»ćå
„ćć¾ć $ open sitespeed-result/www.sitespeed.io/YYYY-MM-DD-HH-mm-ss/index.html ä»ć«ćäøčØć®ćććŖę©č½ćęØęŗć§åćć¦ććć®ć§ćęč»ćŖéēØćåÆč½ć«ćŖć£ć¦ćć¾ćć htmlćS3ć«ć¢ćććć¼ćććę©č½ ēµęćSlackć«éē„ććę©č½ ēµęć®ć”ććŖćÆć¹ćjsonå½¢å¼ć§åŗåććę©č½ å®ē¹č¦³ęø¬ć«ć¤ć㦠WEBć®ććć©ć¼ćć³ć¹ć«ććć¦ććć«ćććÆćē¹å®ććć ćć§ććć°ććć®ęē¹ć§ę°åć®čØęø¬ćå®ę½ććć°ććć§ćććććć«ćććÆć«åƾćć¦åƾēćč”ć£ćå¾ćć©ć®ēØåŗ¦ę¹åććć®ćć«ć¤ćć¦ē„ćććå “åćÆåƾēå¾ć«ååŗ¦čØęø¬ćå®ę½ććåæ
č¦ćććć¾ćć č¤ę°ć®åƾēćé·ęēć«å®ę½ćć¦ććå “åćŖć©ćÆć対ēćå®ę½ććåŗ¦ć«čØęø¬ćå®ę½ććåæ
č¦ćććéåøøć«å¤§å¤ć§ćć ć¾ććäøčØćØćÆå対ć«ä½ćć®ćæć¤ćć³ć°ć§ęå³ććććć©ć¼ćć³ć¹ćęŖććŖć£ć¦ććŖććććć§ććÆććććØććććć©ć¼ćć³ć¹ćęŖććŖć£ćåå¾ć§ć¾ććć®ćæć¤ćć³ć°ć§ä½ćåå ććŖć©ćÆé”ć£ć¦ē¢ŗčŖćććććØćććć¾ćć ćććć£ćč¦ä»¶ćéęććććć«ćÆćäøå®ééć§ē¹°ćčæćWEBććć©ć¼ćć³ć¹čØęø¬ćå®ę½ććåæ
č¦ćććć¾ćć å®ē¹č¦³ęø¬ć®ę¹ę³ å®ęēć«WEBć®ććć©ć¼ćć³ć¹čØęø¬ćč”ćć«ćÆäøčØć®ćććŖę¹ę³ćčćććć¾ćć å®ęēć«ęåć§å®ę½ äøēŖåē“ćŖć®ćÆå®ęēć«ęåć§č”ćććØć§ćć ćć ē¾å®ēć«ćÆęä½ę„ć§č”ćććåæććććØććć£ćććććććåćęéć«å®č”ććć®ćé£ććć£ćććć¾ćć ćµć¼ććę§ēÆćć¦cronćCIćć¼ć«ć§å®ęēć«å®č” ꬔćÆćµć¼ććē«ć¦ć¦cronć§å®č”ćććJenkinsćŖć©ć®CIćć¼ć«ć§å®ęēć«å®č”ććę¹ę³ć§ćć ćć®ę¹ę³ćÆćä»ć®å¦ēćč£å“ć§åćć¦ćć¦ććć©ć¼ćć³ć¹čØęø¬ć«å½±éæćććććØćčę
®ććåæ
č¦ććć£ććć ćććććµć¼ćć®ē®”ēćåæ
č¦ć«ćŖć£ć¦ćć¾ćććØć«ćć”ćŖćććęćć¦ćć¾ćć¾ćć ECSć®ćæć¹ćÆå®č”ę©č½ćAWS Batchć§å®ęēć«å®č” ēč«ēć«ćÆå®ē¾ć§ćććć§ćććWEBććć©ć¼ćć³ć¹ć®å®ē¹č¦³ęø¬ćč”ćć ććŖć®ć§å°ć大ćććŖę°ććć¾ćć äøčØć«ļ¼ć¤ć»ć©ę¹ę³ćęćć¦č¦ć¾ććććć©ćććć¾ćć”ćØććęćć§ćļ¼äø»č¦³ļ¼ć ććć§ęę”ćććć®ćAWSć®CodeBuildć«ććå®ęå®č”ć§ćļ¼ CodeBuildć®ć”ćŖćć CodeBuildćÆę¬ę„CIć§å©ēØćććµć¼ćć¹ć§ććććµć¼ćć¬ć¹ćŖå®č”ē°å¢ćØćć¦ćåŖćć¦ćććØęćć¾ćć WEBććć©ć¼ćć³ć¹čØęø¬ć®å®č”ē°å¢ćØćć¦ä½æćććØć«ććć¦ćÆäøčØć®ćććŖć”ćŖćććććć¾ćć ćµć¼ćć¬ć¹ćŖć®ć§ćŖć½ć¼ć¹ćę°ć«ććŖćć¦ćć å®č”ęéć«ććå¾éčŖ²é CloudWatch Eventé£ęŗć§cronćć©ć¼ćććć«ććå®ęå®č”ćåÆč½ å®ē¹č¦³ęø¬åŗē¤ć®ę§ēÆę¹ę³ ćććććÆå
·ä½ēćŖę§ēÆę¹ę³ć瓹ä»ćć¾ćć ę¬čØäŗć§ä½æēØććć³ć¼ććÆå
Øć¦Githubć«ććć¦ćć¾ćć github.com AWSć®ćŖć½ć¼ć¹ćTerraformć使ć£ć¦ć³ć¼ćåćć¦ććć®ć§ćå®ē¹č¦³ęø¬åŗē¤ćę軽ć«ę§ēÆććććØćåÆč½ć§ćć ę§ęå³ CodeBuild sitespeed.ioćå®č”ććå®č”ē°å¢ćØćć¦å©ēØćć¾ćć CloudWatch Event CodeBuildćå®ęēć«å®č”ććć¹ć±ćøć„ć¼ć©ćØćć¦å©ēØćć¾ćć S3 sitespeed.ioć«ććčØęø¬ēµęć®ę ¼ē“ćØćHTMLć®ćć¹ćć£ć³ć°ćØćć¦å©ēØćć¾ćć Glue sitespeed.ioć«ććčØęø¬ēµęć®ć¹ćć¼ććå®ē¾©ććććć«å©ēØćć¾ćć Athena sitespeed.ioć«ććčØęø¬ēµęć«åƾćć¦SQLćå®č”ććććć«å©ēØćć¾ćć åę åŗē¤ę§ēÆć«ä¼“ć£ć¦ęä½éäøčØćå®č”ē°å¢ć«čØå®ććć¦ććåæ
č¦ćććć¾ćć awsclić®ć¤ć³ć¹ćć¼ć«ćØcredentialć®čØå® Terraformć®å©ēØć«ä¼“ć£ć¦AWSć®ć¢ćÆć»ć¹ćć¼ćØć·ć¼ćÆć¬ćććć¼ć®čØå®ćåæ
č¦ć§ćć Terraformć®ć¤ć³ć¹ćć¼ć« IAMć«åƾććTerraformćå®č”ććććć®ååćŖęØ©éčØå® AWS CodeBuildćØGitHubć®ę„ē¶ AWSć³ć³ć½ć¼ć«äøć®CodeBuildć«ććć¦ćććøć§ćÆćčØå®ęć®ćć¼ćøć§äøčØć®ććć«ććGitHubć¢ć«ć¦ć³ććåęććØč”Øē¤ŗććć¦ććåæ
č¦ćććć¾ććććć¦ććŖćå “åćÆćGitHubć«ę„ē¶ćććæć³ććGitHubé£ęŗćęøć¾ćć¦ćć ććć CodeBuildćØGitHubćę„ē¶ććć¦ććŖććØTerraformć®applyęć«ćØć©ć¼ć«ćŖćć¾ćć®ć§ć注ęćć ććć ęŗå ļ¼ļ¼ć¬ććøććŖć®ćć©ć¼ćÆ äøčØć®ć¬ććøććŖććčŖčŗ«ć®ć¢ć«ć¦ć³ćć«Forkćć¾ććClonećć¦ę°ććć¬ććøććŖćä½ęćć¦ć大äøå¤«ć§ćć GitHub - gomesuit/webperf-by-codebuild ļ¼ļ¼Terraformć®tfstatećć”ć¤ć«ē®”ēēØć®S3ćć±ććć®ä½ę 空ć®S3ćć±ćććļ¼ć¤ä½ęćć¾ćć ę¢åć®ćć®ć§ć大äøå¤«ć§ćććtfstatećć”ć¤ć«ć®keyćć³ć¼ćć«ć¹ćęøććć¦ććć®ć§ę°č¦ć§S3ćć±ćććä½ęććććØććććććć¾ćć ļ¼ļ¼terraform.tfvarsć®ä½ę sitespeed.ioć®åŗåććhtmlćS3ć®ćć¹ćć£ć³ć°ę©č½ć使ć£ć¦åē
§ćććććčŖčŗ«ć®IPć§ć¢ćÆć»ć¹å¶éćććć¾ćć ć¾ćCodeBuildćć½ć¼ć¹ćåå¾ććå
ććęé ć§ä½ęććć¬ććøććŖć®URLć«å¤ę“ćć¾ćć ćµć³ćć«ćć”ć¤ć«ćććć®ć§ć³ćć¼ćć¦ććć $ cd terraform $ cp terraform.tfvars.sample terraform.tfvars ćć”ć¤ć«å
ć®IPć¢ćć¬ć¹ćØć¬ććøććŖćå¤ę“ćć¾ćć # S3ć®ć¢ćÆć»ć¹å
IP my_ip = "XXX.XXX.XXX.XXX/32" # ä½ęććčŖčŗ«ć®GitHubć¬ććøććŖ git_repository = "https://github.com/<user-name>/<repository-name>" ļ¼ļ¼backend.tfvarsć®ä½ę Terraformć®tfstatećć”ć¤ć«ē®”ēēØć®S3ćć±ććć terraform init ć®ćæć¤ćć³ć°ć§ęå®ćććććć”ć¤ć«ćä½ęćć¾ćć ćµć³ćć«ćć”ć¤ć«ćććć®ć§ć³ćć¼ćć¦ććć # ./terraform ćć£ć¬ćÆććŖć§å®ę½ $ cp backend.tfvars.sample backend.tfvars ćć”ć¤ć«å
ć®ćć±ććåćå¤ę“ćć¾ćć # tfstatećę ¼ē“ććS3ćć±ćć bucket = "čŖčŗ«ć§ä½ęććS3ćć±ććć®åå" ļ¼ļ¼Terraformä½ę„ćć£ć¬ćÆććŖć®åęå äøčØć®ć³ćć³ćć§Terraformć®ä½ę„ćć£ć¬ćÆććŖćåęåćć¾ćć ćØć©ć¼ćć§ćŖććć°OKć§ćć # ./terraform ćć£ć¬ćÆććŖć§å®ę½ $ terraform init -backend-config backend.tfvars ļ¼ļ¼åÆ¾č±”ćµć¤ćć®ęå® čØęø¬ćććć¼ćøć®URLćurls.csvć«čØč¼ćć¾ćć äøč”ć« ćć”ć¤ć³å,対豔URL,ć«ćć“ćŖ ć®é ć§čØč¼ćć¾ćć č¤ę°č”čØč¼ćććØļ¼åć®CodeBuildć®å®č”ć§č¤ę°ć®URLćčØęø¬ććć¾ćć ć«ćć“ćŖåćÆåÆ¾č±”URLćć«ćć“ć©ć¤ćŗććććć«ä»äøćć¾ććä»»ęć®ęååćå
„åćć¦ćć ććć ä¾ćć° https://www.kurashiru.com/ ćčØęø¬åÆ¾č±”URLćØććå “åćäøčØć®ććć«ćŖćć¾ćć ććććć¼ćøćŖć®ć§ć«ćć“ćŖćÆtopćØćć¾ććć čØęø¬åÆ¾č±”ć®WEBćµć¤ććÆćčŖčŗ«ćē®”ēććć¦ćććć®ćčØč¼ćć¦ćć ććć www.kurashiru.com,https://www.kurashiru.com/,top ę§ēÆ Terraformćå®č”ćć¾ćć # ./terraform ćć£ć¬ćÆććŖć§å®ę½ $ terraform apply ćć°ćććććØäøčØć®ććć«ć³ć³ć½ć¼ć«ć«åŗåćććć®ć§ć確čŖć®å¾ć«ćyesććØå
„åćććØćŖć½ć¼ć¹ć®ēęćå§ć¾ćć¾ćć Plan: 16 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: äøčØć³ćć³ćć§ēęćććŖć½ć¼ć¹ćåé¤ććå “åćÆäøčØć³ćć³ććå®č”ćć¾ćć # ./terraform ćć£ć¬ćÆććŖć§å®ę½ $ terraform destroy sitespeed.ioć«ććčØęø¬ēµęć®åē
§ ę大ļ¼ęéå¾
ć¤ćčØå®ęøćæć®CodeBuildćęåć§ļ¼åŗ¦å®č”ćććØS3ć«čØęø¬ēµęćē½®ććć¾ćć HTML S3ćć±ććć«htmlćåŗåććć¦ććć®ć§ćć©ć¦ć¶ć§éćććØć§čØęø¬ēµęćé²č¦§ććććØćć§ćć¾ćć ä¾ćć°URLćÆäøčØć®ćććŖćć®ć«ćŖćć¾ćć https://s3-ap-northeast-1.amazonaws.com/webperf-by-codebuild-d85de1e5e348/raw/www.sitespeed.io/desktop/top/2018/12/01/15/38/index.html SQL AWSć³ć³ć½ć¼ć«ć®Athenać§SQLćå®č”ćććØēµęćåå¾ć§ććććć«ćŖć£ć¦ćć¾ćć SQLä¾ SELECT * FROM "webperf_by_codebuild_d85de1e5e348"."json" limit 10; VIEWä½ę ćć®ć¾ć¾ć§ćåé”ćÆćŖćć®ć§ćććSQLćä½ęćććØćć«SQLćč¤éć«ćŖććŖćććć«VIEWćčØå®ććć®ććććććć¾ćć ä¾ćć°äøčØć®ćććŖVIEWćēęććććØć§S3ć®URLćØtimestampć®ć«ć©ć ćäŗåć«å®ē¾©ćć¦ććććØćåÆč½ć§ćć SQLć®äøčØć®éØåćčŖčŗ«ć§Terraformćå®č”ććēµęć«ē½®ćęćć¦ćć ććć ć<Terraformć«ćć£ć¦ēęćććS3ćć±ćć>ć ć<Terraformć«ćć£ć¦ēęććććć¼ćæćć¼ć¹>ć CREATE OR REPLACE VIEW " <Terraformć«ćć£ć¦ēęććććć¼ćæćć¼ć¹> " . " site " AS SELECT CAST ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " YEAR " , ' - ' ), " MONTH " ), ' - ' ), " DAY " ), ' ' ), " hour " ), ' : ' ), " minute " ) AS timestamp) " time " , " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( ' https://s3-ap-northeast-1.amazonaws.com/<terraformć«ćć£ć¦ēęćććS3ćć±ćć>/raw/ ' , " domain " ), ' / ' ), " device " ), ' / ' ), " category " ), ' / ' ), " year " ), ' / ' ), " month " ), ' / ' ), " day " ), ' / ' ), " hour " ), ' / ' ), " minute " ), ' /index.html ' ) " link " , * FROM " <Terraformć«ćć£ć¦ēęććććć¼ćæćć¼ć¹> " . " json " ē½®ćęćä¾ CREATE OR REPLACE VIEW " webperf_by_codebuild_d85de1e5e348 " . " site " AS SELECT CAST ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " YEAR " , ' - ' ), " MONTH " ), ' - ' ), " DAY " ), ' ' ), " hour " ), ' : ' ), " minute " ) AS timestamp) " time " , " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( " concat " ( ' https://s3-ap-northeast-1.amazonaws.com/webperf-by-codebuild-d85de1e5e348/raw/ ' , " domain " ), ' / ' ), " device " ), ' / ' ), " category " ), ' / ' ), " year " ), ' / ' ), " month " ), ' / ' ), " day " ), ' / ' ), " hour " ), ' / ' ), " minute " ), ' /index.html ' ) " link " , * FROM " webperf_by_codebuild_d85de1e5e348 " . " json " ēµęä¾ SELECT * FROM " webperf_by_codebuild_d85de1e5e348 " . " site " limit 10 ; URLćØtimestampć®ć«ć©ć ćčæ½å ććć¦ććććØć確čŖć§ćć¾ćć Redashć«ććåÆč¦åä¾ å¼ē¤¾ć§ćÆä¾ćć°äøčØć®SQLćå®č”ććććØć«ćć£ć¦ć SELECT * FROM " <Terraformć«ćć£ć¦ēęććććć¼ćæćć¼ć¹> " . " site " WHERE device = ' desktop ' AND time >= current_timestamp - interval ' 1 ' month AND category = ' top ' AND domain = ' www.kurashiru.com ' ORDER BY time desc ; äøčØć®ćććŖēµęćå¾ć¦ćć¾ćć ć¾ćäøčØć®ēµęćäøčØć®ććć«Redashć使ć£ć¦ć°ć©ćåćć¦ćć¾ćć äøčØćÆå¼ē¤¾ć§ć®ä¾ć§ćććsitespeed.ioć«ćć£ć¦ę§ć
ćŖć”ććŖćÆć¹ćåå¾ććć¦ććć®ć§č²ć
ćŖęęØć®ēøåƾēćŖå¤åćčØęø¬ććććØćåÆč½ć«ćŖć£ć¦ćć¾ćć ć«ć¹ćæćć¤ćŗ sitespeed.ioć®č©¦č”åę°ć®čŖæę“ WEBćµć¤ćć®ććć©ć¼ćć³ć¹ćÆćµć¼ććć¼ćć£ć¼ć³ć³ćć³ćć«ćć£ć¦å½±éæćåććć®ć§ćŖćÆćØć¹ććććć³ć«ććć©ć¼ćć³ć¹ć«ćććēŗēććććØćå¤ćć§ćć ćć®ććļ¼åć®čØęø¬ć§ę°åę½č”ććććØćäøč¬ēć§ćć sitespeed.ioćÆčØå®ćć”ć¤ć«ć®ćć©ć”ć¼ćæćå¤ę“ććććØć§č©¦č”åę°ćčŖæēÆććććØćć§ćć¾ćć čØå®ćć”ć¤ć«ćÆć¬ććøććŖć®ć«ć¼ćć«ććconfig.jsonćØćććć”ć¤ć«ć§ćiterationsćØćććć©ć”ć¼ćæć3ććå¤ę“ććććØć§ę½č”åę°ćčŖæēÆććććØćåÆč½ć§ćć { " browsertime ": { " iterations ": 3 , " speedIndex ": true } , " s3 ": { " region ": " ap-northeast-1 " } , " crawler ": { " depth ": 1 } , " plugins ": { " load ": [ " analysisstorer " ] } } čØęø¬ééć®čŖæę“ čØęø¬ć®ććŖć¬ć¼ćÆCloudWatch Eventć§č”ć£ć¦ćć¾ćććć®ććCloudWatch Eventć®čØå®ćå¤ę“ććććØć§čØęø¬ééć®čŖæę“ćććććØćåÆč½ć§ćć Terraformć®č©²å½ćć”ć¤ć«ćÆ terraform/codebuild_trigger.tf ć§ććschedule_expressionć® cron(0 * * * ? *) ćå¤ę“ććććØć§ééćå¤ę“ććććØćåÆč½ć§ćć åę ććć«ćÆććäøåŗ¦ terraform apply ćå®č”ćć¾ćć ęéć«ć¤ć㦠ę¬čØäŗć®čØå®ć§å®éć«ććć£ć¦ććęéććåčć¾ć§ć«ćä¼ććć¾ćć ē¾åØ4ć¤ć®URLć®čØęø¬ć1ęéęÆć«å®č”ćć¦ćć¾ćććCodeBuildć®č©²å½ęéćÆļ¼ć¶ęć«ē“$40ć«ćŖćć¾ćć ę±ŗćć¦å®ććÆćŖćć§ććććµć¼ćć®ē®”ēććććŖćććč² č·ćé害ćę°ć«ććéēØććććØćåÆč½ć§ćć ćććć« WEBććć©ć¼ćć³ć¹ć®å®ē¹č¦³ęø¬ć«ć¤ćć¦ć話ćć¾ććć ęéććććć«ćØććććććć©ć¼ćć³ć¹čØęø¬ćå§ććććØććč¦ä»¶ć«ćć£ć¦ććć§ćÆćŖćć§ććććććć²ēę§ć®WEBććć©ć¼ćć³ć¹åęć®åčć«ćć¦ććć ććććØęćć¾ćć ęę„ćÆę¤ē“¢ćØć³ćøćć¢ć®sakura (@818uuu) ćććÆć©ć·ć«ć®ę¤ē“¢ćØć³ćøćć¢ćę¤ē“¢ćććććććć«åćēµćć ć㨠ć¾ćØćććØćććæć¤ćć«ć§ę稿ćć¾ćļ¼ć愽ććæć«ļ¼ tech.dely.jp