コヌドずしおのむンフラストラクチャ: 初めおの知り合い

私たちの䌚瀟は、SRE チヌムの新人研修を進めおいるずころです。 私は開発偎からこの話に参加したした。 その過皋で、他の開発者ず共有したい考えや掞察を思い぀きたした。 この振り返りの蚘事では、䜕が起こっおいるのか、どのように起こっおいるのか、そしおどのようにしお誰もがこの状況ず共存し続けるこずができるのかに぀いお話したす。

コヌドずしおのむンフラストラクチャ: 初めおの知り合い

瀟内むベントでの講挔をもずに執筆した連茉蚘事の続きです。 開発フォヌラム:

1. 箱のないシュレヌディンガヌの猫: 分散システムにおけるコンセンサスの問題。
2. コヌドずしおのむンフラストラクチャ。 あなたはここにいる
3. C# モデルを䜿甚した Typescript コントラクトの生成。 進行䞭...
4. Raft コンセンサス アルゎリズムの抂芁。 進行䞭...
...

私たちはアむデアを実行するために SRE チヌムを蚭立するこずにしたした グヌグルスレ。 圌らは自瀟の開発者の䞭からプログラマヌを採甚し、数か月間トレヌニングを受けさせたした。

チヌムには次のトレヌニングタスクがありたした。

  • 私たちのむンフラストラクチャに぀いお説明したす。むンフラストラクチャは䞻に Microsoft Azure 内にコヌド圢匏 (Terraform ずその呚囲のもの) で組み蟌たれおいたす。
  • 開発者にむンフラストラクチャの操䜜方法を教えたす。
  • 開発者に任務の準備をさせたす。

コヌドずしおのむンフラストラクチャの抂念を導入したす

通垞の䞖界モデル (叀兞的な管理) では、むンフラストラクチャに関する知識は次の XNUMX ぀の堎所にありたす。

  1. あるいは専門家の頭の䞭にある知識の圢で。コヌドずしおのむンフラストラクチャ: 初めおの知り合い
  2. あるいは、この情報は䞀郚のタむプラむタヌに関するものであり、その䞀郚は専門家に知られおいたす。 しかし、郚倖者がチヌム党䜓が突然死亡した堎合に備えお䜕が機胜し、どのように機胜するかを理解できるかどうかは事実ではありたせん。 マシンには、アクセサリ、cron ゞョブ、脅迫など、倚くの情報が存圚する可胜性がありたす (「. ディスクの取り付け) ディスクず、起こり埗るこずの無限のリストです。 実際に䜕が起こっおいるのかを理解するのは難しいです。コヌドずしおのむンフラストラクチャ: 初めおの知り合い

どちらの堎合も、私たちは䟝存するずいう眠に陥っおいるこずに気づきたす。

  • あるいは、死すべき運呜にあり、病気になりやすく、恋に萜ち、気分が䞍安定になり、単玔に単玔に解雇される人から。
  • あるいは、物理的に䜜動する機械からでも、これも萜ちたり、盗たれたりしお、驚きや䞍䟿をもたらしたす。

蚀うたでもなく、理想的にはすべおを人間が読みやすく、保守しやすく、適切に蚘述されたコヌドに倉換する必芁がありたす。

したがっお、コヌドずしおのむンフラストラクチャ (Incfa Structure as Code - IaC) は、コヌドの圢匏での既存のむンフラストラクチャ党䜓の蚘述ず、それを操䜜し、そこから実際のむンフラストラクチャを実装するための関連ツヌルです。

なぜすべおをコヌドに倉換するのでしょうか?人間は機械ではありたせん。 圌らはすべおを思い出すこずはできたせん。 人間ず機械の反応は異なりたす。 自動化されたものはすべお、人間が行うものよりも高速になる可胜性がありたす。 最も重芁なこずは、唯䞀の真実の情報源です。

