仕事で必要なWebアプリをAWSで構築する際の知識まとめ

TECHNOLOGY・FUTURE
スポンサーリンク

仕事で、AWSの知識が必要になり、一気に積み込みます。

AI使っているので、微妙な誤差はご勘弁を。

アーキテクチャ

特徴モノリスモジュラーモノリス
構造単一の一枚岩のアーキテクチャ複数のモジュールに分かれたアーキテクチャ
開発一つの大きなコードベース独立したモジュールを開発
デプロイ一度に全体をデプロイモジュールごとに個別にデプロイ
スケーラビリティ水平方向にスケールしにくい水平方向にスケールしやすい
更新全体の再デプロイが必要モジュール単位での更新が可能

マイクロサービスアーキテクチャは、大規模なアプリケーションを、それぞれが独立して機能する小さなサービス群に分割して開発する手法です。各サービスは、特定のビジネス機能に特化しており、独立して開発、デプロイ、スケールすることができます。

ノイジーネイバー問題とは?

ノイジーネイバー問題は、共有リソース環境において、あるユーザーのワークロードが他のユーザーのパフォーマンスに悪影響を与える現象のことを指します。特に、クラウド環境やマルチテナント環境でよく見られます

例えば、あるテナントが大量のデータを処理することで、共有のネットワーク帯域やCPUリソースを独占し、他のテナントの応答速度を遅くしてしまうといった状況が考えられます。この「うるさい隣人」のような存在が、他のテナントのパフォーマンスを低下させることから、ノイジーネイバーと呼ばれます。

ノイジーネイバー問題を引き起こしやすいアーキテクチャの特徴

共有リソースの過度な利用: 共有のストレージ、ネットワーク、CPUなどを複数のテナントで共有するアーキテクチャでは、あるテナントの負荷が他のテナントに波及しやすくなります。
リソース隔離の不足: テナント間のリソースを物理的にまたは論理的に完全に分離できていない場合、あるテナントの問題が他のテナントに影響を与える可能性があります。
スケールアウトの仕組みが不十分: 負荷が急激に増加した場合に、自動的にリソースを追加して対応できないアーキテクチャでは、ノイジーネイバー問題が発生しやすくなります。

ノイジーネイバー問題を軽減するためのアーキテクチャ設計

リソース隔離: 各テナントに専用の仮想マシンやコンテナを提供し、物理的にリソースを分離することで、ノイジーネイバー問題を防止できます。
リソース制限: 各テナントに利用できるリソース量に上限を設定することで、あるテナントが他のテナントに過度な影響を与えるのを防ぎます。
クォータシステム: 各テナントにCPU、メモリ、I/Oなどのリソースの使用量を制限するクォータを設定します。
アイソレーション: 異なるテナントのワークロードを物理的に分離したり、論理的に隔離したりすることで、相互干渉を最小限に抑えます。
スケールアウトの自動化: 負荷に応じて自動的にリソースを追加・削除することで、システム全体の安定性を確保します。
モニタリングとアラート: システムの状態を常時監視し、異常な状況を検知した場合にアラートを発することで、問題の早期発見と対応を可能にします。

AWS Fargate とは?

AWS Fargateは、Amazon Elastic Container Service (ECS) や Amazon Elastic Kubernetes Service (EKS) で動作する、コンテナのためのサーバーレスコンピューティングエンジンです。サーバーを管理することなく、コンテナアプリケーションを簡単に実行できるという点が大きな特徴です。

Fargateを使うメリット

  • サーバーレス: サーバーの管理が不要なので、OSのパッチ適用や容量管理といったインフラの運用負担が大幅に軽減されます。
  • 従量課金: 使用した分だけ料金を支払う従量課金制なので、コストを最適化できます。
  • スケーラビリティ: 負荷に応じて自動的にスケールするので、急激なトラフィックの増加にも対応できます。
  • マネージドサービス: AWSがコンテナ実行環境を管理するため、運用に関する専門知識がなくても利用できます。

Fargateの仕組み

Fargateは、コンテナを実行するための基盤となる計算リソースを提供します。ユーザーは、コンテナイメージを作成し、Fargateにデプロイするだけで、アプリケーションを実行できます。Fargateは、その裏側で、コンテナのスケジューリング、リソースの割り当て、監視などを自動的に行います。

