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

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

hirotask
September 26, 2023
24

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

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に構築した環境の移行性が低い