PEP668ã¯çªç¶ãã£ãŠãã pythonã®ã¹ã¯ãªããæžããŠããšãã«ãOSã«å
¥ã£ãŠããªãpythonã®ã¢ãžã¥ãŒã«ãå¿
èŠã«ãªã£ããã©ãããŠãŸããïŒ ããŸãŸã§ãèªåã¯çްããããšèããããã䜿ããã°ããããšå²ãåã£ãŠ $ pip3 install --user ã»ããã¢ãžã¥ãŒã«å ã£ãŠããã€ããã£ãŠãŸããïŒç¬ïŒããŸããèŠãããã«ãéè®ã§ããã ãšããããå
æ¥ä¹
ãã¶ãã«Debian sidã«ã¯ãªãç¡ãã¢ãžã¥ãŒã«ïŒpycoingeckoïŒãå¿
èŠã«ãªã£ãŠããã€ãã®ããã«pip3ãå®è¡ããŸãããããããçªç¶ã®ãšã©ãŒã§ããïŒ $ pip3 install --user pycoingecko error: externally-managed-environment à This environment is externally managed â°â> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed.
ããããã€ããã°ã streaming data åŠçãåå ããã®ã€ã¥ãã§ãã ç®æããŠããããšã®æŠèŠãªã©ã¯ååã®å
容ãã芧ãã ããã ãã¡ã°ããããã㪠pipeline ãå®è£
ããŠã¿ã ããŠãååã§ã¯å®åœ¢ãšããŠçšæããã template æ©èœããå®è¡ããŠã¿ãããšã§ãDataflow ã§åŠçãè¡ãã®ãã©ã®ãããªããšãã®æèŠãã€ãã¿ãŸããã ä»åã¯ããããäžæ©é²ãã§ãæ³å®ãã仿§ã«ã«ã¹ã¿ãã€ãºããŠåŠçãæžãããšãç®æããŠã¿ãŸãã ããããªèšã£ãŠãããããæ¥ã«ããã©ãã§ããäœãããã©ããã¯é ã«èŠãŠãããŸããã… ãã£ãŠã¿ãã Dataflow ã®ããã°ã©ã ããšããã Apache Beam SDK 㯠(å°ãªããšãåèŠã§ã¯) åçŽãªã€ããã§ã¯ãªãããã€ããèªäœã䜿ãããã®äºåæºåãå€ãå¿
èŠãªé¡ã®ãã®ã§ããä»å㯠Java ã§ ãã¡ãã® document ã«æ²¿ã£ãŠé²ããŠã¿ãŸãã ç°å¢ã¯ãæ°ããã® Java ãš maven ãå
¥ã£ããã®ãããã°ããããã§ããæ§ç¯æé ã«é¢ããŠã¯é·ããªãã®ã§ããã§ã¯è§ŠããŸããã ååå©çšããã“Word Count” ãäŸãšãããã¹ã¿ãŒãå°ç¹ãšããŠå©çšã§ããããªã®ã§ããŸãã¯äžèš document ã«ãããŸãŸä»¥äžã®ããã«å®è¡ããŸãã $ mvn archetype:generate \ -DarchetypeGroupId=org.apache.beam \ -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \ -DarchetypeVersion=2.46.0 \ -DgroupId=org.example \ -DartifactId=word-count-beam \ -Dversion="0.1" \ -Dpackage=org.apache.beam.examples \ -DinteractiveMode=false ããã§ãWord Count ã®ãœãŒã¹ãå«ãã éçºç°å¢ãæå
ã«ã€ããããŸãã 倧éã®ãœãŒã¹ã³ãŒãã download ãããŸããéåžžã«ã·ã³ãã«ãªãã®ãã€ããããå Žåã«ãããããå¿
èŠãªãã®ã ããæ®ããŠäœ¿ããšããäœæ¥ã ãã§ãã¡ãã£ãšããæéãããªã®ã§ããããããç°¡æãªã¹ã¿ãŒãããããšãããªãšæããŸãããä»åã¯äžèŠãªãã®ã¯ç¡èŠããŠãã¡ã€ã³ã®åŠçã远ã£ãŠã¿ãŸãããã Word Count ã®ã¡ã€ã³ã®åŠçã¯ãword-count-beam/src/main/java/org/apache/beam/examples/WordCount.java ã«ãã¹ãŠæžãããŠããŸãããããªã«éããªãã®ã§ããŸãããŠçºããŠã¿ããšãæåŸã«è¿ãå Žæã«ä»¥äžã®ããã«æžãããŠããŸãã p.apply("ReadLines", TextIO.read().from(options.getInputFile())) .
ãããªãã¯ã¯ã©ãŠãã§ãããããŒãžãã§æäŸãããŠãããµãŒãã¹ã®ãã¡ã掻çšã倧ããªã¢ããã³ããŒãžã«ãªããšæãããã®ã«ããªã¢ã«ã¿ã€ã ã®é次ããŒã¿åŠçãstreaming data åŠçããããŸãããããå®çŸããããã«ãOSS ã¯ããå€ãã®ãã³ããŒãããããŸããŸãªãã®ãæäŸãããŠããŸãããGCP ã§ streaming data åŠçãšããã°ãã£ã±ã Dataflow ã§ãã(ç¬æãšåèŠ) Streaming data åŠçãšã¯ åã« streaming data åŠçãšãããšããŸããŸãªåäœãä»çµã¿ã®ãã®ããããŸãããããã§ã¯ãããã¯ãŒã¯çã® IO ããæµããŠããããŒã¿ãéããŠé次åŠçãããããªãã®ãæ±ãããšãšããŸãã å
·äœçãªäŸ ããšãã°ããããã£ãæ©èœãå¹ççã«å®è£
ã§ããŸãã ãšã³ããŠãŒã¶ãŒã®ãã°ã€ã³ã€ãã³ããéããŠãªã¢ã«ã¿ã€ã ã§ã¢ã¯ãã£ããŠãŒã¶ãŒæ°ãèšç®ãã CPU 䜿çšçãªã©ã®ã¢ãã¿ãªã³ã°ææšãéã㊠5 åééã®å¹³åãã°ã©ãåãã äžæ¥ã«äžåºŠãããŒã¿ããŒã¹ã®ããŒã¿ãéèšãã æåŸã®ãã®ã¯éåžžãã©ã¡ãããšãããšãããåŠçãšåŒã°ãããã®ã§ãããDataflow (ç) ã䜿ããšããããã£ããããåŠçãå¹ççã«å®è£
ããããšãã§ããŸãã ããã€ãããããããªãããŒã¿ãåŸ
ã¡åãããããããçšåºŠã®åäœã§ãŸãšããŠãããŒã¿ã®å
容ã«ãã£ãŠè€æ°ã®åŠçãããå¥ã®ããŒã¿ããŒã¹ãªã©ã«ä¿åãããšãã£ãåŠçãã¯ããŒãããå®è£
ããããšæããšãªããªãããã©ããªãã®ã§ãããã¹ãããšãŠãããã©ãã§ããããã streaming data åŠçãã¬ãŒã ã¯ãŒã¯ã䜿ãããšã§ãããŒã¿åŠçéšåã®å®è£
ã«éäžããããšãã§ããããã«ãªããŸãã Dataflow ãšã¯ GCP ã§æäŸãããŠãããã«ãããŒãžãã®ããŒã¿åŠçãµãŒãã¹ã§ãã https://cloud.google.com/dataflow Apache Beam ãšãã OSS ãããããããå©çšããŠåŠçãå®è£
ããããšã§ãæœè±¡åããããŒã¿ãå
±éã®ãã€ãã©ã€ã³ã§åŠçã§ããŸãã(ãšããã Beam ã¯ããšããšãDataflow ã® framework ã OSS åããã®ãã¯ããŸãã ã£ããšã 1) Beam ã support ãã IOãã€ãŸãå
¥åºåã®çš®é¡ã¯ ãã¡ã ã«ãªã¹ãããããŸãã ãããã inputãoutput ãšããŠéã«ããããªåŠçãçµã¿èŸŒãããšãã§ããŸãã ãã Beam ã䜿ã£ãå®è£
ãç¬ç¹ã§ãè§Šããæ©äŒãå€ãã³ãã³ã圢åŒã®ããã°ã©ã ã REST API å®è£
ãªã©ãšãããªãéã£ãŠããŠãstreaming data åŠçã®ã³ã³ã»ãããšãããŸã£ãŠæåã®æ·å±
ãé«ããèªç±ã«å®è£
ã§ããããã«ãªããŸã§ã«ã¯ããçšåºŠã®æ
£ããå¿
èŠãšããæèŠããããŸãã
Windows container …? ãã·ã€ã§ãã ãµã ãããã²ããã container æè¡ã«ã€ããŠã®æ
å ±ã web ã§æŒã£ãŠãããšãYouTube ãéãã°æè¡ç³»ã®åç»ã«æ··ãã£ãŠã³ã³ããè¹è¶ (å®äœ) ã®åç»ãããããããããããªç¶æ
ã§ãããæãŠã«ã¯ãããèŠèŽããŠããŸãããããã¯ãªãã»ã©ãããæè¡ã ãªãããšæå¿ããããªã©ããæ¥ã
ãéãããŠãããŸãã ãããªæ¥ã
ã®äžã§ãã£ãŠãããªããªãæ°ã¥ããªãããšã¯ãããã®ã§ãããããšããµãš Windows container ãšããèšèã«è¡ãåœãã£ããšãã«ããããšãªããŸãããWSL ãªã©ã¯ãµã ãããè§Šããæ©äŒã¯ãããŸãããDocker ã§ Windows container? ããã«ã¯ Kubernetes ã§ã Windows container? ã¯ãŠ? ãšãªããããã¯ã²ãšã€èª¿ã¹ãŠã»ãã£ãŠã¿ãããªããŸãããšããæ¬¡ç¬¬ã§ãã Windows container ã Docker Desktop ã§å®è¡ããããã®æ¡ä»¶ ããã€ãã®æ¡ä»¶ãã¯ãªã¢ãããšãWindows container ã Docker Desktop ã䜿ã£ãŠå®è¡ã§ããŸãã (ããããã®èšäºã®ãã€ã©ã€ãã§ã) host ã Windows ã§ããããš host ã® Windows version ã« äºææ§ããã container image ãéžæãã ããš Docker Desktop ã§ WSL 2 backed engine ãæå¹ã« ããªã ããš (åŸè¿°) Windows (host) ã§ Hyper-VãContainer æ©èœãæå¹ã«ãªã£ãŠããããš (åŸè¿°) Windows 11 ã§ãåæ§ããªãšæãã®ã§ããã確èªã§ããŠããŸãããä»åã®å®éšã¯ Windows 10 ã§è¡ã£ãŠããŸãã
æ¥ã
GitHubäžã§ç®¡çããããã¡ã€ã«ãç·šéããŠããŠæ¬ ãããªãããšã®1ã€ã«ãPull RequestãäœããããããŸãã Pull RequestïŒä»¥äžãã«ãªã¯ïŒã®èª¬ææã¯Markdownèšæ³ããµããŒãããŠããã®ã§ãç®æ¡æžããWebäžã«ããããã¥ã¡ã³ããžãªã³ã¯ãªã©ãæ°è»œã«æžãããšãã§ããŸãã ãšããã§ããã«ãªã¯ã®èª¬ææãããããREADME.mdã®ãããªMarkdownã§æžãããå
容ã¯çŽæ¥GitHubäžã§è¡šç€ºãããã®ã§ã¯ãªã1ãå¥éHTMLã«å€æãããŠè¡šç€ºãããŸãã ãã«ãªã¯äœæã®ç»é¢ã§ã¯Markdownã®ç·šéã¢ãŒããšPreviewã¢ãŒããå¥ã¿ãã§çšæãããŠããã®ã§ãããæ¬ããã°å
ã§ãã³ãã³ç»å ŽããVSCodeãªã©ã®ãšãã£ã¿ã§ã¯Markdown圢åŒã®å
容ãšãã®æç»çµæã暪ã«äžŠã¹ãŠç¢ºèªããªããç·šéãå¯èœãªã®ã§ããã¬ãã¥ãŒã¢ãŒããšç·šéã¢ãŒããéœåºŠããŠã¹ã§åãæ¿ããããšãæéã«æããããšããããŸãã ãã«ãªã¯ãããŒã«ã«ã§äœã ããã§ããã«ãªã¯ã®èª¬ææãããŒã«ã«ç°å¢ã§äœæããããšã«ããŸããã…ãšãã£ãŠããäŸãã° body.md çé©åœã«åœåãããã¡ã€ã«ã«èª¬ææãæžããéœåºŠãã¬ãã¥ãŒããã®ã¿ã§ãã ãã®ãã¡ã€ã«ã®äžèº«ããã«ãªã¯ã®èª¬ææã«ãã®ãŸãŸè»¢èšããŠãããã®ã§ãããGitHub CLI ã䜿ããšä»¥äžã®ã³ãã³ãã§ãã©ãŠã¶ãªãã«ãã«ãªã¯ãäœæã§ããã®ã§éå®ããŠããŸãã # -F ã§èª¬ææãèšèŒãããã¡ã€ã«åãæå® # --reviewerã§ã¬ãã¥ã¯ãŒã䜵ããŠæå®ã§ãã $ gh pr create --title "ãã«ãªã¯ã¿ã€ãã«" -F ./body.md --reviewer someone GitHub Flavored Markdownããã¬ãã¥ãŒããã å€ãã®å Žååè¿°ã®æ¹æ³ã§åé¡ãªãã®ã§ãããäžæºã«æããããšãåºãŠããŸãããããã¯ãGitHub Flavored Markdownããã¬ãã¥ãŒã§ããªãå Žåãããããšã§ãã GitHubã®Markdownã¯å³å¯ã«ã¯GitHub Flavored MarkdownãšåŒã°ããMarkdownã®æ¹èšã«åŸããããã€ãã®æ¡åŒµæ§æããããŸãã åºæ¬çãªå
容ã¯ãã¡ãã«ãŸãšãŸã£ãŠããŠãç§ãå人çã«ãã䜿ãã®ã¯ããã«ãªã¯ãšã¹ãã®åç
§ãã§ãã ä»ã«ããã¡ãã§è§ŠããããŠãããã¿ã¹ã¯ãªã¹ããïŒãã§ãã¯ããã¯ã¹ïŒããã䜿ããŸãããããããå°ãªããšã202301æ«æç¹ã®VSCodeã®æšæºã®Markdownãã¬ãã¥ãŒæ©èœã§ã¯ãµããŒããããŠãããããã¬ãã¥ãŒã§ããŸããã äŸã㰠以äžã®ããã«èšèŒããéãGitHubäžã§ã¯ #1 ã1çªã®ãã«ãªã¯ãžã®ãªã³ã¯ã«ãªããŸãããïŒåœç¶ã§ã¯ãããŸããïŒVSCodeã§ã¯ãªã³ã¯ã«ã¯ãªãããã®ãŸãŸåºåãããŸãã éå»ã®ãã«ãªã¯ã #1 ã§ã¯... ããããªã³ã¯ãšããŠè¡šç€ºãããã確èªããããšæã£ãŠãããšããã§ GitHubãå
¬éããŠããWeb APIã®äžã«Markdown APIïŒ20221128çŸåšïŒãèŠã€ããŸããã ãã®API㯠Use the REST API to render a markdown document as an HTML page or as raw text. ãšããããã«ãMarkdown圢åŒã®å
容ãå
¥åããããšã§å¯Ÿå¿ããHTMLãã¡ã€ã«ãè¿ããŠãããŸãã
ããã«ã¡ã¯ããã·ã€ã§ãã ãããèªãã§ããããªãã¯ãèªåã AI ã§ã¯ãªããšãã確ããèªèŠããæã¡ã§ãããã? ð€ ç¡äœçºã«äžŠã¹æ¿ããããã ã³ããçŠä»¥éããããã®æå±ããããŒã ã§ã¯ããªã³ã©ã€ã³ã§ãã€ãªãŒããŒãã£ã³ã°ãããŠããŸããæ¥ã
ã®ç¶æ³ã»æ
å ±ã®å
±æã«ã€ããŠãããŒã ã¡ã³ããŒãã²ãšããã€é ã«æ°å話ãã®ã§ãããæ¯æ¥é çªãããªãã ãšã€ãŸããªãã®ã§é çªãå€ããããã«ããŠããŸããæåã®é ã¯å¿ã®ãªãã§ããããŒã«é ãæ±ºããŠããã®ã§ããããªã«ããé¢åã§ãããè°è«ãçãäžãã£ããšããªã©ã¯æããŠããŸã£ãããªããªãããªã人ãäºåºŠåŒãã§ããŸãããšããã£ããããŸãããããããã®ã¯ãŸãã«æ©æ¢°ãåŸæãªããšã§ãã ããŒãã£ã³ã°åã«æå
ã§ã±ã£ãš node ã§å®è¡ã§ããããã«ãJavaScript ã®ã¯ã³ã©ã€ããŒãæžããŸããã ["幞", "äžå", "å®®å", "å·åŽ", "髿ޥ", "倿©", "麻ç"].sort(() => Math.random() - .5) ãã£ãŠããããšã¯éåžžã«åçŽã§ãsort() ã«äœ¿ãããæ¯èŒã§ãå
容 (ååæåå) ãç¡èŠããŠæ¯å random() ã§ 1/2 ã®ç¢ºçã§åºæºãå€åãããŠããŸããããã§ã©ã³ãã ã«é çªãå€ããã§ãããã ãããããš 2ã3 æ¥ããã§ãã£ãŠã¿ãã®ã§ãããã©ããçµæãåã£ãŠããããã«æããŸãã æå
ã§äœåºŠãå®è¡ããŠã¿ããšãäœæã§ããããããã«ããªããšãªããå
ã®é
åããé çªãå€ãã£ãŠããªãèŠçŽ ãå€ãããã«æããã®ã§ãã å®éã«æ°ååã»ã©å®è¡ããŠã«ãŠã³ãããŠã¿ããšããœãŒãå
ã®å Žæã«å€§ããåããããããšãããããŸããã以äžã¯ãå
é ã®èŠçŽ ãæçµçã«ããããã®äœçœ®ã«èœã¡çããåæ°ã瀺ãã°ã©ãã§ãã å€å°ã®åãã¯ãã®ãããèŠçŽ ã§ãããããã§ã¯ã¡ãã£ãšæ¥µç«¯ã§ã…ã ãŸãã端ã«è¿ãèŠçŽ (å
é ãæ«å°Ÿã«è¿ãèŠçŽ ) ã»ã©åã£ãŠããæ§åããããŸããã èããŠã¿ããšãããã«ãsort() ãããšãã«é çªãå€ããæ¯èŒåºæºãäºåäºåã§æ¯åå€ãããšãå
ã®äœçœ®ããããŸãé¢ããŠãããªããããªæ°ãããŸãã(sort ã® algorithm 次第ã§ã¯ãããŸãã) ããã§ã以äžã®ããã«åŠçãå€ããŠã¿ãŸããã ["幞", "äžå", "å®®å", "å·åŽ", "髿ޥ", "倿©", "麻ç"] .map(o => ({ n: o, r: Math.random() })).sort((a, b) => a.r - b.r).map(o => o.
Helmã«ããããã³ãã¬ãŒããå¥ãã¡ã€ã«ã«åããä»çµã¿ Helmã§0ãšdefaultãåºå¥ããã«åŒãç¶ãHelmã®è©±é¡ã§ãã Helmã§ãã³ãã¬ãŒããèšè¿°ãããšããåºæ¬çã«ã¯ä»¥åã®èšäºã®ããã«ãããã§ã¹ãã®YAMLãã¡ã€ã«å
ã«çŽæ¥èšèŒããŸãããæã«ã¯ãã³ãã¬ãŒããå¥ã®ãã¡ã€ã«ã«åãããå ŽåããããŸãã äŸãã°ãè€æ°ãããã§ã¹ãéã§å
±éã®ãã³ãã¬ãŒãã䜿ããããConfigMap/Secretãæ§æããèšå®å
容ãå¥ã®ãã¡ã€ã«ã§ç®¡çããããšãã£ãåæ©ããããŸãã ãã®ãšããHelmã§ã¯ããã€ãéžæè¢ãããã䜿ãããã«èºããã®ã§ãŸãšããŸãã èŠçŽãããšã æ¹æ³ 䜿ãåã template ãã³ãã¬ãŒããåŠçã®å
容ã§èå¥ãããå Žåããã ããåºæ¬çã«includeã§è¯ã include template ã«å ããŠãã³ãã¬ãŒãæç»çµæã«å¯ŸããŠè¿œå ã®åŠçãè¡ãããå Žå tpl ãã³ãã¬ãŒãããã¡ã€ã«åã§èå¥ãããå Žå ãšèããŠããŸãã 以äžã«è©³ããéãããŸãšããŠãããŸãã template ãš include helm create ã§chartãäœæããéã«çæããããã³ãã¬ãŒãã«äŸãããã®ã§èŠãŠã¿ãŸãããã helm create template_test ãšããŠäœæããchartã«ãã templates/_helpers.tpl 1 ãèŠããšã {{-define"template_test.chart"-}}{{-printf"%s-%s".Chart.Name.Chart.Version|replace"+""_"|trunc63|trimSuffix"-"}}{{-end}}ãšããéšåããããŸããããã«ããã define ïœ end éã®ãã³ãã¬ãŒãã template_test.chart ãšããååã§includeããŸã㯠template ã§åç
§å¯èœã«ãªããŸãããã®ãã³ãã¬ãŒãã§ã¯ã .Chart.Name ã§chartåïŒä»åã¯template_testïŒ .Chart.Version ã§chartã®ããŒãžã§ã³ïŒChart.yaml ã«èšèŒã®å€ãåæå€ã¯0.1.0ïŒ ãå±éããŸãã é©åœãªConfigMapãäœã£ãŠè©ŠããŠã¿ããšã apiVersion:v1kind:ConfigMapdata:chart_name:|{{ include "template_test.chart" . }} {{ template "template_test.chart" .
éçºäœæ¥ãäžå¿ã«æ§ã
ãªçšéã§éåžžã«äŸ¿å©ãª devcontainer æ©èœã§ãããcontainer å
workspace ã® disk æ§èœãé
ãããåé¡ã®ããã«å®çšã«èããªããšãã£ãããšããããŸãã devcontainer ã«ãã㊠disk ãé
ããšæããã®ã¯ãããããhost åŽã«ãã folder ãéã㊠devcontainer ãèµ·åããéã«ããã® folder ãæ§èœãäœã filesystem ã§ bind mount ãããããã§ã (ãšæã£ãŠããŸã)ã ãããããªäœæ¥ã§ããã°æ°ã«ãªããªãã®ã§ããã身è¿ãªãã®ã§ã¯ npm install ãããããªãšãã§ããããšæ°ã«ãªããŸããã倧ã㪠project ã® build ãšãªããšããªãã®åé¡ãšãªãããšããããŸãã å
¬åŒ: Improve disk performance ã«ãå°çšã®é
ç®ããã£ããããŸããnamed volume ã䜿ã£ãŠè§£æ±ºããããããšããå
容ã§ãã èšæž¬ããŠã¿ã ã§ã¯ãbind mount ãš named volume ã§ã©ã®ãããéãã®ã§ãããã? devcontainer.json ã« mount ã远å ããŠæ€èšŒããŠã¿ãŸããnamed volume nv-proj ã mount ããuser vscode ããå©çšã§ããããã«ããŠããŸããbind mount ã¯ãdevcontainer ã§èªåçã« mount ããã workspace (devcontainer.json ãå«ãå Žæ) ã䜿çšããŸã (ã®ã§ä»¥äžã®èšå®ã«ã¯æç€ºãããŠããŸãã)ã { "name": "Ubuntu", "build": { "dockerfile": "Dockerfile", }, "remoteUser": "vscode", "mounts": [ "source=nv-proj,target=${containerWorkspaceFolder}/named-volume,type=volume" ], "postCreateCommand": "sudo chown vscode:vscode named-volume" } mount ã§ç¢ºèªããŸãããããã fuse.
ããã«ã¡ã¯ãChatGPT ã§ãã åã§ãããã ã®æ
ã·ã¹éšå¡ã®ãã·ã€ã§ãã ãšã³ãžãã¢çµç¹ãããå€ãã®äŒç€Ÿã§ã¯ããããããã«ãåŒç€Ÿã§ãããšã³ãžãã¢ãèªèº«ã®æ¥åã«ä¿ãå
容ã瀟å
åãã«çºè¡šããæ©äŒãæ§ã
ãããŸãããã®äžã§ãããããªãã®ãæšå¹Žã®æ«ã«äŒç»ãããŠãããŸããŠããã®å Žã§ã話ããããŠããã ãã貎éãªã²ãšæ ãããã ããŸãããã²ãšãäžæ 50 å (ãã¡ 10 åã¯è³ªçå¿ç) ãšãªããªãé·ãã®ãã®ã§ããã®ã§æºåãã¡ãã£ãšå¿é
ã ã£ãããããã®ã§ããããªããšãå®èµ°ããããšãã§ããŸããã 仿¥ã¯ããã®å Žã§ã話ãããããšããã€ãžã§ã¹ãã§ãéãããããšæããŸããããã¶ã ãš 70 ã¹ã©ã€ãã»ã©ããã¡ãã£ãšé·ãã®ãšã瀟å
é宿
å ±ãåé€ããããèšäºãšããŠã®äœè£ã«åãããã«ãããç·šéãå ãããããŠããŸãã ãŸãã瀟å
çã§ã¯ “åŒç€Ÿããã” éåžžã«çŽ æµãªèæ¯ãã€ããŠããã®ã§ãããæ®å¿µãªãããã®å Žã§ã¯æ§ã
倧人ã®äºæ
ã«ãããçœäžè²èæ¯ã®å³æ°ãªãã¹ã©ã€ãã§ãéãããŸãã(ã€ã©ã¹ãã¯ãã ããããšã ããã®ãã®ã䜿çšãããŠããã ããŠãããŸããããããšãããããŸã) â» å
容ã¯äžéšã®ã·ã¹ãã ã§ã®äžäŸã§ãããå
šç€Ÿã§ã®åãçµã¿ã»ããªã·ãŒã§ã¯ãããŸããã ã¿ã€ãã«ã¯ã“15åã§ã§ãããµãŒããŒç°å¢æ§ç¯” ãšããŸããã ãã¹ãç°å¢ã QA ç°å¢ãªã©ããµãŒããŒç°å¢æ§ç¯ã£ãŠããã©ããã®ã§ããããšãã課é¡ã®ç¢ºèªãããè¿å¹Žã®ããŸããŸãªä»çµã¿ã®æŽ»çšã«ãããããããæ¥œã«ã§ããäŸããããŸãããšããã¹ããŒãªãŒã§ãã15 åãšããã®ã¯çµæãããããã§ã§ããããã«ãªããŸãããšããæ°å€ãªã®ã§ããããã㯠15 åãããã®äœæ¥ãããã°ãããšã§ã§ãããšããããšã§ã¯ãªããå®éã«ã¯ã³ãã³ã (helm install) ãæã£ãŠããŸãã°äœæ¥çã«ã¯å®äºã§ãããšã¯åŸ
ã€ã ãã§ãã ä»å VM host ããŒã¹ã®ç°å¢ãã Kubernetes ã§åäœãããã®ã«å€ããã®ã§ãããã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãããã£ããè€éãªãããç°å¢æ§ç¯å®äºãŸã§ã¯ Kubernetes ã® reconciliation ãåŸ
ã€ã ãã§ãããšã¯ãããããã 15 åããããããã®ã§ãã å¿
èŠæ§ãäžãã£ãŠããçç±ãšããŠãåã«ç°å¢ãå¢ãããããšããã¢ãããŒã·ã§ã³ä»¥å€ã«ãè€æ°ã®äºæ
ãããããŸããã®éèŠæ§ãå¢ããŠããŠããŸãã ããŸããŸãªçŸå ŽããããŸãããã€ã³ãã©æ
åœããŒã ãããããŠããçŸå Žã§ã¯ãã®ãããªæ¯è²æã«ãªã£ãŠããããšãå€ãã®ã§ã¯ãªãã§ãããããéçºããŒã ããã¯ç°å¢æ§ç¯ã®æ§åãææ³ãªã©ã¯èªèãããã€ã³ãã©ããŒã ã«ããŸããããŠããç¶æ
ã§ããéçºããŒã ãšããŠã¯ããããããã ããªã®ã§æ¥œãªç¶æ
ã§ãããã€ã³ãã©ããŒã ã¯éçºããŒã ã®èŠä»¶ããã£ããææ¡ããå¿
èŠããããè² æ
ãé«ããã§ãã ããã«å¯Ÿã㊠IaC ãåãå
¥ããéçºããŒã äž»äœã«ããŠããŸãããšããå³åŒã§ããç©çãµãŒããŒãããŒã¿ã»ã³ã¿ãŒã§æ±ãã€ã³ãã©ã§ã¯é£ããããšã§ãããã¯ã©ãŠããä»®æ³ç°å¢ãæŽåããããšã§å®¹æã«ãªããŸãããã ãããã¹ãŠãéçºããŒã ã§å®çµããã®ã¯ããããã§ã¯ãããŸãããåŒãç¶ãã€ã³ãã©æ
åœããŒã ãšåæ
ãããŠããäœå¶ãæãŸããã§ãããããããã¯ãŒã¯ãã¹ãã¬ãŒãžãããŒã¿ããŒã¹ã®ãããªé åã¯äžè¬çã«éçºããŒã ã®ã¹ãã«ã»ããã§ã¯äžååãªããšãå€ããæ¬çªç°å¢ã®ã¿ãªããå€éšé£æºãå¿
èŠãªãã¹ãç°å¢ãªã©ã§ã課é¡ãæ®ãããšãå€ãã§ãã ããã㯠IaC ãããªã “3 ç°å¢ä»¥äžã¯ããã€ã§ãããªã” ãšããæèŠã§ããã¹ããšæã£ãŠããããããäŒããã¹ã瀺ããã€ã¡ãŒãžã§ãã ç°å¢ãæ°è»œã«å¢ããã«ããããããéåžžã«éèŠãªãã€ã³ãã§ããç°å¢ããšã«å·®åããããšãããæ°ããç°å¢æ§ç¯ã®é害ã«ãªããŸããããšãã°ãã®ç°å¢ã«ã¯ãã®æ©èœãç¡ãããã®ç°å¢ã§ã¯ DB ã®æ°ã»çš®é¡ãéãããŸããã®ç°å¢ã§ã¯ã¢ããªã±ãŒã·ã§ã³ããŒãžã§ã³ãéã… çã
ã§ãããããã£ãå·®ãæ¥µåå°ããããŠããããšã«ãããç°å¢ãå¢ããããšã楜ã«ãªããŸãããç°å¢ã«ãã£ãŠå·®ããªãã®ã§åäœãèŠãã»å©çšãããšãã«ã誀解ãããŸããããšãå°ãªããªããŸãã ããã«é¢ããŠã¯å
·äœçãªäŸããšã£ãŠããã€ãæãäžãã話ãããã®ã§ãããããã§ã¯å²æãããŠããã ããŸãããŸãã®æ©äŒã«å¥ã®èšäºã§ã§ãã玹ä»ã§ããã幞ãã§ãã ãŸãããã芳ç¹ãå€ãããŸãããèªåå®è£
éšåã®ååšããä»çµã¿ã®èŒãæ¿ãã®é害ã«ãªãããšããããŸããOSS ãå
¬éããã仿§ã«ä¹ã£ãŠãããšããããæŽ»çšããå¥ã® OSS ãå©çšã§ãããããŠãçµæçã«å·¥æ°åæžãã§ããããšããããŸããéã«èªåå®è£
ããããã解決ããã«ã¯ãŸããã®ããã®èªåå®è£
ã®è¿œå ãå¿
èŠã«ãªã£ãŠ… ãšãããã¿ãŒã³ã«ããã£ãŠãããã¡ã§ãã
ãããŸããŠããã§ãšãããããŸãã æ¬ããã°ããŸã éå§ããŠäžå¹ŽãçµéããŠããŸãããããããããŸããã¯ãããŠããæãããŠããŠãããŸããIT é¢é£äŒæ¥çéã§ã¯ãã£ããäžè¬çã«ãªããŸããæè¡ããã°ã®è±çããšããæ§çžã§ãããåŒåŒ±å°ããã°ããŸã ãŸã ãªããšãããã°ã£ãŠããããæåã§ãããŸãã ããã°ãéå§ããŠãããèªèº«ããŸããŸå匷ã«ãªã£ãããšããããä»ç€Ÿæ§ã§åæ§ã®æ¥åã«æºã£ãŠãããããããå¢ããŠããŠããããšãšæãããŸãã®ã§ã仿¥ã¯ããã®ããã°ãã©ã®ããã«éå¶ãããŠããããã·ã¹ãã ã人ã®é¢ãå«ããŠå°ãã玹ä»ã§ããããšæããŸãã ã·ã¹ãã ã»å¶äœããã»ã¹ ãŸããèå¿ã®ããã°ã·ã¹ãã ãšããŠã¯ Hugo ãæ¡çšããŠããŸããcgi çã«ãµãŒããŒã§åäœããŠããŒãžãé
ä¿¡ããã®ã§ã¯ãªããæå
ã§ build ãè¡ããšãµã€ãã«å¿
èŠãª file 矀ãçæããŠãããä»çµã¿ã«ãªã£ãŠããŠãããšã¯ãããéçã« hosting ããã ãã§æžã¿ãŸãããããŸã§ããã°éå¶ãããããšã®ãªãã£ããããã«ãšã£ãŠã¯ãããã ãã§ãæ°é®®ã§å匷ã«ãªããŸããããã®ã¿ã€ãã®ãã®èªäœä»ã«ãè€æ°çš®é¡ãã£ããããŸããããã®äžã§ã Hugo ãéžå®ããçç±ãšããŠã¯ããããè§Šã£ãŠã¿ã段éã§çŽæçãªãšãããããããã«æããããšãšããã§ã«ä»¥å䜿ã£ãããšããã人ãããããšããããæ±ºãæã«ãªããŸããã èšäºã¯ãã¹ãŠ markdown ã§æžãããŠããŸããŠããµã€ãçæã«å¿
èŠãªãã®ã¯ãã®èšäºãå«ã㊠GitLab ã§ç®¡çããŠããŸããèšäºãæžããŠããé㯠Hugo ãæã£ãŠãã server æ©èœã䜿ãããšã§æå
ã§ããã«ç¢ºèªãã§ããéåžžã«äŸ¿å©ã§ããèšäºãæžã人ããã®ãã®ã§èšäºå
ã§äœ¿ãç»åãçšæããŠããŠãGitLab äžã§ãŸãšã㊠review ãããããã«ãªã£ãŠããŸãã ãµã€ãã build ãããããŸã㯠container image ãšã㊠build ããããã previewãstaging ãµã€ãã«åæ ãããŠããŸããçŸç¶ CI/CD ã®æºåãéã«åã£ãŠãããããã®ãããã¯æã§è¡ã£ãŠããŸããcontainer ã®å®è¡ç°å¢ãšããŠã¯ãä»åã¯ããŸããŸãµã ã䜿ã£ãŠãã GKE cluster ããããŸããã®ã§ããããéåãããŠå°çšã® namespace ãã€ããã䜿çšããŠããŸãããã®ç°å¢ã§ã¯ããšããšã¢ã¯ã»ã¹å¶éãæºåããŠããã®ã§ããã®æºåã®æéãçããã®ã¯ãããããŸããã ãã㊠review ã®éçšãçµããã瀟å
éå®ã®æçµç¢ºèªç°å¢ãšæ¬çª (äžè¬å
¬é) ç°å¢ã«æã£ãŠããã®ã¯ã©ãããŠããããšãããŸããšããã¡ããçŸç¶ CI/CD ã®æºåããªããæŽæ°ããšã«ããããå¿ããã㊠upload ããŠããŸãããããããã¯å®ã¯é·ãã SPOF(人é) ã ã£ãã®ã§ãããããããéå¶ã¡ã³ããŒãå¢ããŸããŠäœå¶ãšããŠæŽã£ãŠãã€ã€ãããŸãã ãšã¯ãããã¯ãæåã ãšå®å®æãæ¬ ããéçšã«ãªããã¡ãªã®ã§ãããã¯ãªããšãã·ã¹ãã åããŠãããããšããã§ãã æ¬çªç°å¢ web server èªäœã®ç®¡çã¯æã
ãšããŠã¯ç®¡èœå€ã§ãå°ééšçœ² (念ã®çºããããæããæ
ã·ã¹ã§ãïŒ) ã«é¢åãèŠãŠããã£ãŠããŸããåœããã°ã¯ (ä»éèŠã·ã¹ãã ãšéã£ãŠ) ãã°ããæ¢ãŸã£ãŠããããããªã倧ããªåœ±é¿ã¯ãªãã®ã§ãããããšããŠã¯æ°æ¥œã«æ§ããŠããŸãã å¶äœã¡ã³ããŒã»åå èšäºãæžããŠããã¡ã³ããŒã¯ãµã€ããèŠãŠããã ããŸããšã ããããæ³åããã ãããã§ããããŸã ãŸã å°ãªããæ°äººçšåºŠã§ãŸãããŠããŸãããã®ä»ã«ãã¬ãã¥ãŒã®ã¿åå ããŠãããŠããã¡ã³ããŒãæ°äººããŸããæè¿ å·çè
äžèЧããŒãž ãã§ããŸããã®ã§ããããããã°ãã¡ããã芧ãã ããã
ãã®èšäºã¯AWS for Games Advent Calendar 2022ã®25æ¥ç®ã®èšäºã§ãã çããã¯ãã°ã®æ±ãã«æ
£ããŠãããŸãã§ããããïŒ å¿
èŠãªãã°ã¯å
šãŠç¶ºéºã« ETL ããŠãã€ã§ãã°ã£ã¡ãèŠããç¶æ
ã§ãïŒ ãšãªã£ãŠããã°ã©ããªã«è¯ãããšãããäžã
åŸåãã«ãããã¡ãªéšåããšæããŸããåŒç€Ÿã§ãæ§ã
ãªã²ãŒã ãå¹³è¡çšŒåããŠããäžã 倧éã®ãã°ãããŒããŒããããŠãµãŒãããæ¶ããŠãã ã¿ã€ãã«å¥ã§ããŸãããæãã«äžãæã§ç®¡çããã äœãã€ã³ã·ãã³ããèµ·ããæãæ¥ãã§ããæã«ãµãŒãã« SSH ããŠãã°ãæŒããããªã ãã£ãšèŠããããã«ããã ã¿ãããªè©±ãããã€ã€ããäžã
æãä»ããããã«ããŸãã(䞻㫠syslog åšã)ãä»å AWS ããã®ååããããæè¡ååŸã®äžç°ã§æ€èšŒãã¹ã¿ãŒãããŠã¿ãŸãããããã°ã S3 ã«éããŠã Glue ã§ãªãããããå å·¥ããŠã¿ãŠã Athena ã§ããæãã«é²èЧããŠã¿ãããã ã¿ãããªããšãèããŠãã人ã«ã¯åºãããããããªãå
容ãšãªã£ãŠããŸãã æ¬é¡ ä»åãåé察象ãšãããã°ã¯ ã audit ãã messages ãã secure ãã nginx ( access , error ) ã ã®4ã€ã§ããã²ãŒã ãã°ãéããŠã¿ãããªïœãšæãã€ã€ããŸãã¯æ€èšŒãšããŠãããããã syslog åšããããã£ãŠã¿ãŸããã â»ãã ããåŸåã®ãã°ã®å 工㯠audit ãã°ã®ã¿ãšãªã£ãŠãããŸãã(ãã¹ãŠãæ€èšŒãããããã) ãäºæ¿é ããã°ãšæããŸãã å
šäœãã㌠æ©éã§ãããçµè«ãããæçµçã«ã¯(çŸæç¹ã§)以äžã®ãããªæ§æã«ãªããŸããã é ã远ã£ãŠèª¬æããŸãã åé ãŸãã¯åãµãŒããããã°ãéã㊠S3 ãã±ããã«æ ŒçŽãããŸã§ã®éšåã§ãã å³ã§ãããšã以äžã®éšåãšãªããŸãã ããã§ã¯ããŸãé£ããããšã¯ããŠãããã
éçºç°å¢ãšããŠã® Windows ã«èå³ãå°œããªããã·ã€ã§ãã WSL ã䜿ãããããªããLinux ã target ãšãã server application ã®éçºç°å¢ãšããŠã® Windows 掻çšãããããæ§åãå€ãã£ãŠããŠããããã«æããŸãã ã²ãŒã éçºãªã©ã§ã® Windows 掻çšã®æçšæ§ã¯èšããŸã§ãç¡ãã§ãããããããç¹ã«æã
ã®ããã«æ¬çªç°å¢ã® target ã Linux ãšããŠãã backend engineer åãã«ã¯ãWindows ã䜿ãããšèªäœãè¶³ãããšãªãããšããŸãŸããããšã«ã¯æ³šæãå¿
èŠã§ãããã (ãã¡ãããWindows Server ã䜿çšããŠããå Žåã¯ãŸã£ãããã®éãã§ã¯ãããŸããã) 2022 ãšé¡ããããã«ã¯å€ã話ã°ããã ã£ããããŸããã幎ã®ç¬ãšããããšã§ãä»åã¯ãããã«ã€ããŠãŸãšããŠã¿ãããšæããŸãã Windows åé¡ã®äŸ CRLF åé¡ Windows ã§ã¯æšæºã®æ¹è¡ã³ãŒãã CRLF (\r\n)ãLinux ã§ã¯ LF (\n) ã§ããããã®ãŸãŸäœ¿çšãããšäžéšã®ç¶æ³ã§åé¡ãšãªãããšããããŸãã ããšãã°ãshell script ã® shebang ã§ãã #!/bin/sh(CRLF) ãã®ããã«ãäžè¡ç®ã«æžããŠããããšã§ interpreter ãæå®ãããã®ã§ãããäžèšã®ããã« CRLF ã§çµãã£ãŠãããš shell ã /bin/sh(CR) ãæ¢ããŠããŸãããããªãã®ã¯ãããŸãããããšãªã£ãŠããŸããŸãã ⯠./test.sh zsh: ./test.sh: bad interpreter: /bin/sh^M: no such file or directory ããã解決ããã«ã¯ã以äžã®ããã«ããŸãã â» å®è¡åœ¢åŒ binary file ãªã©ã«ãé©çšããŠããŸããšããããŠããŸãã®ã§å¯Ÿè±¡ã«æ³šæããŸããã
åãããã°æããªã web ãµãŒãã¹ãéçšããŠãããšãäžæž¬ã®äºæ
ãšããã®ã¯èµ·ãããã®ã§ãã ããã°ã©ã ã®ãã°ã§ãã£ãããããŒããŠã§ã¢ã®éå®³ãæ§èœäžè¶³ã§ãã£ãããæã«ã¯çç±ãããããªããäœãããåããªããã§ãæ©æ¥ã«ãªããšãããªããšãããªã… ãªããŠããããšãããã¡ãããäºåã®æºåã¯äžå
šã«ãã€ã€ããããã£ãããšãèµ·ããªãããšãæåã§ã¯ãããŸãããèµ·ãããšãã®ããã«åããŠããã®ããããã€ãªããšã§ãã ä»å㯠“HTTP ã§éããã request å
容ãèŠãŠãæ¡ä»¶ã«ãã£ãŠåŠçãã backend ããããã” ãšããä»®æ³ã·ããªãªãããŠãããããªãã¹ãããããã»ãã
ããªãã«è§£æ±ºã§ããææ®µãèããŠã¿ãŸãã Envoy? è¿å¹Žæ§ã
ãªçšéã§äœ¿ãããŠãã髿©èœ proxyãEnvoyããã£ãš Envoy ãªããããªèŠæ±ãªããŠããããã«ããããŠãããã ããããšããæåŸ
ãæã£ãŠè»œãæ°æã¡ã§ã¯ãããŸããããçµæãå
ã«èšããšéåžžã«èŠåŽããŸãããããæ¬çªç°å¢ã§åé¡ãçºçããŠããæºåãã¯ãããŠããã… ãšãã£ãšããŸããä»åã¯å¿ã«äœè£ãæã£ãŠãã§ã¯ããã£ãŠã¿ãŸãããã 以äžãå
æ¥ install ãã Rancher Desktop ã®ç°å¢ ã䜿ããDocker Compose ã§ EnvoyãNginx container ãèµ·åããŠçžäºéä¿¡ããŠããŸãã Envoy ã®èšå®ãæžã ãã£ãããEnvoy ã®èšå®ãã€ãããŸããããããã§ããã°çµãã£ããããªãã®ã§ãããããããããžãã§ããã ä»å㯠“ãã
ããªãã«” ãšããããšã§ãLua filter ã䜿ããŸããLua ã§ requestãresponse ã®åŠçãçµãã°ããªãããããªããšãã§ããããã§ããããããå®çŸããäŸã document ããªããªãèŠã€ããããéåžžã«èŠåŽããŸããã 以äžã«åäœãã envoy.yaml ã眮ããŠãããŸãã®ã§ã詊è¡é¯èª€ãæ§ã
ãªèŠä»¶ã«åãããŠã®æ€èšŒã«ãå©çšãã ããã HTTP request ãã JSON POST body ãåãåããããã«ç¹å®ã®æåå (äŸã§ã¯ “1234”) ãå«ãŸããŠãããç¹å®ã® backend ã« route ããããšããäŸã«ãªã£ãŠããŸãã admin:address:socket_address:{address: 0.0.0.0, port_value:9901}static_resources:listeners:- name:listener_0address:socket_address:{address: 0.0.0.0, port_value:9902}filter_chains:- filters:- name:envoy.filters.network.http_connection_managertyped_config:"@type": type.
Helm Kubernetes (k8s)ã®ããã±ãŒãžç®¡çãè¡ãã¢ããªã±ãŒã·ã§ã³ãšããŠHelmããããŸãã Helmã§ã¯ãã³ãã¬ãŒãã«ãã£ãŠäœ¿ãimageã®ã¿ã°ãDeploymentã®Podã®æ°ãšãã£ãèšå®å€ããããã€æã«æ³šå
¥ããããšãå¯èœã«ãªã£ãŠããŸãã Helmã®ãã®ãã³ãã¬ãŒããã¡ã€ã«çŸ€ã®åäœãchartãšåŒã³ãŸãããç§ã®ããŒã ã§chartã管çããäžã§optionalãªãã©ã¡ãŒã¿ã衚çŸããããšããŠèºããã®ã§ãŸãšããŸãã chartã®èšèšäžãoptionalãªãã©ã¡ãŒã¿ãhelm templateã§è¡šçŸããå¿
èŠããªãå Žåãå€ããšæãããŸãããèŠä»¶ã®éœåãéçšã®éœåã§æç¢ºã«åºå¥ããããšããå Žåã«åèã«ãªãã°å¹žãã§ãã ããããããš Helmã§æ³šå
¥ããèšå®å€ values.yaml ã以äžã®ãããªæ§é ã«ãªã£ãŠãããšããŸãã setting:foo:100bar:"test string"ãã®ãšãããã®å€ã泚å
¥ããJSONãã¡ã€ã«ãConfigMapãšããŠäœæãããã§ãã { "foo": "100", "bar": "test string" } ãã®ããã«ã¯ã以äžã®ãããªãã³ãã¬ãŒããçšæããã°ããã§ãã --- apiVersion: v1 kind: ConfigMap metadata: name: sample data: sample.json: |- { "foo": {{ .Values.setting.foo | quote }}, "bar": {{ .Values.setting.bar | quote }} }å®éã«ãã³ãã¬ãŒãåŠçã詊ããŠã¿ãŸãããã > helm template ./sample-chart --- # Source: sample-chart/templates/sample.yaml apiVersion: v1 kind: ConfigMap metadata: name: sample data: sample.json: |- { "foo": "100", "bar": "test string" } åé¡ãªãããã§ãã ãšããã§ãæã
ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯fooã¯å€ãã®å Žåã§æ°å€ã§ãããããããnullã®æå³ãæãã㊠"foo": "" ãšèšå®ãããå ŽåããããŸããã
ã¯ããã« ããã«ã¡ã¯ãæ
å ±ã·ã¹ãã éš SRE æ©æ¬ã§ãã æ®æ®µã¯ã¯ã©ãŠããšã³ãžãã¢(SRE)ãšããŠããŒã ãªãŒããããŠããŸããèå³é¢å¿ãã€ã³ãã©ãObservabilityãSREãSecurityãGolangãšãã£ãåéã§ããã Japan Google Cloud Usergroup for Enterprise(Jaguâeâr ãžã£ã¬ãŒãšèªã¿ãŸã)ã§Observability/SREåç§äŒã®ãªãŒããŒãæ
åœãããŠããã ããŠãããŸãããã®çžããã£ãŠå
æ¥Innovators Hive at Cloud Next 2022ã§ã³ãã¥ããã£éå¶ã«ã€ããŠã話ããããŠããã ããŸããã ãã®èšäºã§ã¯çŸåšããŒã ãªãŒããããŠããŠãã«ãã¢ããäžã§ãããSREããŒã ã«ã€ããŠèããŠããããšãã話ããããšæããŸãã ãŸãããã®SREããŒã ã«ã€ããŠã®ã€ã³ã¿ãã¥ãŒèšäºãæ²èŒããããŸãããã¡ã³ããŒãããŒã ã®é°å²æ°ãäŒããããšæã£ãŠäœã£ãŠãããŸãã®ã§ããããããã°ã芧ãã ããã æ¬èšäºã¯ä»¥åJaguâeâråç§äŒã§çºè¡šããè³æã亀ããŠã話ãããŸããå
容ã¯ã·ã¹ãã ãSREãšããŠããããšãšããããããããŒã ãçµç¹ã«ã€ããŠã®çŸåšã§ã®èãæ¹ã«éãããããŠæžããŠããŸãã æã
ã®SREããŒã ã«ã€ã㊠ã¿ã€ãã«ã«âãšããã·ã¹ãã âãšã€ããŠããã®ã¯ãåœç€Ÿã§ã¯ã²ãŒã ãã·ã¹ãã ã«ãã£ãŠããã€ãã®ã€ã³ãã©ããŒã ãååšããŠããããã®äžéšã®ããŒã ãã·ã¹ãã ã§ããããšãæå³ããŠããŸãããããŸã§äžéšã§ã®SREã«é¢ããããšãæžããŠãããã¹ã¯ãšãå
šäœã§ã®åãçµã¿ã§ã¯ãªãç¹ããæ¿ç¥ãããã ãããæã
ã¯äžã®å³ã§å¹ãåºããã€ããŠããã¹ããŒããã©ã³ç³»ã®ããã¯ãšã³ãã·ã¹ãã ãæ
åœããããŒã ã«ãªããŸãã ã·ã¹ãã ãšçµç¹ã®å€é·ã»ã¯ã©ãŠããã€ãã£ãåãšã®é¢ãã ã·ã¹ãã ãšéçºããŒã ã»ã€ã³ãã©ããŒã ã®é¢ä¿æ§ äžå³ã¯ã·ã¹ãã ãšãããåãå·»ãçµç¹ã®é·ç§»ãç°¡åãªå³ã«ãããã®ã§ããäžçªå·ŠåŽã®åã§ããèªç€Ÿã®ããŒã¿ã»ã³ã¿ïŒDCïŒã§ã€ã³ãã©ãšã³ãžãã¢ïŒå³ã®Infra EngrsïŒããµãŒãçã®ã€ã³ãã©ãæ§ç¯ããéçºãšã³ãžãã¢ïŒå³ã®S/W EngrsïŒãããã°ã©ã ããããã€ããŠãµãŒãã¹ãæäŸããŠããæ§åãå³åŒåãããã®ã§ãããã«ãç«ã¡äžŠãã ã¢ã€ã³ã³ã¯DCãã€ã¡ãŒãžããŠè²Œãä»ããŠããŸãã çãäžã®åã¯DCãã¯ã©ãŠãïŒé²ã®åœ¢ã®ã¢ã€ã³ã³ïŒã«å€ãã£ãŠããŸãã2010幎代ããããŸããŸãªã¯ã©ãŠããèªçãåœç€Ÿã§ã掻çšãããŠããŸããããã ããµãŒãã皌åããå Žæã¯å€ãããã®ã®çµç¹ãšããŠã®åœ¢ã¯å€§ããå€ãããŸããã§ãããç©ççãªãµãŒããä»®æ³ãã·ã³ïŒVMïŒã«ãªã£ãããã©ããã³ã°ãé害ãã£ã¹ã¯ã®äº€æãªã©ç©ççãªäœæ¥ãWebGUIãAPIå®è¡ãã³ãã³ãæäœçã«çœ®ãæãããªã©ãããã®ã®ããµãŒããæ§ç¯ãç¶æéçšããã€ã³ãã©ããŒã ãšããã°ã©ã ãéçºã»ã¡ã³ããã³ã¹ããéçºããŒã ãšããå³åŒã¯å€§ããå€ããããšããªãã£ããšæããŸãã ãããŠãäžçªå³åŽã®åã§ãããã5ã10幎åŸïŒããšè¡šçŸããŠããŸãããã¯ã©ãŠãåãé²ãã«ã€ããŠãšã³ãžãã¢ã®çµç¹äœå¶ãå€ããã§ãããããšãå³åŒåãããã®ã§ãã ã¯ã©ãŠããã€ãã£ãã«ãã£ãŠæããå€å ã·ã¹ãã ãããã¯ã©ãŠãã«é©ãããã®ã«å€ããããšãã¯ã©ãŠããã€ãã£ãã®äžã€ã®æå³ã ãšèããŠããŸãããããã«ãã£ãŠçµç¹ã®åœ¢æ
ãèªããšå€åããã§ããããšããããšãå³ã§ç€ºããŠããŸãããããŸã§ãµãŒããäžå¿ã«ã€ã³ãã©ãæ§ç¯ãããŠããŸããããä»åŸã¯PaaSã®æŽ»çšãKubernetesã®ããã«ãããã§ã¹ããå
ã«éçºãšã³ãžãã¢ãæ¯èŒç容æã«ã¯ãŒã¯ããŒãããããã€ããããšãåºæ¥ãã³ã³ããå®è¡ç°å¢ãäžè¬åããããšã§ããã€ã³ãã©ãšã³ãžãã¢ããµãŒããäœãããããéçºãšã³ãžãã¢ã«åŒãæž¡ãããšãã圢æ
ãå°ãªããªã£ãŠããã§ããããšæ³åããŠããŸãã äŸãã°Kubernetesã§ã·ã¹ãã ãæ§ç¯ãããšããã°ãã°éçºãšã³ãžãã¢ãšã€ã³ãã©ãšã³ãžãã¢ã®çµç¹ã§äœãã©ããŸã§ç®¡çããã®ãæç¢ºã«ç·åŒããããšãé£ãããšæããããšããããŸãããã¯ã©ã¹ã¿ã¯ã€ã³ãã©ãšã³ãžãã¢ãèŠããšè¯ããããã§ã¯ãããã§ã¹ãã¯ïŒã³ã³ããã€ã¡ãŒãžã¯ïŒããªã©ãšæ©ãã çµéšã¯çãããããã®ã§ã¯ãªãã§ããããïŒå³ã§ã®â亀ããâã®éšåïŒã ãŸãã€ã³ãã©ãšã³ãžãã¢ã«ãšã£ãŠã¯ãéçºãšã³ãžãã¢ã«è¿ãç«ã¡äœçœ®ã§ã·ã¹ãã ã«é¢ããããã«ãªã£ãããVMãªã©ãããããæœè±¡åãããã·ã¹ãã ãæ±ãããã«ãªãããšã§ç°ãªãã¹ãã«ã»ãããå¿
èŠãšãªãå Žé¢ãå¢ããŠããã®ã§ã¯ãªãããšèããŠããŸãïŒå³ã§ã®âç°ãªãâã®éšåïŒã ãã®ãããªå€åããèªç¶ãšéçºã»ã€ã³ãã©ãšã³ãžãã¢ãšããå¥ã®ããŒã ã§ã¯ãªããœãããŠã§ã¢ãšã³ãžãã¢ïŒå³ã§ã¯ SoftWare EngineerSãšããŠSWEsãšèšèŒïŒãã€ã³ãã©å¯ãã«è©³ãããµã€ãä¿¡é Œæ§ãæ
ä¿ãããšã³ãžãã¢ïŒå³ã§ã¯Site Reliability EngineerSãšããŠSREsãšèšèŒïŒãããè¿ããšããã§äžç·ã«æŽ»åããããã«ãªãã§ããããšèããŠããŸãã ç®æãã¯ã©ãŠããšã³ãžãã¢(SRE)ã®å®çŸ©ãšä»äº ããŸãŸã§èšèŒããèãã¯ãããŸã§çè
ã®ç§èŠã§ã¯ãããŸããããã®èãã«åºã¥ããŠèšè¿°ããSREã®åéèŠé
ãäžéšæç²ãããã®ã«ãªããŸããéåžžã«é¢šåæ·ãåºããå
容ã§ãŸã ãŸã ãããç®æããŠããéäžã§ããããããç®æããŠçŸåšããŒã ãäœã£ãŠããç¶æ³ã§ãã ã¯ã©ãŠããšã³ãžãã¢(SRE)ã®äŸ¡å€æäŸ ã¹ããŒã¯ãã«ããšæäŸãã䟡å€ã®æŽç å
ã®åéèŠé
ã®æç²ã§ã¯æç« ã§SREãéè¡ããããšã®å®çŸ©ãèšèŒããŸããããå³åŒåãããã®ã以äžã®å³ã«ãªããŸãã SREã«ãšã£ãŠã¯å·Šãããšã³ããŠãŒã¶æ§ïŒUserïŒããµãŒãã¹ã€ã³ãã©ïŒå³ã®ãµãŒãã®ã¢ã€ã³ã³ïŒãéçºè
ïŒDeveloperïŒãããããäŸ¡å€æäŸå
ã§ãããå³ã®ãããªæäŸäŸ¡å€ã§ãããšæŽçããŠããŸãã æäŸäŸ¡å€ããã£ã±ãããïŒ ç°¡ç¥åããã°å
ã®å³ã®éãã§ã¯ããã®ã§ãããå®éã®æ¥åãšãªããšæ²¢å±±ãããŸããäžäŸãšããŠä»¥äžã®å³ã«ãªããŸãã衚çŸããããªããã®ã沢山ãããŸãã é¡§å®¢ã®æºè¶³ïŒusersâ happinessïŒãéçºè
ã®æºè¶³ïŒdevelpersâ happinessïŒãè¿œãæ±ããã¹ãããã¹ãããšããã£ã±ãããã€ã€ããèªãã®æ¥åã®è¶³å Žãåºããããã«èªååããã€ã«ã®æ²æ»
ãããããSLI/SLOã®å®çŸ©ãããã…ãªã©ãšããã¹ãããšãããããããšã溢ããŠäœããæãã€ããã¹ããåãããªããªã£ããšããçµéšã¯ãªãã§ããããããããã¯ãã®ãããªç¶æ
ã«é¥ã£ãçµéšããããŸãã ãŸãã¯ã§ãããšããããã»ç¶ããããããšãã æ§ã
ãªããšãéè¡ããã«ããŠãèªåãã¡ãããã©ãŒãã³ã¹ãåºãç¶ãããªããã°ãçµæçã«é¡§å®¢ãéçºè
ãžã®äŸ¡å€æäŸããŸãŸãªããªããšèããŠããŸãããŸãã¯èªåãã¡ã®æºè¶³åºŠããããã»ã¢ãããŒã·ã§ã³ãä¿ãŠããã®ããæãä»ããŠãããšè¯ãã®ã§ã¯ãªããããšããããšã§ãå°ããã¬ãã£ããªèããããããããããŸãããâèªå·±äžå¿çâãšäžå³ã§ã¯è¡šçŸããŸããã
æ¥åžžçã« Docker Desktop ã䜿ã£ãŠå¿«é©ã«ãä»äºããŠãããã·ã€ã§ãã ããã Docker ãããé »ç¹ã«ã¯äœ¿ããªãæ¹ãããšã³ãžãã¢ã§ãªãæ¹ã«å®è¡ç°å¢ãæž¡ãããã ããªã®ã§åã«å®è¡ããã ãã§ãããšããã£ãçšéã«ãDocker Desktop 以å€ã® (ã©ã€ã»ã³ã¹ã®çžããç¡ãã»ããã) éžæè¢ãã»ãããšããå£°ãææèãããã«ãªããŸããã ããã§… Rancher Desktop? æãã Docker Desktop ã®å€äžããã¥ãŒã¹ã話é¡ã«ãªã£ãŠããããRancher Desktop ã§ãããªããããªããšãã§ãããšèããã®ã§ãä»åã¯ãã®äœ¿çšæã詊ããŠã¿ãããšæããŸãã ãã ãæ¥åã§äœ¿ã£ãŠããç°å¢ã¯ããããããªããä»å䜿ã£ãã®ã¯ç§ç© PC ã® Ubuntu Desktop ç°å¢ãå
æ¥ upgrade ãã version 22.10 ã§ããããã€ãã®ããšãæ€èšŒããŸããããæ©èœçã«ã¯ Windows ãªã©ã§äœ¿ãã®ãšããå·®ã¯ãªãã®ã§ã¯ãªãããšæããŸãã(WSL ãšçµã¿åãããŠã®éšåãä»åã¯æ€èšŒã§ããŠããªãã§ãã…) ã§ã¯ãã£ãŠã¿ãŸãããã æ¢å Docker ã® uninstall ãŸãã¯ããšããšå
¥ã£ãŠãã Docker ãæ ¹ãããæ¶ããŸããapt ã§å
¥ããŠããã®ã§ããã®ãŸãŸ å
¬åŒæé ã«åŸã£ãŠå®æœããŸãã åºæ¬çã«ã¯ apt purge ããã ãã§ããã nerdctl + containerd ãè©Šã æ¬¡ã«ãæ¬é¡ããããããããŸãããnerdctl + containerd ãšããæ§æã詊ããŠã¿ããããã¡ããå
ã«ãã£ãŠã¿ãŸããã ããããã»ã©è¿·ãããšã¯ãªãããã¡ãã® Install æé ã«æ²¿ã£ãŠé²ããŸãã äŸåé¢ä¿ã§å¿
èŠãªãã®ãããããããã¥ããã£ãã®ã§ããããããã®ç°å¢ã§ã¯ä»¥äžãäžè¶³ããŠããŠè¿œå ããŸãããç°å¢ã«ãã£ãŠã調æŽãã ããã apt install ãããã® containernetworking-plugins rootlesskit slirp4netns BuildKit https://github.
ã¹ã¯ãŠã§ã¢ã»ãšããã¯ã¹ã§å€åãµãŒããŒãšã³ãžãã¢ãšåŒã°ãããä»äºãããŠããBã§ãã ãªã³ãã¬ãã¹ç°å¢ã§DockerãPodmanã®ã³ã³ãããå©çšããŠãããšããã©ã€ããŒãã¬ãžã¹ããªã建ãŠãå¿
èŠæ§ãåºãŠããå ŽåããããŸãã ãããŠããã©ã€ããŒãã¬ãžã¹ããªã建ãŠããšä»åºŠã¯å®å®ãã皌åã®ããã«ããã©ãŒã¬ãžã¹ããªçãªäœãã建ãŠãããªãããšæããŸãã ä»åã¯ãå®å
šãªãã©ãŒã¬ãžã¹ããªãšã¯ãããŸãããããã£ãã·ã¥ã¬ãžã¹ããªãç°¡åã«å»ºãŠãæ¹æ³ãã玹ä»ããŸãã ãã£ãã·ã¥ã¬ãžã¹ããªã«äœã䜿çšããã ã¬ãžã¹ããªãç°¡åã«å»ºãŠãæ¹æ³ãšããŠãDocker Registry ããããŸãã æ¬åœã«ç°¡åã§ãæäœéã®èšå®ã§ããã°æ¬¡ã®ã³ãã³ãã§ãµãŒãã¹ãç«ã¡äžããããšãã§ããŸãã $ docker run -d -p 5000:5000 --name registry registry ãã®Docker Registryã¯ãã£ãã·ã¥æ©èœãåãã£ãŠããŸãã Mirroring Docker Hub ã®ããŒãžãèŠããšã 次ã®ããã«èšå®ããã°è¯ããšæžããŠãããŸãã Configure the cache To configure a Registry to run as a pull through cache, the addition of a proxy section is required to the config file. To access private images on the Docker Hub, a username and password can be supplied. proxy:remoteurl:https://registry-1.docker.iousername:[username]password:[password] äžèŠãããšãããŒãžåãšèŠåºãã®éããDocker Hubã«å¯ŸããŠã®ã¿åããã£ãã·ã¥æ©èœã®ããã§ãããå®ã¯ãã®ä»ã®ã¬ãžã¹ããªã«å¯ŸããŠãèªèšŒå«ããŠåé¡ãªãæ©èœããŸãã (ãã®æ©èœãããŸãç¥ãããŠããªããããªã®ã§ãä»åãã®èšäºãæžããŠããŸãã)
ããã«ã¡ã¯ãæªã ã«ç«¶éЬã§åœãã£ãããšããªããã·ã€ã§ãã 仿¥ããã¯ã©ãŠãæ©èœããæè»œã«äœ¿ã£ãŠã¿ãã詊ããã¿ãã²ãšã€ãå±ãããŸãã ãªã³ãã¬ã§ã Cloud Logging ã䜿ããã… ãµã ã GCE ã GKE ã䜿ã£ãŠãããšãéåžžã«ãããªã Cloud Logging ã« log ãå
¥ã£ãŠãããã®ã§ããªã³ãã¬ãµãŒããŒãæ±ã£ãŠãããšãã«ããããæ¬²ãããªããŸãããšãããããªãã§ç¡ããã ïŒãšããæ°æã¡ã«ãªããŸãã ããšãã° httpd ã® log ã Cloud Logging ã§èŠããïŒã ããªã®ã«ãäžçŽç·ã®ãµã³ãã«ãèŠã€ãããªãã£ãã®ã§ã€ãã£ãŠã¿ãŸããã container ã§ã詊ãã»ãããã€ãã ãã€ãæããã§ãããç®çã®æå°æ§æãããã«ç¢ºèªã§ãã container image ããããšäŸ¿å©ã ãšæããã§ãã ãšããããšã§ãcontainer ã§ãã£ãŠã¿ãŸãã ä»åã¯ãªã³ãã¬ã§äœ¿ã£ãŠããã¡ãã£ãšå€ãã®ãµãŒãã¹ãæ³å®ããŠãæè¿æŽ»èºãèŠãæ©äŒãæžã£ãŠãã (åäººã®ææ³)ãApache2 httpd ããã䜿ã£ãŠã¿ãŸãããã 以äžã®ããã«ãFluent Bit ãš Apache2 ãå
¥ãã Dockerfile ãã€ãããŸãã FROMubuntuRUN apt update && DEBIAN_FRONTEND=noninteractive apt -y install --no-install-recommends \ sudo git netcat wget gnupg ca-certificates apache2 && \ # Add user & group groupadd demo && \ useradd demo -g demo -m -s /bin/bash && \ echo "demo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ echo "done.
Cloud Functions GCPãæäŸããŠããFaaSïŒFunction as a ServiceïŒã«Cloud FunctionsããããŸãã ããã¯ãGoogleã管çããã€ã³ãã©ã®ããšããŠãŒã¶ãç»é²ãããœãŒã¹ã³ãŒãïŒé¢æ°ïŒãå®è¡ããŠããããµãŒãã¹ã§ã2022幎9æçŸåšã以äžã®èšèªãã©ã³ã¿ã€ã ãšããŠãµããŒãããŠããŸãã1 Node.js Python Go Java .NET Core Ruby PHP ç§ã®ããŒã ã§ã¯Goã䜿ã£ãŠFunctionãå®è£
ããŠããã®ã§ããããã®èšäºã§ã¯ãã®éã®ããŒã«ã«éçºç°å¢ã«ã€ããŠç޹ä»ããŸãã 以éãæ¬çš¿ã§ã¯ãœãŒã¹ã³ãŒãäžã®é¢æ°ã¯ã颿°ããGCPäžã®Cloud Functionsã«ããããªãœãŒã¹ãšããŠã®é¢æ°ã¯ãFunctionããšè¡šçŸããŸãã ããŒã«ã«éçºç°å¢ ããŒã«ã«ã§ã®éçºïŒCloud Functionsã®ããã¥ã¡ã³ãïŒããã 颿°ãããŒã«ã«ã§å®è¡ããã«ã¯ãFunction Frameworks ãŸã㯠Cloud Native Buildpacks ã䜿çšããŸãã ãšã®ããšãªã®ã§ãä»åã¯Function Frameworksã䜿ããŸããGoèšèªã«ãããFunction Frameworkã®ãªããžããªã¯ https://github.com/GoogleCloudPlatform/functions-framework-go ã§ãã 2022幎9æçŸåšãCloud Functionsã«ãããGoã®æšå¥šããŒãžã§ã³ã¯1.16ã§ãã Go 1.16以éã§ã¯ããã©ã«ãã§ã¯Moduleã¢ãŒããããã©ã«ãã«ãäŸåé¢ä¿ã®è¿œå ã«ã¯ go install ãã go get ãæšå¥šãããããã«ãªã£ã 2 ã®ã§ã以äžã®æé ã§ã¢ãžã¥ãŒã«ãäœæãåã³äŸåé¢ä¿ã®è¿œå ãè¡ããŸãã $ go mod init example.com/gcp_sample_func $ go get github.com/GoogleCloudPlatform/functions-framework-go/funcframework $ grep functions-framework-go go.mod require github.com/GoogleCloudPlatform/functions-framework-go v1.6.1 Hello World Goã©ã³ã¿ã€ã ã®å ŽåãHTTPãªã¯ãšã¹ãã«ããããªã¬ãŒããµããŒãããŠããã®ã§ãHTTP GETã«å¯ŸããŠåã«"Hello World" ã®ã¿è¿ãFunctionãå®è£
ããŠã¿ãŸãã
ãã·ã€ã§ãã Docker ã®å©çšã·ãŒã³ãå¢ããIaC ã®åºçªãå¢ãã… ã§ç¢ºå®ã«å¢ããã®ããshell script ãæžãæéã§ãã以åã¯ãããªã«æžããŠããªãã£ãã®ã§ããããŒã«æžãŸããŠããã®ã§ããã調ã¹ããã³ã«äŸ¿å©ãªæ©èœããããã®ã§ããã bash script ãæžããŠããŠãã¢ã¬ãã©ããã£ãŠæžããã ã£ã… ãšããããšãéåžžã«ãããããŸããä»åã¯ãããªäŸ¿å©å°ãã¿ã (ããã«å¿ããŠããŸãèªåã®åå¿ã®ããã«) æžãåºããŠã¿ãŸãããç¬æãšåèŠã®ããããã®ãæ°ã«å
¥ãã»ã¬ã¯ã·ã§ã³ã§å€±ç€ŒããããŸãã 倿°æååããäžéšãåãåºã 倿°ã« file name ãå
¥ã£ãŠãããããã®æ¡åŒµåãã¯ãããããšããããšããããããŸãã $ A=aa.tar.temp && echo ${A%.*} aa.tar ${...} ã®äžã§ % ã䜿ã£ãŠããã®ãã倿°å€ã®å³ç«¯ãã pattern match ããéšåãåé€ãããšããæå³ã«ãªã£ãŠããŸããé¡äŒŒã§ %% ã # ## ãªã©ããããŸãã 倿°å€ã«æååãè¶³ããæååã远å ãã file name ã«äœããè¶³ã㊠cp ãããã¿ãããªããšããããããŸãã $ cp temp.txt temp.txt.b ããã¯ã以äžã®ããã«çãæžããŸãã $ cp temp.txt{,.b} ããã ãã§ãtemp.txt.b ã«ã³ããŒãããŸããåæ§ã«ã, ã®å·Šå³ãå
¥ãæ¿ãããšé (æ«å°Ÿãåé€) ãã§ããŸãã ã²ãšã€åã®ã³ãã³ãåŒæ°ãåå©çšãã ãšã«ãããããªãããšãäºåºŠæžãã®ãããã©ãã ã£ãããâ â ãšãã£ãŠ history ã«æ¢ãåœãŠãŠã file name ãªã©ã®çŽå€ãå
¥ã£ãŠãããšçœ®ãæããªããšãããªããŠäœ¿ãã«ããããšã£ãŠãããŸãããã $ mkdir -p temp/temp/temp $ cd $_ $_ ã¯ã²ãšã€åã®ã³ãã³ãã®æåŸã®åŒæ°ããããããŸããããã«ãããmkdir ããå
ã« cd ã§ããŸãã