ゆっくりのんびり。

いの (@inox_ee) です

NTT コミュニケーションズのインターンシップに参加しました

はじめに

2 月 14 日から 25 日までの 2 週間1、NTT コミュニケーションズのインターンシップに参加させていただきました。 せっかくなので熱が冷めぬうちにブログをまとようと思います。

インターンシップ概要

職場体験型インターンシップ| NTT コミュニケーションズ より引用

クラウドサービスにおける仮想サーバ基盤の開発

● 業務内容

クラウドサービスにおける IaaS 環境の開発に携わって頂くことで、IaaS 環境がどのように構成され、お客様に仮想サーバとして提供されているのかを経験して頂きます。

・Smart Data Platform (SDPF)における、仮想サーバを提供するための基盤開発(スクラム

・OpenStack を用いた仮想基盤開発

参考: https://event.cloudopsdays.com/codt2021/talks/15

● 応募条件

【必須】

Linux を利用したことがあり、基本的な操作が可能であること。

・Git/GitHub を利用し、ソフトウェア開発経験がある

・Ansible を利用した構築経験があること。

Python を利用した開発経験があること。

【推奨】

・仮想化環境の構築経験があると望ましいです。(KVM/QEMU

・OpenStack を利用した仮想環境の利用経験があると望ましいです。

参加のきっかけ

就活に向け秋冬インターンを探していた昨年 11 月末、「現場のエンジニアと一緒に解く!コーディング体験 | NTT コミュニケーションズ」 に参加しました(これはこれで面白かった)。
自分はこれまで上位のアプリケーションレイヤメインで開発していたこともあり、正直仮想化周りの興味がなかった2知識が乏しかったのですが、この 1 day イベントを期にクラウド基盤開発に興味を持った & 知り合った社員の方から NTT コミュニケーションズでの取り組みを伺ったことから、同チームコースのインターンシップに申し込みました。おそらくイベントに参加していなかったらインターンも応募してなかったのではないでしょうか?
いくつか選考を経て晴れて合格通知を頂いたので、2 週間の業務体験に励む運びとなりました。

インターンシップで取り組んだこと

私が配属された仮想サーバチーム(通称 VS チーム)では、OpenStack をベースとする SDPFクラウドサービス基盤を開発しています。OpenStack の中でも Nova/Cinder/Glance/Masakari といったコンポネントを取り扱っており、まさに仮想マシンインスタンスの中核を担う領域と言えるでしょう。

そもそも私は OpenStack もなーんとなく知っている程度3だったので、オンボーディングのレクチャーはとても勉強になりました。NTT コミュニケーションズ が提供するサービスの概要から QEMU/KVM の仮想化まで網羅していただけでなく、ハンズオンも取り入れながらレクチャー頂いたことで、その後の IS を進めるにあたって必要な知識を短時間で身につけることができました。特に Ansible を活用した大規模システムの CI/CD 運用周りの内容は非常に面白かったです。

充実したレクチャーを経て、いよいよインターンシップ(以降 IS)のメインテーマとして OpenStack のバージョンアップに伴うログ基盤の改修に向けた検証に取り組みました。

第 1 ステップでは商用ログの分析を行いました。商用サービスに届いた実際のログを解析し、時系列ヒストグラムを作成することでリージョン別/コンポネント別/曜日別のリクエストの特徴を確認しました。社員の方と共有した結果、これまで認識していなかった(であろう)特徴が発見できたことが分かり、興味深い結果になったと思います。

第 2 ステップでは、ログ分析から得られた結果をもとに負荷試験を行いました。
k6 という負荷試験ツールを用いて商用環境を模したリクエストシナリオを実行し、ログ基盤、特に Elasticsearch サーバやコントローラノードにどの程度の負荷がかかるかを確認しました。 自分は JMeter と呼ばれる Apache 製のツールを使ったことがあるのですが、今回の IS で用いた k6 は、テストシナリオの実行エンジンに若干のクセがあるものの、 JavaScript でシナリオが書ける・公式のサンプルシナリオ集が充実しているなど、かなり使い易い負荷試験ツールという印象が残りました。
また、負荷の確認には Datadog という SaaS 型の運用監視サービスを利用しました。Docker イメージが配布されていることから、OpenStack の各コンポネントで Docker コンテナを立てるだけで配置が完了します。あとは Datadog のダッシュボードをカスタマイズすれば様々なメトリクスでマシンの状態を監視することができるので、構築はラクチンでした4
パラメータを調整し様々なシナリオを実行、ホストの状態を監視するといったことを繰り返すことで、負荷を確認していきました。CPU/io/ネットワーク/ディスク/ボリューム/応答時間等の観点からホストの負荷を観察し、社員の方と結果を共有しました。具体的なログ基盤の要求性能を提案するまでには至りませんでしたが、Elasticsearch やコントローラーノード、 envoy と呼ばれるプロキシコンポーネントインスタンスサイズを決定する一助になったそうなので、IS で一定の成果を残せたことを非常に嬉しく思います。

参加イベント

ただ上記の業務をこなすだけでなく、2 週間の間にいろいろなイベントに参加させていただきました。

  • Sprint planning/review/retrospective
  • Journal Club
  • 朝会/夕会
  • Lunch 会
  • OpenHub 講演

Sprint meeting はアジャイル開発を採用する VS チームの主軸となるミーティングです。社員の方がどのような業務をどのように進めているか、間近で体感することが出来ました。IS での取り組みについて発表する時間も何度か頂けたので、緊張しながらも社員の方と直接議論できたのは非常に貴重な体験でした。 また Journal Club と呼ばれる社内勉強会にも 2 回参加しました。技術書の書評を始めとした業務に関連する内容のほかにも、英語の学び方といったユニークな回まで様々あったようです。自分も僭越ながら dotfiles5 についてお話させていただきました。結構ウケが良くて LT にちょうどいいんですよね、1 年近く改修してないけど。

職場環境

オミクロン株の流行もあり全日リモート開催となったものの、なんら支障をきたすことなく業務をこなすことができました。
タスク管理はプロジェクト管理ツールで一元化しており、業務で必要なドキュメントも全て整備されていました。話によるとコロナ以前から体制が出来ていたので、フルリモートへの移行もそれなりにスムーズだったとか。ちなみにドキュメントツールはほぼ全てアクセス可能にしていただいていたので、暇を見つけてはチラ見していました。時間があればもっとサーフィンしてみたかったです。
加えて魅力的だったのがフレックスタイム制です。研究室と就活の都合上、1 時間だけインターンを抜けざるを得ない日がいくつかあったのですが、分断したり翌日にまわしたりといった対応が可能でした。また社員さんも病院に行ったりサウナへリフレッシュしに行ったりと、かなり柔軟な働き方をされているようでした。

また Slack や NeWork 上でのコミュニケーションも活発だったのが印象的でした。節々にエンジニアっぽい雰囲気を感じたので、個人的には波長が合うなぁと居心地の良さを感じていました6。この心理的安全性はチーム由来のものではありますが、トレーナー、チームメンバー、さらに他チームの社員さんまで(?!)、たった 2 週間の IS 生である自分をあたたかく迎え入れてくださったことで、多くの方と交流できたと思います。改めてありがとうございました。

感想

1day イベントを皮切りに色々な巡り合わせを経て参加に至ったインターンシップでしたが、非常に充実した 2 週間になりました。
「大規模プラットフォームを支える基盤システムの全容を知りたい」という私の希望に合致したテーマをもとに、技術的な部分は勿論のこと、業務の進め方や考え方など、あらゆる箇所で勉強になる経験に触れた期間だったと思います。
特に、「何をゴールにその技術を採用するのか」「何を根拠にプロジェクトを進めていくか」といった目的意識の重要性は非常に濃く自分の中で印象に残っています。様々なメトリクスから観測したホストマシンの状態からどのような推論を得て、次の負荷試験のパラメータを決めていくか、のような業務を通じたミクロ視点で学んだだけでなく、参加したミーティングの議論の中からも、チームのマインドとして根付いていることを肌で感じることが数多くありました。

これまではネットワークインフラのイメージが強かった NTT コミュニケーションズですが、プラットフォームサービス開発の業務・環境・実際に携わる人の働き方を直接体験でき、とても良い経験になったと思います。自身の成長に繋がっただけでなく、私が漠然と描いている理想のエンジニア像が垣間見えたような気がしています。

NTT コミュニケーションズの皆様、なにより二週間つきっきりで指導してくださったトレーナーさん、短い期間でしたが大変お世話になりました。ありがとうございました。


  1. 2 週間とはいえ祝日で 1 日減って 9 営業日は短ーい!ちなみに夏 IS はシルバーウィークを挟んでいたらしい。IS 生を労るためにあえて休日を挟んでいるのかはたまた…

  2. OS やカーネル周りはまだまだ勉強が足りないので苦手意識があったんですよね

  3. 研究室で導入作業を横目で見ていた程度でしたが、今 IS でその知識がめちゃくちゃ役立ちました。いつどんな知識が役に立つのか分からないので、日頃アンテナを広く持っておくことは大事。

  4. Linux 上でベタに sar コマンドを使ったホストマシンの状態確認もしたのですが、まぁ GUI の方が快適ですよね。見やすいし。

  5. https://puyobyee18.hatenablog.com/entry/2021/05/23/142907

  6. :iihanashi: