TECH PLAY

株匏䌚瀟スクりェア・゚ニックス

株匏䌚瀟スクりェア・゚ニックス の技術ブログ

å…š99ä»¶

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 できたす。