さくらのインターンシップ 2016夏 エンジニアコースレポート~台風とともにインターン生がやってきた!暴風が吹き荒れた五日間~

みなさんこんにちは!
さくらインターネット人事部の山田です。

2016年8月29日から9月2日にかけてインターンシップ(エンジニアコース)が行われました。
(毎年恒例行事となってきました。過去のインターンシップ記事もぜひご覧ください。)
さくらの最前線で活躍するエンジニア社員とインターン生が助け合い、共に戦いあった様子(何があった!??)をインターン生自身にレポートしていただきます。ヤラセは一切無しです。
インターンシップで奮闘した日々に興味がある方はぜひご覧ください!興味が無い方もご覧ください!

一日目

インターンシップエンジニアコースに参加させて頂きました、インターン生の井上です。
エンジニアコースの一日目についてレポートします。

開幕

8/29東京の雲模様

インターン初日という晴れやかな日なのにも関わらず、あいにくの空模様です。
まず初めに、東京支社での田中邦裕社長による挨拶や、メンター、インターン生の自己紹介といった開会式の後、オフィス遊覧と共に簡単な社風紹介を受けます。

ある社員と学生が談話する姿

オフィス内にある検証用簡易ラックを見学

詳細なオフィス紹介については、四日目に行われるのですが、オフィスの雰囲気を感じるには必要十分な時間でした。その時見たさくらインターネットの姿に、どこか羨ましさを覚えた事が、今も私の記憶に残っています。

「秘密基地」へ向かう

そんなこんなで、東京支社での開会式を終え、向かった場所は某所のデータセンター、
さくらインターネットの心臓部です。

データセンター出入口

入室前に受けた禁忌事項についての説明を肝に命じつつ、

データセンターの施設に足を踏み入れます。
ファンの轟音や冷たい室温に凍えつつ見る設備は、
「まるで秘密基地みたいだ」と形容されるほどに魅力的でした。

配線等について説明を受ける

配電設備

初めてのラッキング

その後は、皆さんお待ちかねのサーバのラッキング。

実際に手を動かす前に、まずは構築するネットワークや、ラッキング方法等、
様々なことが教授されます。

秘密のネットワーク

それはともかくとして、ラッキングです。
ここでラッキングされたサーバが、四日目の実習で使われる事もあり、
ラッキングする手にも熱がこもります。

ラッキング1

ラッキング2

コンシューマーでは人気の「無線」も、エンタープライズな場所では役立たないので、
ケーブルの取り回しも考えなくてはいけません。

ケーブルの取り回しを考えている

ケーブルの取り回しを考えている2

キッティング

時間を忘れ、ケーブルの取り回しについて議論を重ね、時はすっかり午後6時、
食事の時間、本日のカリキュラムは終わりです。

食事の様子 セールスコースと合流し、懇親会です

二日目

エンジニアコース二日目は佐藤がレポートします。

インターンシップ二日目は8月30日に行われました。30日といえば・・・.

台風だ!

( 日本気象協会より引用)

そうです。非常に強い台風10号が関東地方に接近していました。我々がお邪魔していた場所はというと、東京は新宿区・・・

ヤバい!!

「インターン二日目にして早くも休業か!?」 と独り焦っていました。 インターンシップ中に連絡手段として使っていたSlackでも・・・

「台風がそれてくれることを祈るのみ!!!」
との通達が・・・

不安すぎる・・・。
そんな不安の中一夜を過ごしました。
そして翌朝Slackを見てみると・・・

「さて、心配しておりました台風ですが、東京はなんとか大丈夫そうです。本日はプログラム通りに【決行】いたします!!」
とのこと。

ヤッター!!!

そんなわけで無事インターンシップ二日目が始まりました。

再びラッキング

二日目最初に行ったのはサーバのラッキング。社員の方々の指導のもと、二人一組で声を出して連携しながらラッキングしました。
高価なサーバを扱うということでドキドキでした。
一日目にもラッキングしていたから少しは手早く作業できた、かな (^_^;)

更にケーブルにタグ付けを行いました。地味だけどとても大事な仕事。

DMM.make AKIBAへ

午後からはDMM.make AKIBAにお邪魔しました。 ハンダゴテやオシロスコープに興味津々です。

ちょうどよい時間だったので、施設内のカフェテリアでランチを摂ることに。

施設見学