Fargateの利用シーン

  • マイクロサービスアーキテクチャ: 各サービスをコンテナ化し、Fargateで実行することで、マイクロサービスアーキテクチャを簡単に実現できます。
  • バッチ処理: 定期的なバッチ処理をコンテナ化し、Fargateで実行することで、柔軟かつ効率的なバッチ処理を実現できます。
  • イベントドリブンなアプリケーション: イベント発生時にトリガーされるコンテナアプリケーションをFargateで実行することで、イベントドリブンなアーキテクチャを構築できます。

FargateとEC2の違い

特徴EC2Fargate
リソース管理ユーザーが管理AWSが管理
スケーリング手動または自動設定自動
料金体系インスタンス時間使用時間とリソース

Amazon API Gateway と Amazon Cognito について

Amazon API Gateway

Amazon API Gateway は、RESTful API や WebSocket API を簡単に作成、公開、管理するためのフルマネージドサービスです。API を通じて、モバイルアプリ、ウェブアプリケーション、IoT デバイスなど、様々なクライアントからバックエンドのサービスにアクセスできるようにします。

主な機能:

  • APIの作成と公開: 数回のクリックで API を作成し、すぐに公開できます。
  • APIの管理: API のバージョン管理、ステージング、デプロイなどを簡単に行えます。
  • APIの保護: API キー、IAM 認証、Cognito 認証など、様々な方法で API を保護できます。
  • トラフィック管理: API のトラフィックを監視し、必要に応じてスロットリングやキャッシングを設定できます。

利用シーン:

  • モバイルアプリのバックエンド: モバイルアプリからサーバーレス関数やマイクロサービスにアクセスする際のゲートウェイとして利用できます。

Amazon Cognito

Amazon Cognito は、ウェブやモバイルアプリケーションに、安全でスケーラブルなユーザー認証、認可、およびユーザーデータ同期機能を提供するサービスです。

主な機能:

  • ユーザープール: ユーザーのサインアップ、サインイン、パスワード管理、多要素認証 (MFA) などの機能を提供します。
  • IDプール: 既存の ID プロバイダー (Facebook、Google など) を使用してユーザーを認証し、AWS リソースへのアクセスを許可します。
  • ユーザーデータ同期: ユーザーデータをデバイス間で同期し、オフラインアクセスを可能にします。

利用シーン:

  • ユーザー認証: ウェブアプリケーションやモバイルアプリへのユーザーログイン機能の実装
  • ソーシャルログイン: Facebook、Google などのソーシャルアカウントを使用したログイン機能の実装
  • AWS リソースへのアクセス制御: Cognito ユーザープールで認証されたユーザーに、特定の AWS リソースへのアクセスを許可する

Amazon API Gateway と Amazon Cognito の連携

Amazon API Gateway と Amazon Cognito は、連携して強力な認証・認可システムを構築できます。

  • Cognito 認証: API Gateway に Cognito 認証を設定することで、API へのアクセスを Cognito ユーザープールで認証されたユーザーに制限できます。
  • カスタムオーソライザー: Lambda 関数を使用して、より高度な認証・認可ロジックを実装できます。

具体的な連携例:

  • モバイルアプリのユーザーが API Gateway を通じてバックエンドのサービスにアクセスする場合、Cognito で認証を行い、認証結果に基づいて API へのアクセスを許可します。

AWS Direct ConnectとAWS Site-to-Site VPNの比較と構築時の用途

AWS Direct ConnectとAWS Site-to-Site VPNは、どちらもオンプレミス環境とAWSクラウドを接続するためのサービスですが、特徴や用途が異なります。

AWS Direct Connect

AWS Direct Connectは、専用線を用いてオンプレミス環境とAWSを直接接続するサービスです。インターネットを経由しないため、高いセキュリティ安定した大容量のデータ転送が可能です。

特徴:

  • 専用線: インターネットを経由しないため、セキュリティが高く、パケットロスや遅延が少ない。
  • 高帯域幅: 大量のデータを高速で転送できる。
  • 低遅延: 実質的にインターネットを経由しないため、遅延が少なく、リアルタイム性の高いアプリケーションに適している。
  • コスト: インターネット回線に比べて、データ転送コストが低減できる可能性がある。

構築時の用途:

  • 大規模データ転送: 大量のデータをAWSに転送したり、AWSからオンプレミスに転送したりする場合。
  • 高可用性: 常に安定したネットワーク接続が必要な場合。
  • セキュリティ重視: 高いセキュリティレベルが求められる場合。
  • ハイパフォーマンスコンピューティング: HPC環境など、低遅延で高帯域幅なネットワークが必要な場合。

AWS Site-to-Site VPN

