エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

新卒エンジニア全員がAWS研修に参加してきました

2021年4月に新卒として入社いたしました、永山です。

クラウドサービスであるAmazon Web Services (AWS) は、現在ではWebサービスを運営する企業や、あるいは個人にとっても重要な位置を占める技術としての地位を確立しています。 エムスリーでもサービスのクラウド移行を積極的に進めており、既に多くのサービスがAWS上で動作しています。

www.m3tech.blog

www.m3tech.blog

www.youtube.com

一方で、初学者にとってはAWSが提供する膨大な数のサービスの全容を学び、適切にシステムを設計するためのノウハウを得ることは困難です。

そこで、エムスリーエンジニアリングフェローであるAmazon Web Services Japanの富岡さんの縁もあり、我々エムスリーの新卒エンジニア6名は6月1日から6月3日の3日間、Amazon Web Services Japan さんが主催する新卒ソフトウェアエンジニア向けのオンラインAWS研修プログラム「AWS Jumpstart for NewGrads」に参加いたしました。

研修の概要

AWS Jumpstart for NewGradsはその名前の通り、新卒でIT企業に入社したITエンジニアがAWSの各サービスの特性やそれらを用いたシステムのアーキテクティングの方法を学ぶための研修プログラムです。 その初回である本年度は、エムスリーを含む15社の新卒エンジニア計66名が参加しました。

この3日間の研修では、主に以下のようなプログラムを通じてAWSに関する理解を深めました。

  1. AWSを用いてシステムを構築する際に考慮すべき事項を学ぶための講義
  2. Amazon Elastic Container Service (ECS) やAmplifyといったAWSによって提供されているサービスを実際に利用し理解を深めるワークショップ
  3. 他社の新卒エンジニアを含む少人数のチーム毎に架空のチャットアプリケーションのアーキテクチャを自ら考え検討するディスカッション

f:id:ryoga-nagayama:20210720094516p:plain
AWS Jumpstart for NewGrads のスケジュール

1. アーキテクティングに関する講義

3日間のうち最初に行われたのは「アーキテクティングのコツ」に関する講義です。 この講義ではAWSを用いてシステムを構築する際に意識すべき11の観点について、それぞれアンチパターンとベストプラクティスを知ることでよりよい設計の方法を学びました。

f:id:ryoga-nagayama:20210720094856p:plain
クラウドシステムを構築する上で意識すべき11の観点

これらの項目を意識してシステムを構築することで、以下のような利点が得られます。

  • 可用性・冗長性・耐障害性
  • 開発・管理・保守の容易さ
  • パフォーマンスの向上
  • コストの最小化
  • セキュリティリスクの低減

2. ワークショップ

研修では、実際に手を動かして簡単なサービスのデプロイを体験し理解を深める2つのワークショップも行われました。

  • コンテナ技術と、作成したコンテナをAWS上で実行するマネージドサービス*1であるECSに関するワークショップ
  • 高速にWebアプリケーションのプロトタイピングを行えるツールチェインであるAmplifyに関するワークショップ

ECSワークショップ

このワークショップでは ECS を用いてスケーラブルなECSクラスターを構築する方法を学びました。

コンテナ技術であるDockerの概要やDockerfileの記述の仕方といった基礎や、コンテナオーケストレーションサービスであるECSの特性について学び、その後それらを用いて実際のクラスターを構築するまでの過程を体験しました。

Amplifyワークショップ

このワークショップでは、Amplifyを用いてリアルタイムなタイムラインを備える簡単なSNSを作成しました。

Amplify は、AWSを用いてWebアプリケーションもしはモバイルアプリケーションを素早く開発するためのプラットフォームです。

このワークショップの資料は一般に公開されています。

amplify-sns.workshop.aws

ワークショップは上の資料の1から4章の内容に準じる形で行われ、最終的にGraphQLエンドポイントを備えた単純なバックエンドを持つTwitter likeなWebアプリケーションをAWS上に公開するまでの手順を体験しました。

3. アーキテクティングに関するディスカッション

3日間の研修のうち、およそ半分の時間はこのディスカッションに充てられていました。

この時間では、各社の新卒4〜6名で構成された即席のチームに別れ、架空のチャットアプリケーションを題材に、その要件を満足できるようアーキテクチャに関するディスカッションを行います。 チャットアプリ (Unicorn Chat) にはシンプルな機能要求と厳しい性能要求が課されており、これらを満足できるように、かつ性能やコスト面を最適化しつつ高い可用性を実現できるようなシステムを構築することが求められます。

f:id:ryoga-nagayama:20210720140537p:plain
架空のチャットアプリケーション (Unicorn Chat) の要件

また、最終日にはチームごとに設計したアーキテクチャについての成果発表を行いました。

参加者の感想

北川の感想