その他の施設も案内していただきました。そしてDMM.make AKIBAのレリーフの前で記念撮影。これでインターンシップ二日目は終了です。

ちょっとおまけ

DMM.make AKIBAの設備で作った、さくらインターネットお手製社員証がプレゼントされました。これで私もさくらの社員ですw

三日目

エンジニアコースの三日目については、山口が書かせていただきます。

なんだここは!?さくらガレージ??

まず、さくらガレージにおじゃましました。
さくらガレージは、Dockerコンテナホスティングサービス「Arukas(アルカス)」を開発・運用しているチームが働いている場所、とのことです。

とにかく、すごくおしゃれ!!

ロフトが秘密基地みたいで楽しい!!

東京支社とはまた違う意味でいい雰囲気でした。自分もこんな場所で開発してみたい!

Arukas / Docker 体験

Arukasのサービスを使ってDockerを立ち上げました!ポチポチとボタンを押していくだけなので、すごく簡単。
途中でペイントチャットアプリのコンテナを起動してお絵かきをしたり、アプリの名前に記号を入れてデバッグしてみたり、いろいろ体験しました。
ここで自分たち用のコンテナを立てるのですが、それをどう使ったかは、四日目のお楽しみ、ということで。

ランチ

さくらのガレージから少し歩いたパスタ屋さんへ。これまたおしゃれなお店でスパゲッティをいただきました!!

見た目もおしゃれで味もすごくおいしかったです!社員のみなさんと話をしながら楽しく過ごしました!!

ハードウェア交換/スイッチ交換

データセンターへ移動してハードウェア交換とスイッチ交換を体験しました。
さくらインターネットの須藤さんによる講習で、実際の保守をするときに、

  • どのような対応をすればいいのか?
  • 作業にどれくらい時間がかかるのか?
  • どんなことに気をつけるのか?
  • どこまで責任をもつのか?
  • どこから復旧したと言えるのか?

など、実際の業務を意識するようにと教えていただき、みんな今までとは違いより一層緊張感を持ちながら実習に挑むことができました。

まずは自分たちで交換する機材の確認をして・・・

慎重に運び出し、ラッキングする際の注意点を再び確認。

そして、みんなで声を掛け合いながらラッキング。

そして"秘伝のたれ(さくらインターネット独自のノウハウ)"を拝借して、各種設定を実施。これで導入完成です!!

ひと仕事終えて一安心。最後にみんなでラーメン屋店長のポーズをして三日目が終わりました!!

三日目振り返り

三日目は、さくらガレージに行って、さくらの違う一面も体験することでき、またデータセンターでは実際にハードとスイッチの交換といった貴重な体験をすることができました。
さくらインターネットでは、「どんな開発をして」「どんな保守をして」「何に気をつけているか」など、実際の現場を目で見て、そこで働いている人の生の声を聞くことができたことも、貴重な経験でした。
インターンで学んだことを残りの学校生活に活かしていきたいと思います!!

さくらインターネットさんありがとう!!

四日目

エンジニアコース四日目は怒田がお伝えします!

オフィス見学

四日目は、改めて東京支社の各フロアを説明を受けながら巡りました。

見晴らしの良い会議室から面白いものを探しているインターン生たち。僕は高所恐怖症 なので窓から一歩引いたところで見学しています。

自動販売機のラインナップが気になる6人。

MQでホワイトボックススイッチを操作してみる

さくらインターネットではホワイトボックススイッチというOSレベルからユーザがいじれるスイッチを 利用しており、各スイッチの操作にメッセージキューを使っているそうです。疎結合でスケールする アーキテクチャにする時によく使われるAWS SQSが代表例ですね。

今回はRabbitMQとPythonを使ってホワイトボックススイッチ を操作するという課題を3人1組の
2チームに分かれ、適宜アドバイスをもらいながら進めていきました。

1. 自分たちがラックマウントしたサーバで動いているArukasクローン上でRabbitMQコンテナを立てる

Dockerコンテナホスティングサービス Arukas でサクッと立ち上げました。 デプロイが楽なので、今回のように軽くオープンソースソフトウェアを試す時に嬉しいですね。

2. RabbitMQを介してスイッチに文字列を送る

RabbitMQが用意できたので慣習通り「Hello World」を送ります。ライブラリは pika を使っています。ホワイトボックススイッチ側の プログラミングは単にSSHでスイッチに入って行っています。

# Mac側
import pika

