AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

ハンズラボ新卒研修2017〜仮想プロジェクト完了報告〜

Pocket

こんにちは!ブログに登場しすぎなPOSチームの渡邉です。

暑さも和らぎ、夏嫌いの私にとってはとても嬉しい季節になりました。
ちょっと寒すぎますけどね。寒気さん本気出しすぎ。

さて、今回は2017年度の新卒を代表して、
私渡邉が新卒研修で行われた仮想プロジェクトについて書きますよ!

研修をメインで担当した三井田の記事(こちらこちら)も是非ご覧ください。

三井田の記事では「研修した側」の視点で書かれているので、
私は「研修された側」の視点からお届けします。

ちなみに研修自体は6月いっぱいで終了しています。大遅刻です。すみません。
今は新卒各々配属先のチームで頑張っています!

 

仮想プロジェクトの概要

 

ざっくりいうと、
〜ユーザーの要求に応えられるエンジニア、チームで円滑に開発を進められるエンジニアになるための「仮想プロジェクト」演習〜
です。(雑すぎ?)

AWSチームのリーダーである鹿倉を仮想のお客様とし、新卒社員5名のみで仮想プロジェクトを遂行します。

ハンズラボの新卒研修の定番です。(まだ2年しか経っていませんが)
来年も、再来年も、お題や形態は変化したとしても、この仮想プロジェクト自体は続いて行くと思います。

 

お題

 

今年の新卒研修のお題は、「botを作ってくれ」というものでした。
鹿倉が提示した機能は以下の5つです。

 

要件1〜4:AWSの情報を取得して通知するBot

  1. 特定のタグが付いているインスタンスの一覧を抽出
  2. RI(リザーブドインスタンス)の適用率を抽出
  3. 特定のセキュリティグループに入っていないインスタンスがないかチェック
  4. 特定のインスタンスの情報(OS,インスタンスタイプなど)を入力すると、日本円でオンデマンド、1年RI、3年RIの金額が出力(価格テーブルは常に最新)

 

要件5:東急ハンズのGoogleカレンダーにスケジュール登録したら、自動でハンズラボのGoogleカレンダーにも登録してほしい

弊社社員は、ハンズラボと親会社の東急ハンズ2つのGoogleアカウントを所有しています。そのため、片方のGoogleカレンダーにしか予定を登録してないと、ほかの人がもう片方のアカウントのGoogleカレンダーだけを見て、予定が空いていると勘違いしてしまうことがあります。そこで、東急ハンズのGoogleカレンダーに予定を登録したら自動でハンズラボのGoogleカレンダーにも同じ予定を登録できるようにしてほしい、という要件を挙げました。
(三井田の記事から引用)

要件1〜4について、フロント側の制限は特にありませんでしたが、私たちは最終的にSlackを採用しました。
弊社ではチャットツールとしてSlackを使っていることが大きな理由です。

 

 

完成品

 

いきなりですが、完成品をご紹介します。

 

 

要件1〜4

各要件ごとに1つのSlackBotを作成し、それぞれのbotを以下のように命名しました。

  • 特定のタグが付いているインスタンスの一覧を抽出:たぐたん
  • RI(リザーブドインスタンス)の適用率を抽出:りざたん
  • 特定のセキュリティグループに入っていないインスタンスがないかチェック:せきゅたん
  • 特定のインスタンスの情報(OS,インスタンスタイプなど)を入力すると、日本円でオンデマンド、1年RI、3年RIの金額が出力(価格テーブルは常に最新):まねたん

 

4人合わせて「Labottan」です!!!!!(らぼったん と読みます)

この名前は、弊社公式キャラクターである「らぼたん」をもじりました。
らぼたん↓

 

らぼたんは本来緑色の髪の毛ですが
Labottanのために色違いを用意して、各botのアイコンに使用しました。

また、Labottanは全てAWS Lambda、AWS APIGateway、Slackで構成されています。

まずはbotを動かすリージョンを設定します。

「set」をトリガーに、4つのbotが参照するリージョンを設定できます。

 

 

要件1 たぐたん

 

たぐたんの機能は3つあります。

  1. 「tag」と投稿すると、アカウント内のEC2に登録されているタグのキー一覧を表示

    たぐたんの目的は指定したキーバリューを持つインスタンス情報を見ることなので、
    まずは絞り込みのためにキーの一覧を取得します。

  2. 「tag <key>」と投稿すると、指定されたキーのバリューを一覧で表示(重複無し)

    キーを絞り込んだら、続いてバリューの一覧を取得します。

  3. 「tag <key> <value>」と投稿すると、指定されたキーバリューを持つEC2インスタンスの情報を一覧表示

    キーバリューを指定したことで、目的のインスタンス情報を得ることができます。

トリガーはtagのみではなく、「Tag」「たg」も対応しています。

構成図は以下です。

例えば、同僚の田中さんが管理しているインスタンス情報を確認したいとします。

・あれ?オーナー管理って、「Owner」だっけ?「Name」だっけ?→「Tag」と投稿してキー一覧を取得
・そうだ、Ownerだった。あれ、名前は大文字だっけ?フルネーム?→「Tag Owner」と投稿してバリュー一覧を取得
・そうだ、Tanakaでいいんだ。インスタンス情報は〜→「Tag Owner Tanaka」と投稿して情報を見る

といった使い方ができます。

 

 

要件2 りざたん

 

りざたんの機能は以下です。