2021年の新卒でAI・機械学習チームの北川です。僕は今まで触れたことがあるのがGCPだけで、AWSはほとんど触れたことがない状態でした。そのため、AWSのサービスについては全くわからず、ECSを(GCSの対になっているものだと勘違いして)クラウドストレージサービスだと思っていたくらいには知識がない状態でした。初日のECSワークショップでいきなり自分の勘違いが解消されて、一人でちょっと恥ずかしく思いながら聴いていました。これくらい知識がない僕でしたが、ワークショップを通して様々なAWSのサービスを知ることができました。メッセージキューサービスであるSQS・フルマネージドPub/Sub メッセージングサービスで通知や電子メールを送ることができるSNS・web socket通信を管理する機能をもつAPI Gatewayなどサービスの豊富さに驚かされました。

ワークショップでは僕たちのチームは上記のSQS・SNS・API Gateway・ECSなどを使って大きなシステムを(図面の上で)構築しました。僕たちのチームではサービスを細かい機能ごとに分けていき、それらの機能を1つずつ実現するためにどのようなサービスを使うかという進め方をしていました。それぞれの機能を作成するためにどのような事例があるかを調べていくと、AWSのマネージドサービスを使うことによってほとんど実装をしなくても欲しい機能を実現できることに気づきました。例えば通知機能を作成する必要があるという要件では、SNSというサービスを使うことで簡単に実現できそうだということがわかりました。AWSの豊富なサービスのおかげで自分たちは作成したいサービスの周辺の通知・セキュリティなどはAWSに任せて、自分たちのサービスの本質的な部分だけを実装すればよいというのは素晴らしい体験だなと思いました。

最後に、3日間のワークショップを通してただ単にAWSの使い方を学んだだけではなく、クラウド時代のアーキテクチャを考える上で必要な考え方を学ばせていただいたと感じました。このような貴重な体験をさせていただいて、本当にありがとうございました!

末永の感想

デジカルチーム末永の感想です。AWS研修を受けてからしばらく時間が開いてしまいましたが研修の3日間を思い出しながら振り返ります。

今回のお題は「流量10000 req/secあるチャットサービスのAWS設計」でした。恐らくこの規模のアーキテクチャ設計を3日で考える機会はこれからしばらくないと思います。

AWS側のクラウドインフラ設計が今回のお題であったのですが、もちろんクラウドインフラはアプリケーションの仕様と実装に大きく依存するものです。ですので、今回チームではAWS側だけでなく実際にどんなアプリケーションを構築すればよいのかも含めて検討しました。これは安定したクラウドインフラを意識したアプリケーションを書くためのよい訓練になったと思います。

また、私がいたチームの人数は他チームよりも少ない3人でマンパワーに不安がある状況でした。しかし振り返ってみれば人数が少ないことでより綿密なコミュニケーションを取ることができ、AWSに対する自分の理解もより深めることができて却ってよかったと考えています。

最後に、私にとってこの研修の一番の収穫は、フルリモートになり外部からの刺激が少ない中各社の優秀な同期たちとの交流ができた点だと思っております。みんなありがとう。

穴繁の感想

デジカルチームの穴繁です

私はAWSにほとんど触れたことがなかったのですが、研修に参加するにあたって最低限必要な知識を身に付けることができる講義資料が事前に用意されていたことや、実際に手を動かしながらAWSのサービスに触れることができるワークショップが設けられていたため、初学者でもスムーズに学ぶことができました。 また、AWSに関することだけではなくSA*2の方のLTなども設けられており、エンジニアとしてのキャリアをスタートする上で参考になる話が聞けました。

アーキテクチャの設計では、チームごとに担当のSAの方がおり、困ったら気軽に質問できます。私のチームはエムスリーエンジニアリングフェローの富岡さんに担当して頂きました。お世話になりました。また最終日の成果発表では、SAの方からフィードバックをもらえたり、他チームの発表を聞くことができる機会が設けられています。私は他チームも似たようなアーキテクチャになるのではないかと推測していたのですが、チームごとにアプローチが異なり、今回与えられた要件に関して様々な角度から考察できました。 ちなみに私のチームは以下のような特徴がありました。

  • インフラに詳しいメンバーがいなかったことからAWSのマネージドサービスを積極的に利用した
  • レイテンシーやコストといった視点からリージョンの選定にこだわった
  • AppSyncやDynamoDB, Cognitoといったサービスのクォータに関して入念に調べた

一方で他チームの発表では、私たちのチームと比較してアーキテクチャが数倍あるチームや、DBのコスト最適化に焦点を当てているチーム、WebSocketの実装に関して入念に検討されているチームなど個性があり、発表を聞いているだけで多くの学びがありました。