# RabbitMQに接続する
url = 'amqp://example.com' # サーバの居場所
connection = pika.BlockingConnection(pika.connection.URLParameters(url))
channel = connection.channel()

 # helloキューをなければ作る
channel.queue_declare(queue='hello')

# "Hello, World!" を送る
channel.basic_publish(exchange='',
                      routing_key='hello',
                      body='Hello World!')
# ホワイトボックススイッチ側
import pika


# RabbitMQに接続する
url = 'amqp://example.com' # サーバの居場所
connection = pika.BlockingConnection(pika.connection.URLParameters(url))
channel = connection.channel()

 # helloキューをなければ作る
channel.queue_declare(queue='hello')

def callback(ch, method, props, body):
    print(body)

channel.basic_consume(callback, queue='hello', no_ack=True)
channel.start_consuming()

3. 送った文字列をシェルコマンドとして実行する

ホワイトボックススイッチ側の callback() に以下のコードを加えて完成です。このままでは RabbitMQサーバにアクセスできる人が任意のコマンドを実行できる問題や、shlex.split が ValueError を出す時があるのを無視している問題などはありますが、そこはご愛嬌ということで。

# ホワイトボックススイッチ側 callbackの最後
args = shlex.split(body)
try:
    out = subprocess.check_output(args)
except subprocess.CalledProcessError as e:
    out = e.output

余談

技術的な内容は読むの書くのも疲れるので、ここで四日目の昼食をご紹介しておきます。落ち着いた雰囲気と美味しい唐揚げで至福のひと時でした。

4. 実行結果を返す

新しくbyeキューを作り、そこに実行結果を送っています。ただ、この方法だとリクエストが複数になった 場合にどのリクエストの結果なのか分からないので、まともなものを作りたい方はRabbitMQのRPCのチュートリアルを参考にしましょう

# Mac側
def callback(ch, method, props, body):
    print(body.decode('utf-8'), end='')
    sys.exit()

ch.basic_consume(callback, queue='bye', no_ack=True)
# ホワイトボックススイッチ側 callbackの最後
ch.basic_publish(exchange='', routing_key='bye', body=out)

5. ネットワークインターフェイスのport stateを返す

思った以上に進捗を出したので急遽追加された課題です。ネットワークインターフェイスの状態 (UP/DOWN) を返すようにするという問題です。

ポートの状態は ip addr show dev <インターフェイス名> で取れるので、ホワイトボックススイッチ側 でコードを実行する代わりに ip(8) を実行すれば終わりです。str.split で頑張っているあたりが とてもUNIX的でほっこりしますね。

# ホワイトボックススイッチ側
def callback(ch, method, props, body):
    args = ['ip', 'addr', 'show', 'dev', body]

    try:
        out = subprocess.check_output(args)
    except subprocess.CalledProcessError as e:
        out = e.output

    state = out.split('\n')[0].split()[8]
    ch.basic_publish(exchange='', routing_key='bye', no_ack=True)

感想

ホワイトボックススイッチ側が普通のLinuxマシンと同じようにプログラミングができるせいでRabbitMQ の入門になってました。Linuxが動くので当たり前ではありますが、普段触れないハードウェアで動くのは 独特のワクワク感があって楽しいですよね。

今回利用したDockerコンテナホスティングサービス Arukas は現在β版で 無料で使えるので、皆さんもコンテナをArukasで立てて遊んでみてはいかがでしょうか!

五日目

エンジニアコース五日目(最終日)のレポートは伊藤 拓夢(github)が担当します!

物語は深夜から・・・

さて、五日目というより、四日目の深夜から物語は始まります・・・。
えっ?何故かって?

事前課題の発表準備に追われてたからだよ!!!

さくらインターネットのインターンでは事前課題があります。
と言ってもそこまで難しくはありません。
ただ、楽だからと放置しないようにしましょう・・・(仮にわからないことがあっても社員の方が丁寧に対応してくれます!)

今回私達の課題は「さくらのIoT Platform」を使ったWebアプリの制作でした。
(さくらのIoT Platformについてはこちらをご参照ください)

さくらのIoT Platform α

燃料補充。劇的な開発速度の向上。

午前

午前は講義がありました。基本的にはDC(データセンター。サーバが置かれてる場所です。要はさくらインターネットの心臓部です)やサービスの運用方法、攻撃への対処方法などについてのお話しいただきました。

講師の鈴木さん

と、須藤さん

