はじめに
2023年12月13〜19日の間、ペパボ技術部の新人2名が、株式会社ハートビーツ様ご監修のもとに実施されたインフラ領域に関する研修に参加しました。
目的
本研修を通じて、多くのサービスで利用されるインフラ基盤の汎用的な技術の習得を目指し、今後、業務にジョインする際にスムーズに各ツールや技術を扱えるようにする。 また、インフラ技術に対する距離感を縮め、自信を持って業務に臨めるようにしたい。
研修でやったこと
以下が最終的な構成内容となります。
具体的にはAWSに構築したパブリックなVPC上で2台のEC2の冗長構成をとり、 ロードバランサとしてはALBでHTTP/HTTPSを受けるように構えております。 なお、ドメインの名前解決にはRoute53を活用しています。
サービス運用中のログ取得にはfluentdを利用し、取得した内容はS3に取集しております。 ログの確認はAmazon Athenaを利用します。
また、今回の構成ではAWSのリソースはTerraformで定義し、サーバの構築にはAnsibleを利用しています。
1日目:AWS上でインフラ基盤を構築する
内容:AWSでマネージメントコンソールからインフラ基盤を手作業で構築する
pab0tesu & chiroru:AWSについては機能のアップデート・追加のみならず、マネジメントコンソールのUIの変化も非常に多く、 技術として知っているものでも以前試したときから操作感が異なっており、作業の際に都度確認する必要がありました。
また、この作業を実際の業務に置き換えた場合、担当者が慣れ親しんだUIも時代や世代により異なり、 手作業で変更した際に、担当者間の認識のズレが起因してヒューマンミスの誘発や冪等性の担保が難しくなるのではと疑問が残りました。
講師の方からも通常業務で手作業で操作するよりも、コードとして構成管理するのが一般的になりつつあると説明いただきました。
敢えてマネジメントコンソールから作業をしてみることで、2日目以降より進めたIaCの効果を前もって感じられるセクションとなりました。
2日目:インフラ基盤をTerraformを用いて構築する
内容:インフラ基盤をTerraformで構築し、GitHub Actionsを利用してterraform plan
の実行を自動化する
pab0tesu & chiroru:Terraformを用いたAWSリソースの展開については、先の手作業での操作に比べてもヒューマンミスの減少や冪等性の担保といった点で、非常に有効な技術であり、その効果を改めて実感できる機会となりました。
前日マネジメントコンソールで作成したリソースを複数の機能として分解し、コードに起こした際に組み立てていくような感覚からも、各リソースの理解をより深めることができました。
また、Terraformのdry-runであるterraform plan
をGitHub Actionsで自動化し、pushと同時にTerraformにて展開される各リソースの状態を一覧できる点は、複数人でインフラ基盤を構築する際のレビューで実行結果等を確認しやすくなるというメリットを実感することができました。
3日目:Ansibleを利用してwebサーバを実装する
内容:AWSリソースに対してAnsibleを用いてサーバ構築を自動化し、GitHub Actionsを利用してPlaybookのチェックを自動化する
pab0tesu:Ansibleについては普段の業務でも利用する機会は多く、社内でも様々なサービスで利用されている技術ですが、実際に利用する際には各モジュールの機能についてあまり深く調査して利用するといった経験がありませんでした。そのためこれまではリファレンスを参照しとりあえず利用するという方法で書いていました。今回の研修では各モジュールをできる限り深掘りし、「この機能ならより簡単に実装できそう」、「この設定を実現したい場合、実はこっちのモジュールの方が良さそう」という観点を持って実装に臨むことができました。
今後もAnsibleに限らず、技術とむきあう際には必ず「深掘り」というフェーズを加えて、技術に対する理解度を上げてから取り組むようにいたします!
chiroru:Ansibleとは何か?やドキュメントの見方、手元で動作確認を行う方法やファイル読み込みの順序、リポジトリ構成の仕組み、moduleや変数の決まり事など、手を動かしながらAnsibleの基礎的な仕組みを学ぶことができました。 普段見ているサービスの中でも、Ansibleで管理されたコードを読むことがあったり、Puppetからの移行タスクなどもあるので、実務の中でもすぐに使える知識を習得できました。
4日目:構築されたサーバ上でDockerによるアプリケーションの展開
内容:サンプルアプリケーションのコンテナイメージをDocker上で実行し、操作について学んだ
pob0tesu:Dockerという技術の特性上さまざまなアーキテクチャ上でも同一の環境を準備でき、それらの共有が容易に行えるという点で非常に大きなメリットを感じることができました。 具体的には、エディターであるVisual Studio Codeの機能ではありますが、Dockerと組み合わせたdevcontainerを利用すれば事前に準備した共通の環境をスピーディにチーム間で共有することが可能となり、新たなメンバーがジョインされる際にもつまずきを少なくすることができるのではと思っております。 こちらも是非積極的に利用していこうと思います!
chiroru:以前よりDockerを利用した開発経験はありましたが、実際に自分でコンテナを定義するのではなく、用意されたイメージを利用する機会が多かったです。 今回自分でコンテナを定義する際にデータを永続化する必要があり、そこでボリュームを作成したのですが、普段業務で利用するK8sのボリュームという機能に繋がり、コンテナ技術における「ボリューム」の役割についての理解が深まりました。
5日目:構築したサーバのログ出力からさまざまな方法で調査・解析を行う
内容:構築したサーバが出力するログをLinuxコマンドを用いて確認し解析を行う / AWS上でもAmazon Athenaを利用して同様のログ出力を抽出する
pob0tesu:Linuxサーバから出力されるログの確認については最初はうまく取得できない項目などがありましたが、講師の皆様にフォローいただき、最終的には必要な情報を汲み取ることができるようになりました。 しかしまだまだshell力不足を実感する良い機会となりました、、、今後も精進いたします! また、Amazon Athenaでのログ抽出は初めての経験でしたが、SQLの非常に柔軟な絞り込みが可能なこともあり、出力結果も見やすく整備されていたため、あまり迷いなく利用することができました。
chiroru:現在業務では、調査に必要な情報を取得する際に、どのツールで何ができ、どこを見ればよいのかを勉強中ですが、必要な情報をコマンドでも取得できるようにすることも重要だと感じました。 ツールのログ解析との比較として、awkなどを利用したログ解析も行ったのですが、ツールに比べ欲しい情報をコンパクトに取得できる(小回りが効く)イメージを持ちました。そこで、情報を取得する手段としてCUIという選択肢もあると、より欲しい情報を最短で手に入れられるようになるのではないか?と感じました。 今後は手元で取得する方法も学びつつ、欲しい情報を状況に応じて取得できる手段を増やしていきたいです。
まとめ
pab0tesu:今回の研修では主に、パブリッククラウド上でIaCを用いたリソースの展開、サーバの構築、またその先のログ取得等の運用に関わる部分までを経験することができました。
前述の通り各セクションごとに大きな収穫があったことはもちろん、今後の技術に向き合う際の心構えをアップデートできました。 また研修の合間などで、最新の技術動向や講師の皆様がキャッチアップされている情報等を共有いただいたことも、大変ためになる内容でした。
研修で得られた技術やマインドセットは早速業務でも活躍できるものと思います。 本研修の機会をご用意・ご手配いただいた皆様、本当にありがとうございました!
chiroru:研修を通じて技術的な知識を得ただけでなく、便利な技術やツールを活用する際の、その背後にある概念や仕組みを理解する重要性について、改めて考えるようになりました。
それは例えば、必要な情報を可視化してくれているツール(Amazon Athena)と同じものを取得するコマンドを考えたり、講師の方との対話の中で、K8sで使われるコンテナの設定がLinuxのcgroupsという概念に基づいていることを初めて知る中で感じました。
現在の業務の中では、K8sに触れる機会が多いため「K8sで実現しているこの機能の元はどんな仕組みなのか?」と、シンプル->複雑な仕組みの理解 へのアプローチがしやすくなっているのではないかと思います。
便利なものに触れることで、その背後に潜む仕組みや原理をのぞくことを心がけ、利便性と裏側の仕組みの双方を大切にしていきたいと思いました。