初めに
新人研修の一環としてニフティ2022年度新卒入社の3名が、AWS JumpStart for NewGrads 2022(オンライン開催)に参加しました。
ニフティ2022年度新卒入社3名は、それぞれ別のチームで成果物を作成しました!
このワークショップ3日間で行った内容と成果物を紹介します!
参加者
ニフティ2022年度新卒入社の小林、西牧、柴田の3名が参加しました!
AWS JumpStart for NewGradsとは?
💡 新卒1年目のエンジニアの方々を対象とした、3日間の実践的な研修プログラム。 将来的にAWS活用をリードする人材になるための第一歩をスムーズに踏み出せるようなコンテンツをというコンセプトで企画されているため、単なるAWSサービスの学習だけでなく、チームに分かれて要件に合った適切なアーキテクチャを検討・設計する経験を積む部分にフォーカスした内容。
- 約250 名以上のエンジニアが参加
- 情報処理サービス(SI)、Web、ゲームなど様々な業種からの参加
- 業種混同で64チームに分かれる
- 1チーム 3~5人
- 少人数のチームでアーキテクチャを作成
- 全てオンラインで実施
- 主に使用するツールについて
- Slack: 各種アナウンス、チーム毎のチャットルームとして使用
- Zoom: 本イベント会期中、様々な目的でWeb 会議ツールとして使用
- Bluescape: アーキテクチャ検討時のホワイトボードツール
- ハンズオン用AWS アカウント: ハンズオンの際にチーム毎にお渡し
参加するまでやること
- AWS JumpStart 事前学習コンテンツ(必須)
- はじめてのアーキテクティング(60分)
- AWS入門(180分)
💬 ちなみに、ニフティの22新卒の研修では事前学習コンテンツとは別に下の内容を行いました!(一部抜粋)
AWS基礎
ハンズオン
– WEB3層アプリケーション
– サーバレスなチャットアプリ
チーム開発演習
– アプリの企画・開発
– AWSリソースの構築
内容
- アーキテクチャ検討(メインイベント)
- 4人前後のチームに分かれ、お題に沿ったWebサービスのアーキテクチャを検討
- 最終日は工夫した点も含めてチームごとに発表
- ハンズオン
- 実際にAWSのサービスを使ってみることで、実際の使い勝手や機能の詳細を学ぶ
実施期間
- 6/1(水) ~ 6/3(金)の3日間
スケジュール
※お菓子・飲み物など持ち込み自由!
目標/課題 など
- 大規模チャットサービスを作る
成果
小林チームの成果
小林チームでは、3日間を通して作り上げたAWSのアーキテクチャ構成図は下図のようになりました。作り上げていく3日間の軌跡を紹介します。
完成されたアーキテクチャ構成図
- 1日目
- 同じチームの皆様もAWSに関しては事前学習で培った知識が大半を占めて、お互いに探り探り調べながら行っていました。 初めてで何も分からなかったので、まずは最小構成でEC2のみを作成し、そこから要件に合わせてリソースを追加していく流れで行いました。 その上で、
- スケーラビリティ
- どの箇所がボトルネックになるのか
- RDSとDynamoDBの違い
- など、調べながらアーキテクチャを作り上げていきました。
- 同じチームの皆様もAWSに関しては事前学習で培った知識が大半を占めて、お互いに探り探り調べながら行っていました。 初めてで何も分からなかったので、まずは最小構成でEC2のみを作成し、そこから要件に合わせてリソースを追加していく流れで行いました。 その上で、
- 2日目
- 1日目の調査のおかげで、アーキテクチャがだんだん構成されていきました。 構成していく上で、実装におけるコスト管理やRDSの詳細について考えました。 RDSに関しては、リードではなくライトの部分に関して考える必要があり、以下のことを知りました。
- シャーディング
- Auroraの場合にユーザIDの剰余などでどの部分のDBに入るのかを決定させることが可能
- シャーディング
- また、DynamoDBに関して、以下のメリットがあることを知りました。
- 1 秒あたり数十万のトランザクションへの即時スケーリング
- 1日目の調査のおかげで、アーキテクチャがだんだん構成されていきました。 構成していく上で、実装におけるコスト管理やRDSの詳細について考えました。 RDSに関しては、リードではなくライトの部分に関して考える必要があり、以下のことを知りました。
- 3日目
- 最終日は大体の構成が決定しており、続いてセキュリティ面に関する調べものを行いました。
- また、DNSウェブサービスに加え大量のトラフィックを吸収・障害を分離するサービスのRoute53を導入した際、信頼性確保のため当サービスに対するセキュリティに着目しました。調べたところ以下の2種類が存在し、より強力なAdvancedに注目しました。
- AWS Shield Standard
- すべてのリソースで自動的に利用可能
- 一般的なDDoS攻撃から防御してくれる
- AWS Shield Advanced
- Route53などの特定のリソースのみに適用可能
- より大規模なDDoS攻撃から防御してくれる
- AWS Shield Standard
- これに加え、以下の2つを導入しました。
- AWS WAF(Web Application Firewall)
- CloudFrontにWebアプリケーションに特化したファイアウォールの機能を追加できる
- ACM(AWS Certificate Manager)
- SSL/TLS用の証明書を管理してくれる
- AWS WAF(Web Application Firewall)
また、小林チームではアーキテクチャ構成図以外に、AWS Well-Architected Framework という、アーキテクチャがクラウドのベストプラクティスにどの程度準拠できているかを把握できるドキュメントを用いて、信頼性やコスト、運用の効率化の各観点においてどのような利点があるかを記述しました。
西牧チームの成果
私のチームは全員が研修でAWSを触ったことあるよ!の初心者チームでした。
- 1日目
- まずは自己紹介の時間。想像以上に多種多様な企業の方々が参加されていることと研修で少しAWSを触っただけであることがわかりました。 メンバーのAWS知識が少しわかったところで、次にたくさんあるサービスを知るために各自で調べて付箋で貼りました。 (初日に調べたおかげで全員の理解度の向上や話し合いの円滑化につながり大正解でした!)
調べたサービスをどうつなげるかを手探りで考えながら、1日目は終了しました。
- 2日目
- サービスについての理解ができてきた中、構成図のむずかしさに直面しました。そこでAWS公式のページなどを見て構成図の作り方を勉強しながら必要なサービスを絞っていきました。 ここで初日にメンバー全員で書いたサービス調べが役立ちました! 後半はAWS運営の方に質問しながらコスト管理について考え、サービスの内容だけでなくコストについての調査も行いました。
- 3日目
- ここからはより実例のことを考えていきました。 大規模チャットサービスでありうることといえば? 話し合いの中で出たものは「あけおめ」や特定の映画などのセリフの投稿でした。 そこで、それらが予測される日や時期(年末や映画の地上波公開など)には自動的にスケーリングするようにlambdaを使いました。
西牧チームの成果がこちらです。
柴田チームの成果
私のチームでは、1つの要素ずつ検討し、アーキテクチャ構成を徐々に変更を加えながら作成していきました。
- 1日目
- 初めに、簡単に自己紹介をしました。メンバーのAWSの経験は、ほぼ使ったことないからちょっと使ったことあるくらいでした。 次に、お題のサービスを実現するのに必要な機能を検討しました。また、それらの機能を実装するのに使いそうなAWSのサービスのピックアップを行い下の図のようにまとめました。「Webサイトの配信には、S3とCloudFrontは使いそうだよね〜」って感じです。
- 2日目
- まずは、1日目にピックアップしたAWSのサービスを用いて必要な機能を実現する最小限の構成を構成図を作りました。 そして、作成した構成図を信頼性、スケーラビリティを意識してアップデートしました。
2日目の成果が下の図になります。信頼性を意識し、RDSを複数のAZに設置しました。また、スケーラビリティを意識し、ECSを使用しました。
- まずは、1日目にピックアップしたAWSのサービスを用いて必要な機能を実現する最小限の構成を構成図を作りました。 そして、作成した構成図を信頼性、スケーラビリティを意識してアップデートしました。
- 3日目
- 3日目は、2日目までの構成からパフォーマンス、コスト、セキュリティを意識して変更を加えました。 チャットは低レイテンシを求められるため、マルチリージョンにすることを検討しました。しかし、全ての機能をマルチリージョンにするとコストが高くなるため、低レイテンシが求められる機能のみをマルチリージョンに配置することでコストを抑えました。 さらに、セキュリティ強化のため、AWS WAFを設置しました。
感想・学び
当社でも技術研修としてAWSの基礎について学びつつ、ハンズオンにおいてアーキテクチャ構成図を見ながらリソースの構築と削除を行う機会がありました。その時点ではAWSの概念と使用用途のみを学ぶことが出来ました。その上で当研修を行った後同じハンズオンを行いましたが、「なぜこのリソースを用いるのか」「リソースの影響範囲はどこまでか」をしっかり把握した上で完了できたので、AWSに対する理解度がより深まり、実際の業務でも生かせています。(小林)
3日間のワークに参加して、AWSサービス同士の効率の良いつなげかたを考えながらアーキテクチャ構成図の書き方や、それぞれのサービスの特色や使いどころを学ぶことができました。またワーク内ではコスト面やパフォーマンス面についても考えることができ、実際に運用する側の視点を身に着けました。これにより実際の業務の中で社内システムの構造への理解度の向上を実感しています。(西牧)
同じ機能を実装するのでも複数のやり方があり、実装方法によりコストが変わってくるため、最適なアーキテクチャ構成を作成するのが難しかったです。アーキテクチャ構成を検討する中で、様々なサービスを比較しながら調査することで、それぞれのサービスの特徴を学ぶことができました。また、ハンズオンを行うことでサービスへの理解度がより向上したと感じています。(柴田)