と、伊東さんです!

あんまり詳しいことは書けないのですが、普段聞けない話が盛りだくさんでみんな興味津々でした!新しい技術を使っていたり、ないものは自分たちで作っていたりと素敵な会社だなぁだと思いました。

講義の様子。

みんな興味津々。

上の写真は、さくら独自のDDoS対策を擬似的に体験している様子。DDoSはいけないことです。絶対に真似しないでください!

いつもお待ちかねのランチ

最終日ということもあってか(?)、めっちゃ高そうなレストランで食事をしました。とても美味しかったです。

午後

午後は我々インターン生による課題制作の発表タイムです。
前日(四日目)に行われたRabbitMQの課題と、事前課題の「IoT Platformを使った自由制作」について発表しました。

ここでは、さくらの社員が審査員となって各制作物について批評してくれます。
これは緊張します・・・

まずは、RabbitMQの課題発表からです。自分たちのチームは、自分も含めて皆、技術的にそこまでレベルが高いほうではなかったので、使ってみた感想や、うまく使いこなせなかった事についての発表となってしまいました(汗

一方、後半のチームは技術に強い人が多く、自分の制作物についてしっかりと解説されていました。

ちなみに発表の場所はこんな感じです。
椅子やテーブルが自由に配置でき、自由な雰囲気でやることができます!朝の会議などにも使われていました。

発表の様子。さくらの社員の前で発表・・・みんな緊張です。

次に、事前課題である「IoT Platformを使った自由制作」の発表です。

先陣を切ったのは山口くんでした。
IoT Platformを使って温度データを収集し、AIを使って部屋の様子をコントロールする、という内容でした。スマートホームの実現化に一歩前進した感じがしました。

次に発表したのは篠原ちゃんでした。
こちらは、温度と湿度を可視化するツールの作成でした。あまりWeb周りをやってこなかったそうですが、それでもここまでできるようになっていたので、さくらのIoT Platformはすごいなと思いました。

次に発表したのは自分(伊藤)でした。
自分は、センサーから設定値を超えるとSlackのBotが動くようにして、返信するとエアコンがつく、というものを作りました。
デモ自体はうまく動作していましたが、なぜか肝心のエアコンが動作せず・・・もう少し精進が必要です。
ただ、自分で作っておきながら、Arduinoとの双方向通信がこんなにも簡単にできてしまうことにとても驚きました。

実際のデモの様子

次は怒田くんの発表でした。
怒田くんは、センサーを使って空港内で最適な寝る場所を見つける、というWebアプリを制作していました。実際にセンサーを動かしながら空港を歩いてみたそうで、そのデータが表示されたときにはみんな「おぉ・・・(そこまでしたのか!)」と声が上がりました(笑

次は佐藤くんの発表でした。
佐藤くんは、センサーを使ってドライアイになりそうな時を警告するWebアプリをつくりました。
IT関連で働いているとドライアイになりやすいので、こういったデバイスがありがたいなと思いました。

最後は井上くんの発表でした。
井上くんは、センサーから読み取った値から不快指数を計算して、不快指数が高くなるについて怪しげな施設が建設される、という謎のWebアプリでした(笑
少々ぶっ飛んでいましたが個人的には一番面白い発表だと思いました。

さくらの方に批評していただいたあと、どの制作物が一番よかったか(優勝)を決めてくれます。優勝したのは怒田くんでした!
おめでとうございます!

審査員はIoT事業推進室の山口室長。プレゼントはさくらインターネットIoT Platform製品キットです!!

懇親会

さてさて、これでインターン活動は終わりです。後はセールスコースの方たちと合流して楽しい懇親会が待っていました。

また懇親会と同時に、LT大会も行われて会場は大盛り上がりでした!

そして、二次会はなべこうハウス(※)で行われ・・・

楽しいインターン生活は終わりました。

(※)なべこうハウスとは
インターン生が宿泊していたゲストハウスです。通称"なべこうハウス"。エンジニアとセールスの両コースが一緒に宿泊していました。ここではインターン生同士(とゲストハウスのオーナーも 笑)が交流をし、学び合い、たくさんの思い出ができました!なべこうハウス滞在記については別号にて!

最後に

さくらインターネットさんのインターンは本当に盛りだくさんの五日間でした!
いろんなことを実習でき、いい経験になりました!みなさんも是非応募してみてください!!

さくらインターネットの皆さん、ありがとうございました!