・「riu」と投稿すると、購入済みのリザーブドインスタンスの適用率を表示する

RIUは「reserved instance utilization」の略です。
トリガーはriuのみではなく、「RIU」「りう」も対応しています。

構成図は以下です。

「リザーブドインスタンスめっちゃ買ってるけど、ほんとに全部使ってるよね?大丈夫よね?」という時に
パパッと確認する、という使い方ができます。

 

 

要件3 せきゅたん

 

せきゅたんの機能は3つあります。

  1. 「sg」と投稿すると、セキュリティグループ一覧が表示される

    こちらもたぐたんと似ており、セキュリティグループ一覧が表示されます。

  2. 「sg <セキュリティグループ名>」と投稿すると、指定したセキュリティグループの空いているポート番号と、適用されていないインスタンスを表示する
    セキュリティグループが許可するトラフィックを、インバウンド・アウトバウンドそれぞれ確認できます。また、そのセキュリティグループが適用されていないインスタンス一覧を取得できます。

  1. 「sg port <ポート番号>」と投稿すると、指定したポートが空いているセキュリティグループとインスタンス一覧を表示する
    0番ポートが空いているセキュリティグループと、そのセキュリティグループが適用されているインスタンス情報を表示します。

トリガーはsgのみではなく、「SG」も対応しています。

構成図は以下です。

セキュリティグループの見直しをするときは1、
必須のセキュリティグループなのに数がおかしい!どの子だ入ってないのは!というときは2。
8080ポートは開いてちゃいけないから、確認しとこう、というときは3、といった使い方ができます。

 

 

要件4 まねたん

 

まねたんの機能は以下です。

・「price <OSタイプ> <インスタンスタイプ>」と投稿すると、支払い方法ごとに現在の料金が日本円で表示される

構成図は以下です。


客先などで現在の利用料金をサクッと知りたいときに非常に便利!
リアルタイムでAWS使用料(USドル)と日本円のレートを取得し、計算しています。

 

 

要件5

 

東急ハンズのカレンダーとハンズラボのカレンダーで予定を共有・統合したいという要件です。

こちらはAWSではなくgas(Google Apps Script)を使用しました。

構成図は以下です。

15分ごとに発火するトリガーにより、
東急ハンズのGoogleカレンダーのイベントを取得し
そのイベントに招待されている人のハンズラボアカウントをゲストに追加する、という仕組みです。

ハンズラボのカレンダーにも東急ハンズの予定が登録されるようになったので
スケジュールのすれ違いも起こりにくくなった・・・かな?

 

振り返り

 

さて、ここからは振り返りです。
プロジェクトの最終発表会が終わって、打ち上げでどんちゃん騒ぎした翌日に
みんなで(死んだ顔で)ふりかえりをしました。

それを思い出しながら、ひとりふりかえり会をしてみます。

いちばん「成長した」部分

→「5つの要件で1つのプロジェクトだ」という意識が芽生えた
新卒は5名、要件も5個、じゃあひとり1要件でいいよね!ってスタートしたんですが、
自分のタスクでいっぱいいっぱいになって、チームメイトの遅れに「我関せず」な顔をしている時期がありました。
お客様は個人個人に依頼しているわけではなく、会社・チームに依頼しているのに、
「自分の進捗は大丈夫だしいいや」「遅れてるけど自分でなんとかするしかない」って思考になっていました。
最終的には各要件ごとではなく作業内容ごと(テスト班・プレゼン資料作成班)に分かれて作業ができるようになり、
「5つの要件で1つのプロジェクトだ」という連帯感が生まれました。

 

あまり「成長できなかった」部分

→「根回し」
プレゼンや報告会のスケジューリングはギリギリなことが多く、予定を抑えたら抑えっぱなしでした。
事前になんの話をするのか、どんな相談をしたいのかを伝えておくことは最後まであまりできていませんでした。

例として、お客様役の鹿倉にテスト用アカウントを発行してほしいと伝える時に
事前に伝えていたら打ち合わせでアカウントを受け取ることができたかもしれませんが、
打ち合わせでいきなり伝えるので「作ったら連絡します」となり、スケジュールが遅れ・・・

なんてことが最後まで続いてしまいました。

 

いちばん悩んだこと

→コミュニケーション不足による足並みのズレ
(これは私しか思ってないかもしれないんですが)
ひとり1要件でやってしまうと、他の要件には関与しなくていい!という気持ちが生まれて
序盤は特にチームなのに個人制作のようになってしまっていました。
もちろん、制作物やスケジュールに影響も出ますし、何よりも居心地の悪さに悩みました。
夜な夜な三井田にチャットでどうしよう〜助けて〜〜〜(号泣)って散々したなあ・・・今もしてるわ・・・(遠い目
今となってはあの時悩んでよかったと思ってます。今後に活かせそうな話をたくさん聞けました。

 

 

まとめ

 

笑って悩んでぶつかって笑って、とても研修らしい研修になったと新卒ながら思います。

今年の新卒の配属先はバラバラですが、それぞれが先輩に紛れながら頑張れているのは、
「仮想プロジェクトを乗り越えられた」という経験と自信の賜物です。

来年、再来年の仮想プロジェクトはどうなるのかな?
半年後に迎える後輩たちに負けないように、これからも頑張ります!

 

(最終発表会翌日、三井田からのお祝いの花が!さながら卒業式!ありがとうございました!)

Pocket