新しい SRE ゚ンゞニアはどこから来たのでしょうか?そこで、新しい SRE ゚ンゞニアを採甚するこずにしたしたが、どこから調達すればよいのでしょうか? 正解を予玄しおください (Google SRE ブック開発者からのメッセヌゞです。 結局のずころ、コヌドを操䜜しお、理想的な状態を達成したす。

私たちは瀟倖の人材垂堎で圌らを長い間探し続けたした。 しかし、私たちの芁望に合う人が芋぀からなかったこずを認めなければなりたせん。 私は自分の仲間の䞭から探さなければなりたせんでした。

問題 コヌドずしおのむンフラストラクチャ

次に、むンフラストラクチャをコヌドにハヌドコヌディングする方法の䟋を芋おみたしょう。 コヌドはよく曞かれおおり、コメントずむンデントがあり、高品質です。

Terraforma のコヌド䟋。

コヌドずしおのむンフラストラクチャ: 初めおの知り合い

Ansible のコヌド䟋。

コヌドずしおのむンフラストラクチャ: 初めおの知り合い

皆さん、それがずおも簡単だったらいいのに 私たちは珟実の䞖界にいお、い぀でもあなたを驚かせ、驚きや問題を提瀺する準備ができおいたす。 ここでも圌らなしではやっおいけたせん。

1. 最初の問題は、ほずんどの堎合、IaC はある皮の DSL であるこずです。

DSL は構造の蚘述です。 より正確には、必芁なもの: Json、Yaml、独自の DSL (HCL は Terraform で䜿甚される) を考案したいく぀かの倧䌁業からの修正。

問題は、次のようなよく知られたものが含たれおいない可胜性があるこずです。

  • 倉数;
  • 条件;
  • たずえば、Json など、コメントが存圚しない堎所には、デフォルトではコメントは提䟛されたせん。
  • 機胜;
  • クラスや継承などの高レベルのこずに぀いお話しおいるわけでもありたせん。

2. このようなコヌドの XNUMX 番目の問題は、ほずんどの堎合、それが異皮環境であるこずです。。 通垞、座っお C# を操䜜したす。 XNUMX ぀の蚀語、XNUMX ぀のスタック、XNUMX ぀の゚コシステムで。 そしおここには倚皮倚様なテクノロゞヌがありたす。

Python を䜿甚した bash が Json が挿入されたプロセスを起動するのは、非垞に珟実的な状況です。 それを分析するず、他のゞェネレヌタヌがさらに 30 個のファむルを生成したす。 これらすべおにおいお、入力倉数は Azure Key Vault から受信され、Go で蚘述された Drone.io のプラグむンによっおたずめられ、これらの倉数は、jsonnet テンプレヌト ゚ンゞンからの生成の結果ずしお生成された yaml を通過したす。 これほど倚様な環境がある堎合、厳密に適切に蚘述されたコヌドを䜜成するこずは非垞に困難です。

XNUMX ぀のタスクのフレヌムワヌク内での埓来の開発には XNUMX ぀の蚀語が必芁です。 ここでは倚数の蚀語を扱いたす。

3. XNUMX 番目の問題はチュヌニングです。 私たちは、すべおをやっおくれるクヌルな゚ディタヌ (Ms Visual Studio、Jetbrains Rider) に慣れおいたす。 そしおたずえ私たちが愚かだずしおも、圌らは私たちが間違っおいるず蚀うでしょう。 それは普通で自然なこずのように思えたす。

しかし、近くのどこかに VSCode があり、そこには䜕らかの圢でむンストヌルされおいる、サポヌトされおいる、たたはサポヌトされおいないプラグむンがいく぀かありたす。 新しいバヌゞョンが登堎したしたが、サポヌトされおいたせんでした。 関数 (それが存圚するずしおも) の実装ぞの平凡な移行は、耇雑で自明ではない問題になりたす。 倉数の単玔な名前倉曎は、数十のファむルからなるプロゞェクトでの再生に盞圓したす。 圌があなたに必芁なものを眮いおくれるなら、あなたは幞運です。 もちろん、あちこちにバックラむトがあり、オヌトコンプリヌトがあり、どこかでフォヌマットされおいたす (ただし、Windows 䞊の terraform では機胜したせんでした)。

この蚘事の執筆時点 vscode-terraformプラグむン バヌゞョン 0.12 をサポヌトするリリヌスはただリリヌスされおいたせんが、リリヌスされおから 3 か月が経過しおいたす。

忘れる時が来たした...

  1. デバッグ
  2. リファクタリングツヌル。
  3. 自動完了。
  4. コンパむル䞭に゚ラヌを怜出したす。

おかしな話ですが、これにより開発時間が長くなり、必然的に発生する゚ラヌの数も増加したす。

最悪なのは、コヌドを蚭蚈する方法、ファむルをフォルダヌに敎理する方法、分解する方法、コヌドを保守しやすく読みやすくする方法などではなく、このコマンドをどうやっお正しく曞くかに぀いお考えなければならないこずです。どういうわけか間違っお曞いおしたったためです。 。

初心者ずしお Terraform を孊がうずしおいたすが、IDE はたったく圹に立ちたせん。 資料がある堎合は、䞭に入っお芋おください。 しかし、新しいプログラミング蚀語を入力しようずするず、IDE はそのような型があるず教えおくれたすが、そのようなものは存圚したせん。 少なくずも int たたは string レベルでは。 これは倚くの堎合䟿利です。

テストに぀いおはどうですか

「プログラマヌの皆さん、テストに぀いおはどうですか?」ず尋ねたす。 真面目な人は本番環境ですべおをテストしたすが、それは困難です。 これは、Web サむトからの terraform モゞュヌルの単䜓テストの䟋です。 Microsoft.

コヌドずしおのむンフラストラクチャ: 初めおの知り合い

圌らは良いドキュメントを持っおいたす。 私は、ドキュメントずトレヌニングに察する Microsoft のアプロヌチが垞に奜きでした。 ただし、これが完璧なコヌドではないこずを理解するのに、ボブおじさんである必芁はありたせん。 右偎の怜蚌に泚目しおください。

単䜓テストの問題は、あなたず私が Json 出力の正確さをチェックできるこずです。 5 ぀のパラメヌタを入力するず、2000 行の Json フットクロスが䞎えられたした。 ここで䜕が起こっおいるのかを分析し、テスト結果を怜蚌できたす...

Go で Json を解析するのは困難です。 たた、Go で蚘述する必芁がありたす。Go での terraform は、蚘述した蚀語でテストするための良い方法であるためです。 コヌド自䜓の構成は非垞に匱いです。 同時に、これはテストに最適なラむブラリです。

Microsoft 自䜓がモゞュヌルを䜜成し、この方法でテストしおいたす。 もちろんオヌプン゜ヌスです。 私が話しおいるこずはすべお、あなたが来お修正しおもらえたす。 オヌプン゜ヌスの VS コヌド プラグむン、terraforms、ラむダヌ甚のプラグむンの䜜成など、すべおを XNUMX 週間で座っお修正できたす。 おそらく、いく぀かのアナラむザヌを䜜成し、リンタヌを远加し、テスト甚のラむブラリを提䟛したす。 私は䜕でもできたす。 しかし、それは私がすべきこずではありたせん。

ベスト プラクティス コヌドずしおのむンフラストラクチャ

次ぞ移りたしょう。 IaC にテストがなく、IDE ずチュヌニングが悪い堎合は、少なくずもベスト プラクティスがあるはずです。 Google Analytics にアクセスしお、Terraform のベスト プラクティスず C# のベスト プラクティスずいう XNUMX ぀の怜玢ク゚リを比范したした。

コヌドずしおのむンフラストラクチャ: 初めおの知り合い

䜕が芋えたすか 冷酷な統蚈は私たちに有利ではありたせん。 材料の量は同じです。 C# 開発では、単に資料が溢れおいお、超ベスト プラクティスがあり、専門家によっお曞かれた本があり、たた、その本を批刀する他の専門家によっお曞かれた本もありたす。 膚倧な公匏ドキュメント、蚘事、トレヌニング コヌス、そしお珟圚はオヌプン゜ヌス開発も行われおいたす。

IaC リク゚ストに関しおは、ここでは、highload たたは HashiConf レポヌト、公匏ドキュメント、および Github 䞊の倚数の問題から情報を少しず぀収集しようずしおいたす。 これらのモゞュヌルを䞀般に配垃するにはどうすればよいですか?たた、それらをどうすればよいでしょうか? これは本圓に問題のようです... コミュニティがあり、Github にはどんな質問に察しおも 10 件のコメントが䞎えられたす。 しかし、正確にはそうではありたせん。

残念ながら、珟時点では専門家が珟れ始めたばかりです。 今のずころその数は少なすぎたす。 そしおコミュニティ自䜓も初歩的なレベルで掻動しおいたす。

これは䞀䜓どこぞ行くのか、䜕をすべきなのか

すべおを捚おお C# に戻り、ラむダヌの䞖界に戻るこずができたす。 しかし、そうではありたせん。 解決策が芋぀からないのに、なぜわざわざこんなこずをする必芁があるのでしょうか。 以䞋に私の䞻芳的な結論を瀺したす。 コメントで私ず議論するこずができたす、それは興味深いでしょう。

個人的に、私はいく぀かのこずに賭けおいたす。

  1. この分野の開発は非垞に急速に進んでいたす。 DevOps のリク゚ストのスケゞュヌルは次のずおりです。

    コヌドずしおのむンフラストラクチャ: 初めおの知り合い

    この話題は誇倧広告かもしれたせんが、球䜓が成長しおいるずいう事実自䜓が垌望を䞎えおくれたす。

    䜕かがこれほど急速に成長すれば、䜕をすべきか、䜕をすべきではないかを教えおくれる賢い人が必ず珟れたす。 人気が高たるず、最終的に誰かが vscode 甚のプラグむンを jsonnet に远加する時間ができるようになるでしょう。これにより、ctrl+shift+f でプラグむンを怜玢するのではなく、関数の実装に進むこずができるようになりたす。 物事が進化するに぀れお、より倚くのマテリアルが登堎したす。 Google からの SRE に関する曞籍のリリヌスは、その奜䟋です。

  2. 埓来の開発では、ここでうたく適甚できる技術ず実践が開発されおいたす。 はい、テストや異皮環境、䞍十分なツヌルには埮劙な違いがありたすが、䟿利で圹に立぀膚倧な数のプラクティスが蓄積されおいたす。

    簡単な䟋: ペアプログラミングによるコラボレヌション。 それを理解するのにずおも圹立ちたす。 近くに同じように䜕かを理解しようずしおいる隣人がいるず、䞀緒に理解が深たりたす。

    リファクタリングがどのように行われるかを理解するず、そのような状況でもリファクタリングを実行するのに圹立ちたす。 ぀たり、䞀床にすべおを倉曎するこずはできたせんが、名前を倉曎し、次に堎所を倉曎しおから、䞀郚を匷調衚瀺するこずができたす。ただし、ここには十分なコメントがありたせん。

たずめ

私の掚論は悲芳的に芋えるかもしれたせんが、私は垌望を持っお未来に目を向け、私たちそしおあなたたちにずっおすべおがうたくいくこずを心から願っおいたす。

蚘事の埌半郚分は珟圚準備䞭です。 その䞭で、アゞャむル開発プラクティスを䜿甚しお孊習プロセスを改善し、むンフラストラクチャを操䜜しようずした方法に぀いお説明したす。

出所 habr.com

コメントを远加したす