最終的に3日間の研修を通して、経験者がいないチームでも何とかアーキテクチャ設計をやり遂げたことが自信につながりました。 チームhの皆さんお元気ですか?

浮田の感想

AI・機械学習チーム新卒の浮田です。私のチームはAWSに詳しい人があまりいなかったため、アーキテクチャ検討ではどこから手を付ければよいかすら分からない状態からのスタートでした。しかし、充実した資料やSAの方々の手厚いサポートのおかげでAWSの各サービスに対する理解が徐々に深まり、最終的には満足の行くアウトプットを出すことができたと思います。

私は今回の研修で特にデータベースに詳しくなりたいと思っていたので、データベース周りを主に担当しました。リレーショナルデータベースかNoSQLかに関してメリット・デメリットを挙げながら選択し、特にNoSQLにするならテーブルやキーをどのように設計するかを一つ一つ考えました。自分の設計に対してSAの方々から直接フィードバックをもらえたのはとてもいい経験でした。また、データベースのコスト最適化に関する工夫を行い、それに関してSAの方から評価していただけたのはとても嬉しかったです。

その他の講義やワークショップでは、AWSの様々なサービスについて知ることができました。AWSにはたくさんのサービスがあることを知っただけでなく、ユーザ企業からのフィードバックを聞き、現場のニーズに合ったサービスを次々に展開していることが印象的でした。

全体的に、とても学びが多く充実した3日間でした。特に一緒にディスカッションをしてくれたチームメンバーやSAの皆様、本当にありがとうございました!

岩佐の感想

Unit4の岩佐です。私のチームは自分を含め、AWSの経験が浅いメンバーがしかおらず、さらにバックエンドの開発経験があるメンバーが自分ともう一人だったので仲々苦労しながらの研修でした。私の今回の研修の目標は、「仕事でAWSを触れるようになる」でしが、逆に「自分AWS全然わからないじゃん...」ことを知る結果となったのです。

なんとなく所与の講義資料の事前勉強をして、研修頑張ればいけるんじゃない? と思っていたのですが現実は甘くなく……。特に難しかったのが、各コンポーネントの特性を理解して最適な配置をするところです。知らないコンポーネントとその特性がたくさんあり、みんなで話し合いながら何度もSAさんにコメントを頂いてなんとか完成させました。 ですが、その後の発表で目にした他のチームのクオリティの高さたるや。まさに月とすっぽん。

悔しい気持ちの残った研修でしたが、同時にいい意味で同年代のエンジニアとの差を痛感し、いい刺激を得ることができました。 そのおかげで、最近は積極的にAWS周りのチケットをとったり、7/31実施されるAWSのシステムアーキテクチャ (アソシエイト) の試験を申し込んだり以前より積極的にAWSに立ち向かうようになりました。 この3日間のおかげで今があると将来言えるように精進してまいります!!!

永山の感想

同じくUnit4の永山です。

私にとって今回最も印象深かったのは、やはり最も長い時間を費やしたアーキテクチャの検討に関するディスカッションです。 初日はまっさらのホワイトボードを前にどこから手をつけていいものかとやや途方に暮れているところから始まりましたが、3日目の終わりには (粗や検討忘れの箇所もあったものの) 十分に実現可能性のあるアーキテクチャ図が完成し、SAの方からも良いフィードバックを頂け、確かな成長を感じることができました。

ディスカッションに関してはAWSに詳しい他メンバーに牽引して貰うような形で進んで行ったものの、一方で引っ張られるのみでなくアプリケーションの機能や実装の面から足りない箇所、検討すべき箇所を指摘・提案することでバランス良くチームに貢献できました。 また、2日目に行われたAmplifyワークショップで作成したアプリケーションが今回の題材であるチャットアプリケーションに機能的に近かったため、そこで得られた知識を即座に議論の足がかりとすることができ、一層効率よく構成を煮詰められたのではないかと思います。

私はそもそもAWSについてほとんど全く何も知らない状態で研修に参加いたしました。 そのため、参加前は講義の内容を正しく理解できるか、あるいは業務にキャッチアップするための有用な知見を持ち帰ることができるかという点に若干の不安を感じていました。 結果としては、業務上で頻出する固有名詞や略語の意味をきちんと把握できるようになり、より深く理解するための取っ掛かりを得ることができました。その点で今回の研修は非常に有意義な経験になりました。

今回お世話になりました Amazon Web Services JapanのSAおよび関係者の方々、また良い刺激を頂けた他社の参加者の方々に改めまして厚く感謝を申し上げます。

We are hiring!

エムスリーでは新卒エンジニアの採用も積極的に行っています。気軽にお問い合わせください。

jobs.m3.com

*1:対象外性や可用性が組み込まれているサービス。インフラストラクチャの管理・運用の負担を軽減できる。

*2:ソリューションアーキテクトの略。