Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【Tech Community LuMo】第1回 バックエンド勉強会

Avatar for hirotask hirotask
September 26, 2023
29

【Tech Community LuMo】第1回 バックエンド勉強会

Avatar for hirotask

hirotask

September 26, 2023
Tweet

Transcript

  1. アジェンダ 1. クラウドとは 2. クラウド利用のメリット/デメリット 3. AWSが提供しているサービス形態 4. AWSが提供しているサービスの代表例 5.

    「ガクコム!」が現在使用しているクラウドサービス 6. 「ガクコム!」が現在抱えている問題点と改善案 3
  2. 代表的なクラウドのタイプ 7 Infrastructure as a Service (IaaS) Platform as a

    Service (PaaS) Software as a Service (SaaS) 以下のITリソースを提供する • サーバー • コンピュータ • データストレージ領域 以下のITリソースを提供する • ソフトウェア実行の基盤となるイン フラストラクチャ(通常はハードウェ アやOS) ※IaaSがコンピュータやサーバー、データ ストレージ領域なのに対して、PaaSはOS やミドルウェアもついてくる サービスプロバイダーが提供する完成した ソフトウェアを利用できる。 製品のメンテナンスやインフラ管理を行わ なくてよいため、特定のソフトウェアの使い 方のみ意識すればよい。
  3. クラウドのデプロイモデル 8 クラウド ハイブリッド オンプレミス クラウドで開発~デプロイまで行う、または 既存のインフラからクラウドに移行するモ デル。 クラウドのメリットをフルに利用することが できる。

    クラウドリソースと、クラウドにないリソース との間でアプリケーションを連携するモデ ル。 例えば、社内とクラウドを連携させて一つ のシステムとして提供する場合などがこれ に該当する。 オンプレミスに仮想化技術を用いてクラウ ド環境を作り、そこにデプロイするモデル。 「プライベートクラウド」と呼ばれることもあ る。 このデプロイ手法はクラウドのメリットを多 く吸収できないが、運用コストが安くなる ケースもある。
  4. EC2 • 正式名称:Amazon Elastic Compute Cloud • 俗にいう仮想サーバー ◦ VPSと同じようなイメージ

    • ユーザーが自由にカスタマイズ可能なため、OSやCPUアーキ テクチャまで選定したい場合にオススメ • しかし、その代わり障害が発生した場合はユーザー責任になっ てしまう 23
  5. Auto Scalling • 正式名称:AWS Auto Scalling • EC2やECS、DynamoDBなどスケーリング可能なサービスのス ケーリングを行うサービス •

    トラフィック量やリソース使用料などを予測してスケーリングする • スケーリング時にCloudFlontと連携して、アラートを送信するこ とも可能 25
  6. Load Balancing • 正式名称:AWS Elastic Load Balancing • 以下の3種類のロードバランサーの管理を行うサービス ◦

    Application Load Balancer(ALB) ◦ Gateway Load Balancer(GLB) ◦ Network Load Balancer (NLB) • ロードバランサーとは ◦ 負荷分散装置 ◦ サービスへの負荷を複数のサービスに分散させる 27
  7. WAF • 正式名称:AWS WAF
 • 機能は以下の2つ
 ◦ IPアドレス、HTTPヘッダ、カスタムURIなどに基づいて接続をフィル タリングする
 ◦

    Botの攻撃を検知する
 • CloudFront、Load Balancing、API Gateway、AppSyncと連携す ることができる
 28
  8. DynamoDB • 正式名称:Amazon DynamoDB
 • Key-Value NoSQL Database
 ◦ 他サービスではFirebase

    FireStoreが一番近い
 • RDSよりもスケーラビリティが上
 • AWS Lambdaと連携して、データ挿入時に処理を実行することも 可能
 31
  9. API Gateway • 正式名称:Amazon API Gateway
 • APIのエンドポイントを簡単に定義することができるサービス
 • エンドポイントにリクエストが来た際の処理はLambdaで記載す

    るのが一般的
 ◦ EC2の特定のインスタンスにリクエストを送信することも可能 
 • IAMを使用してAPIにアクセス可能なユーザーを制限したり、 VPCを用いてAPIの公開範囲をカスタマイズ可能
 32
  10. AppSync • 正式名称:AWS AppSync
 • GraphQL APIを構築するサービス
 • GraphQLとは
 ◦

    クエリ言語とスキーマ言語で構成されたWeb API規格 
 ◦ Facebook(Meta)によって開発 
 • 特徴
 ◦ データの取得数、データフィルタリングがクライアントでできるため自由度 が高い
 ◦ Schema駆動開発
 33
  11. ECS • 正式名称:Amazon Elastic Container Service
 • フルマネージドコンテナオーケストレーションサービス
 ◦ Docker等のコンテナサービスをデプロイできる

    
 ◦ 複数のコンテナの一括管理が可能 
 ◦ Auto Scallingに対応 
 • 似たサービス: Kubernates(k8s)
 • k8sとの違い
 ◦ k8sの知識が無くても使える(k8sは難しい!) 
 ◦ AWS CLIが使える
 34
  12. Cloud Front • 正式名称:Amazon Cloud Front
 • AWSの王道コンテンツ配信ネットワーク(CDN)サービス
 • トラフィックが増えた場合に自動でスケーリングしたりすることに

    より、可用性を保証している
 • Webセッションやキャッシュをいい感じに管理してくれる
 • これもAmplifyが管理してくれているので、直接触ることはない
 41
  13. Cognito • 正式名称:Amazon Cognito
 • ユーザー認証・管理サービス
 • 登録されたユーザーは「ユーザープール」に保存される
 • 多要素認証(MFA)も可能


    ◦ 「ガクコム!」ではSESで暗証番号付きメールを送信して、それをサ イトに入力してもらうMFA方式をとっている 
 45
  14. DynamoDB • 正式名称:Amazon DynamoDB
 • Key-Value NoSQL Database
 ◦ 他サービスではFirebase

    FireStoreが一番近い
 • RDSよりもスケーラビリティが上
 • AWS Lambdaと連携して、データ挿入時に処理を実行することも 可能
 47
  15. AppSync • 正式名称:AWS AppSync
 • GraphQL APIを構築するサービス
 • GraphQLとは
 ◦

    クエリ言語とスキーマ言語で構成されたWeb API規格 
 ◦ Facebook(Meta)によって開発 
 • 特徴
 ◦ データの取得数、データフィルタリングがクライアントでできるため自由度 が高い
 ◦ Schema駆動開発
 48
  16. 問題点 • バックエンドとフロントエンドを同時並行で開発できない ◦ AmplifyのCloud FormationスタックでAPIやDBを管理しているため • AppSyncのGraphQLが使いづらい ◦ Amplifyを使用するためWeb

    API規格もGraphQLを採用したが、チームメンバーのスキル 的にはREST APIのほうが慣れている • フロントエンド側に責務が偏りすぎている ◦ ファイルの取得やAPI呼び出し、認証方法がバラバラ ◦ フロントエンド側で行う処理が多すぎる • etc… 50
  17. 改善方法案 • バックエンドとフロントエンドを同時並行で開発できない ◦ →分離 Amplifyからの脱却 ◦ →ホスティングサーバーには、EC2(VPCなし)・ECS(VPCなし)・ECS(AppRunner)など多く のパターンが存在 • AppSyncのGraphQLが使いづらい

    ◦ →REST API に切り替え or APIを使わない選択 ◦ →REST APIはLambda+API Gatewayを使うか、EC2を使うか • フロントエンド側に責務が偏りすぎている ◦ →REST API に切り替える際に、認証やデータ追加の APIも生やそう • etc… 51
  18. アーキテクチャ改善案① 54 【メリット】 • API Gatewayでフロントエンドとバックエンドを完全に分離 • APIはREST APIを使用できる •

    ホスティングがEC2なので、最悪すべてEC2に吸収できる • ネットワークのカスタマイズの自由度がかなり高い 【デメリット】 • 費用面が心配 ◦ EC2は場合によってはECSやサーバーレスサービスより高くなるらしい • EC2はマネージドではないので、バックエンド開発者の負荷が高い • フロントエンドのアーキテクチャがレガシー(今はサーバーレスが流行り) • EC2に構築した環境の移行性が低い