AWS Site-to-Site VPNは、IPsec VPNを利用して、オンプレミス環境とAWS VPCを接続するサービスです。インターネットを経由するため、Direct Connectに比べてセキュリティやパフォーマンスは劣りますが、手軽に構築できます。

特徴:

  • IPsec VPN: 標準的なIPsecプロトコルを使用するため、一般的なVPNルーターで接続できる。
  • 柔軟性: 様々なVPN構成に対応できる。
  • コスト: Direct Connectに比べて、初期費用が低い。

構築時の用途:

  • スモールスタート: 小規模なデータ転送や、まずはVPN接続を試したい場合。
  • 既存のVPN環境との連携: 既存のVPN環境をAWSに拡張したい場合。
  • コストを抑えたい場合: 高帯域幅や低遅延は不要で、コストを抑えたい場合。

どちらを選ぶべきか?

どちらのサービスを選ぶかは、以下の要素を考慮して決定する必要があります。

  • データ転送量: 大量のデータを転送する場合はDirect Connect、小規模な場合はSite-to-Site VPNが適している。
  • セキュリティ: 高いセキュリティが求められる場合はDirect Connect、ある程度のセキュリティであればSite-to-Site VPNでも十分な場合がある。
  • パフォーマンス: 低遅延、高帯域幅が必要な場合はDirect Connect、一般的な用途であればSite-to-Site VPNでも問題ない。
  • コスト: Direct Connectは初期費用や月額費用が高くなる傾向がある。
  • 構築の難易度: Site-to-Site VPNは比較的簡単に構築できるが、Direct Connectは専門知識が必要となる場合がある。

AWS CodeBuild、GitHub Actions、Self-hosted Runnerの連携について

はじめに

AWS CodeBuild、GitHub Actions、Self-hosted Runnerは、それぞれ異なる特徴を持つCI/CDツールですが、連携することでより柔軟かつ強力な開発パイプラインを構築できます。本記事では、これらのツールの概要と、連携によるメリット、具体的な連携方法について解説します。

各ツールの概要

  • AWS CodeBuild: AWSのマネージド型ビルドサービスです。ソースコードをコンパイル、テスト、パッケージングし、デプロイ可能なアーティファクトを作成します。
  • GitHub Actions: GitHub上でカスタムなワークフローを作成し、ソフトウェア開発のワークフローを自動化できるサービスです。
  • Self-hosted Runner: GitHub Actionsのワークフローを実行するための、自前で用意する実行環境です。

連携によるメリット

  • 柔軟性の向上: GitHub Actionsの柔軟性と、AWS CodeBuildの豊富なビルド環境を組み合わせることで、様々な開発シナリオに対応できます。
  • カスタム化: Self-hosted Runnerを利用することで、特定のソフトウェアやハードウェアが必要なビルド環境を構築し、GitHub Actionsのワークフローを実行できます。
  • 効率化: AWS CodeBuildの並列実行機能と、GitHub Actionsのワークフローの組み合わせにより、ビルド時間を短縮できます。
  • スケーラビリティ: AWS CodeBuildのスケーラビリティを活用することで、大規模なプロジェクトに対応できます。

連携方法

1. AWS CodeBuildプロジェクトの作成
  • ソースコードのリポジトリ、ビルドスペック、環境変数などを設定します。
  • ビルドスペックには、ビルドに必要なコマンドを記述します。
2. GitHub Actionsワークフローの作成
  • GitHubリポジトリに.github/workflowsディレクトリを作成し、YAML形式でワークフローを定義します。
  • ワークフローの中で、AWS CodeBuildのAPIを呼び出し、ビルドを実行します。
  • AWS CLIやAWS SDKを利用して、CodeBuildのAPIを呼び出すことができます。
3. Self-hosted Runnerの設定
  • Self-hosted Runnerをインストールし、GitHubに登録します。
  • ワークフローで、特定のジョブをSelf-hosted Runnerで実行するように指定します。

    その他

    • AWS CodeBuild-run-buildアクション: GitHub ActionsからCodeBuildを簡単に実行するための公式アクションが提供されています。
    • CodePipelineとの連携: CodeBuildとCodePipelineを連携することで、より複雑なCI/CDパイプラインを構築できます。

    Atlassian(アトラシアン)とは?

    Atlassian(アトラシアン)は、オーストラリアに本社を置くソフトウェア企業で、特にソフトウェア開発チーム向けのツールを数多く提供しています。アジャイル開発手法を重視しており、チームのコラボレーションを促進し、開発プロセスを効率化する製品群が特徴です。

    今後も更新していくかも。