はじめてのAWS設計で知っておきたい、インフラ構築のポイント
AWSを使った設計業務に際しては、AWS設計の基本概念についてあらかじめ把握しておくことが重要です。AWSは同サービスを使った設計に際して、公式に基本原則やベストプラクティスを紹介しています。
この記事では、AWS設計において役立つAWS公式のノウハウについてまとめて解説し、AWSが初めてという方でもインフラ構築を円滑に進めていくためのポイントを紹介します。
AWSについて
AWS(Amazon Web Services)は米Amazonが展開している、世界トップクラスのクラウドコンピューティングサービスです。オンプレミス環境では達成が難しいスケーラビリティの確保や、コストパフォーマンスの実現、そして可用性の高いインフラ構築を実現できるため、世界中の企業が採用しています。
AWSは当初、シンプルなホスティングサービスとしてスタートしたサービスです。現在では200以上のサービスを展開し、国内でもあらゆる業界で組み込みが進んでいます。
AWS設計に関係する主な用語
AWSを使い始めて間もない場合、まずは基本的な用語を理解することが重要です。設計業務を進めていく上で、意思の疎通やレファレンスの理解を深める上でも重要になるため、以下の基本用語については正しく理解しておきましょう。
リージョン (Region)
AWSのサービスは、物理的な国や地域と言ったリージョンに分割の上提供されています。各リージョンは、地理的に離れた場所に設置されており、データのレイテンシ削減、あるいは各国の法規制遵守の上で有効です。
たとえば、日本国内でも東京リージョンや大阪リージョンが存在し、地域の利用者に不都合のないよう迅速で安定したサービスを提供します。また、リージョンごとに特定のサービスや機能が異なる場合があるため、設計時には目的に応じたリージョンの選択が重要です。
アベイラビリティーゾーン (AZ:Availability Zone)
リージョン内には複数のアベイラビリティーゾーンが存在します。AZは物理的に独立しており、高い可用性を確保するために設計されているインフラ設備の単位です。各AZは、異なる電力供給やネットワークインフラに接続されており、災害時でも他のAZが継続的に稼働する仕組みとなっています。
システム設計時には複数のAZを活用するよう仕様を定義することで、サービスの冗長性と耐障害性を向上させることが可能です。
VPC (Virtual Private Cloud)
VPCは、AWS内で論理的に分離されたネットワーク環境を提供する機能です。クラウド環境だけでなく、企業のオンプレミスネットワークとの接続も可能です。
VPCを利用することで、セキュリティやネットワークトラフィックを厳密に制御の上、パブリッククラウドでありつつもプライベートなネットワーク環境の構築に貢献します。また複数のサブネットを作成して、ワークロードごとに最適なネットワーク設定を実現することも可能です。
サブネット(Subnet)
サブネットは、VPC内でIPアドレスを細分化するための単位です。利用に際してはパブリックサブネットとプライベートサブネットに分けるのが一般的です。前者はインターネットを接続することを前提としたもので、後者はインターネットにアクセスせずに用いるリソースへの接続を想定しています。
ウェブサーバーをパブリックサブネットに配置し、データベースサーバーをプライベートサブネットに配置することで、セキュリティとアクセス制御を強化できます。
インターネットゲートウェイ (Internet Gateway)
インターネットゲートウェイは、インターネットへのアクセスを提供するためのコンポーネントです。パブリックサブネットを実行する際、必要になります。
インターネットゲートウェイをVPCにアタッチすることで、EC2インスタンスがインターネットと通信できるようになります。Webアプリケーションのアクセス性を確保するために不可欠です。
デフォルトゲートウェイ (Default Gatewaya)
デフォルトゲートウェイは、サブネットから外部ネットワークへの通信経路を提供するルーター、あるいはコンピューターです。
ルートテーブルにデフォルトルートを設定することで、外部のネットワークリソースとの接続を管理します。設計時の正確な設定により、効率的なネットワーク通信を実現することが可能です。
ルーター (Router)
ルーターはトラフィックを適切な宛先にルーティングする役割を果たす要素です。AWSでは、VPC内のルートテーブルを設定することで、仮想ルーターとして機能させます。
通信相手の端末が同じネットワークかどうかを確認の上、所属ネットワーク外の通信と判断した場合、ルーターが活躍します。
ルートテーブル (Route Table)
ルートテーブルは、簡単に言えばルーターが用いているルールの集合体です。主にVPC内の通信を管理する役割を果たします。
パブリックサブネットとプライベートサブネットの通信ルールを分ける上で必要な概念で、特定のIPアドレス範囲を、特定のネットワークデバイスにルーティングする設定を行うといった処理を実行します。
NAT (NAT Gateway)
NATはプライベートサブネット内のインスタンスを、インターネットに接続するために使用する技術です。
NATゲートウェイを利用することで、インターネットから直接アクセスできないリソースが、セキュリティを維持しながら外部のサービスと通信できます。
踏み台サーバー (Bastion Server)
踏み台サーバーとは、プライベートサブネットにあるリソースへの安全なアクセスを提供するための中継サーバーです。セキュリティリスクのあるSSH接続を回避するべく、接続経路目的で踏み台サーバーを一枚噛ませることにより、セキュアな環境の維持に貢献できます。
セキュリティグループ (Security Group)
セキュリティグループは、インバウンドおよびアウトバウンドトラフィックを制御する仮想ファイアウォールのことです。
セキュリティグループは、接続環境のセッション情報を保持する、いわゆるステートフルなトラフィック制御を提供し、各リソースにカスタマイズされたセキュリティポリシーを適用できます。これにより、アプリケーションごとのきめ細かなアクセス制御が可能です。
ElasticIP
ElasticIPは、静的なパブリック IPv4 アドレスです。動的IPアドレスの変更を防ぎたい場合に使用されます。ElasticIPは、重要なシステムやサービスに対して、恒久的なIPアドレスを必要とする場合に用いられるのが特徴です。
VPCエンドポイント
VPCエンドポイントは、VPC内からAWSサービスへのプライベート接続を提供するものです。インターネットゲートウェイを必要とせず、データ転送のセキュリティとパフォーマンスを向上させられます。
機密性の高いデータを扱うシステムにおいては、最適な機能です。
IAM (Identity and Access Management)
IAMはユーザーとリソースへのアクセスを管理するサービスです。きめ細かなアクセス制御ができるため、最小権限の原則に基づいたアクセス管理を実現できます。また、多要素認証(MFA)の導入により、セキュリティをさらに強化することも可能です。
AWSリソースを扱えるユーザーか、どのようなリソースを扱えるのかなどに合わせ、アクセスを制御できます。
ACL (Access Control List)
ACLとは、VPC内のネットワークトラフィックを制御するためのルールセットです。セキュリティグループと補完的に使用するのが一般的です。
ACLはステートレスであり、VPCと同様にインバウンドとアウトバウンドのルールを個別に設定する必要があります。ただ、この条件設定により、詳細なネットワークトラフィック制御を行えるのが強みです。
AWSが推奨するAWS設計の11のベストプラクティス
AWSは、同社サービスを使った設計業務を行うにあたり、知っておきたい11のベストプラクティスを公式に公開しています。ここではその要点を整理の上、ポイントを解説します。
1. スケーラビリティを確保する
リソースを自動的に拡張または縮小する設計を採用し、スケーラビリティを確保しましょう。AWSのAuto ScalingやElastic Load Balancingを活用することで、システムが需要の増減に対して柔軟に応じることが可能です。
また、AWS Lambdaなどのサーバーレス技術を取り入れることができればリソース管理の負担を軽減し、さらに柔軟性の高い環境を実現できます。
2. 環境を⾃動化する
インフラ管理を自動化することで、ヒューマンエラーの回避に役立ちます。AWS CloudFormationやAWS CDK(Cloud Development Kit)を使用すれば、インフラのコード化によって一貫性のあるデプロイメントを行えるのがポイントです。また、自動化による現場の負担改善が、開発チームの生産性向上にも寄与します。
3. 使い捨て可能なリソースを使⽤する
リソースを短期間で作成・削除できるように設計しておくと、何かと便利です。AWSのEC2 Spotインスタンス、あるいはECSやEKSのようなコンテナサービスを活用することで、コスト削減とリソースの効率的な利用につながります。
加えて不変インフラストラクチャの採用は、リソースの一貫性が保たれ、デプロイメントの安全性も高められるのが強みです。
4. コンポーネントを疎結合にする
コンポーネントの依存関係を小さく抑え、独立性を尊重する疎結合の実現は、柔軟性や連携力の確保に役立ちます。AWSのSQS(Simple Queue Service)やSNS(Simple Notification Service)は、そんなマイクロサービスアーキテクチャの実現に貢献するサービスです。
これにより、システム全体の柔軟性が高まり、個別のコンポーネントを独立の上で更新、または修正ができます。
5. サーバーではなくサービスで設計する
サーバーよりもマネージドサービスを活用することで運用負荷の軽減に役立ちます。たとえば、Amazon RDSやAWS Lambdaを使用することで、基盤の運用管理にかかる手間を削減し、開発リソースをコアビジネスに集中させることが可能です。この設計は、スピードと効率性を両立させるための重要なポイントとなるでしょう。
6. 適切なデータベースソリューションを選択する
データベースソリューションの選択は、常に適切なものであることが望ましいです。AWSにおいては、トランザクション処理にはAmazon RDS、大規模データ分析にはAmazon Redshift、非構造化データにはAmazon DynamoDBを用いるのが良いとされています。これにより、パフォーマンスとコストの最適化が図れるでしょう。
7. 単⼀障害点を排除する
単一障害点とは、そこで障害が発生するとシステムの全てが停止してしまうという急所のことです。これを排除するためには、冗長性を確保してサービスの継続性を向上させなければなりません。
複数のアベイラビリティゾーン(AZ)にまたがるデプロイメントや、AWSのRoute 53を使用したDNSフェイルオーバー戦略により、システムの耐障害性を高めることが可能です。
8. コストを最適化する
リソース使用を常時モニタリングし、運用負担の無駄を削減します。AWS Cost ExplorerやAWS Trusted Advisorを活用して、リソースの利用状況を定期的に確認し、コスト削減の機会を探りましょう。また、Savings Plansや予約インスタンスを適切に利用することで、さらにコスト効率が向上します。
9. キャッシュを使⽤する
アクセス頻度の高いデータをキャッシュすれば、パフォーマンスを高めることができます。Amazon ElastiCacheを利用すると、データベースへの負荷を軽減し、アプリケーション全体のレスポンスの向上が可能です。
特に負荷が高くなりやすい、リアルタイムでのデータ処理やセッション管理においては、大きな効果を発揮するでしょう。
10.すべてのレイヤーでセキュリティを確保する
AWSを使ったシステム設計においては、とにかくデータ保護を重視し、アクセス制御を徹底します。AWS IAMを活用して、ユーザーとリソースへのアクセスを適切に管理しましょう。VPCセキュリティグループやネットワークACLにより、ネットワーク層を保護します。
また、AWS KMSを使用してデータ暗号化を実施し、セキュリティの多層防御を構築することも重要です。
11.増加するデータの管理に目を向ける
AWS運用が長期化すると、必然的に取扱データの量も大きくなっていくものです。効率的なデータ管理のためには、スケーラブルなデータ管理ソリューションを採用します。
Amazon S3を使用したライフサイクル管理や、Amazon Glacierを活用した長期アーカイブストレージによって、増加するデータを効率的に管理できます。これにより、コストと運用の両方の負担を軽減できるでしょう。
AWSが推奨する設計原則について
AWSは、システム設計に際しては以下の原則を踏まえて設計を行うことを推奨しています。それぞれの原則が意味するところを、ここで確認しておきましょう。
ビジネス成果を中心にチームを編成する
重要なのは、成果を目的としたチーム編成です。プロジェクトの目標に基づいた役割分担を行うことで、開発効率と目標達成率を向上させます。
また、各チームが担当分野に集中できるように、明確なスコープを設定することも重要です。これにより、チーム間のコミュニケーションコストを削減し、成果を最大化できます。
オブザーバビリティを実装して実用的なインサイトを得る
システムの挙動をリアルタイムで監視し、異常の検知やトラブルシューティングを迅速に行える環境を構築しましょう。
AWS運用においてはCloudWatchやX-Rayを活用すれば、オブザーバビリティを向上させられます。さらに、ログデータやメトリクスを活用したアラート設定を行うことで、潜在的な問題を早期に発見し、システムの安定性を保つことが可能です。
可能な場合は安全に自動化する
繰り返し行う作業や複雑なプロセスを自動化することは、業務効率化において重要な取り組みです。ただ、可能であればその安全性にも目を向けてみるべきでしょう。
特に、セキュリティパッチの適用やリソースのスケーリングは、自動化することで人的ミスを削減できます。セキュリティパッチの適用漏れにより脆弱性が残ることは、重大なインシデントにつながりかねません。
自動化を進める際には、権限管理やトレーサビリティを確保することで、安全性を維持することが重要です。
小規模かつ可逆的な変更を頻繁に行う
AWSの導入が初めての場合、大規模な変更は失敗時のリスクが高まるため、小規模で可逆的な変更を積極的に行うことが重要です。
このアプローチは、AWS設計の柔軟性、そしてスピードを両立させるのに役立ちます。また変更履歴を常に管理し、いつでも以前の状態に戻せる仕組みを整備することで、安心して実験的な変更を行える環境を構築できます。
オペレーション手順を頻繁に改善する
運用フローを継続的に改善できれば、チーム全体の生産性を向上させられるでしょう。フィードバックループをワークフローの中に取り入れることで、運用効率を最大化できます。
また、改善点を適宜明文化し、運用ガイドラインとして共有することで、全員が最新のベストプラクティスを遵守できます。
障害を予測する
障害を未然に防ぐための、リスク評価とシナリオ分析を行いましょう。仮想的な障害を想定してテストを実施し、耐障害性を高められます。
たとえば、Chaos Engineeringを活用して、システムの耐障害性を向上させる取り組みが効果的です。これにより、実際の障害発生時にも迅速かつ適切に対応できる能力を養えます。
運用上のイベントとメトリクスから学ぶ
運用データを分析し、ボトルネックや非効率なプロセスを特定しましょう。これにより見落とされがちな業務課題を把握・改善し、システム全体の最適化を進めることができます。
過去のイベントやトレンドを分析し、将来的な需要を予測することが大切です。
マネージドサービスを使用する
AWSが提供するマネージドサービスを活用することで、インフラ運用の負荷を軽減可能です。チームが本質的な課題解決に集中する上で、重要な取り組みです。
たとえば、Amazon RDSを使用することで、データベース管理の複雑さを軽減し、開発にリソースを集中させるような取り組みは、試してみる価値があるでしょう。
アーキテクチャ図を上手に設計するには?
AWS設計においては、アーキテクチャ図を作成の上、有効活用するノウハウも必要です。以下の設計のポイントは、AWSが公式に紹介している描画のコツであるため、参考にしてみるのが良いでしょう。
アーキテクチャ図に絶対的な正解を求めない
アーキテクチャ図には、絶対の正解はありません。柔軟性を持たせ、目的に応じてカスタマイズしながら作成するアプローチが必要です。
設計図は変更を前提とし、チーム間の共通理解を得るためのツールと捉えるべきです。さらに、図の解釈がチーム間で一貫性を保つよう、必要に応じて補足説明を追加することが重要です。
サービスの位置関係に目を向ける
描画の際には、サービス間の関連性や接続性を視覚化します。これにより、依存関係や潜在的なボトルネックを把握するのが容易となります。
また、サービスの配置を明確に示すことで、新しいメンバーや外部ステークホルダーに対する説明が容易になるのもポイントです。
伝えたいことに応じて自由に図で表現する
システムの概要を簡潔に伝えるためには、冗長な情報は省きつつ、要点を明確に表現することを意識しましょう。
視覚的な要素を活用して、関係性を直感的に示すことが重要です。図の形式は、ステークホルダーのニーズに応じて柔軟に調整できるよう備えておきます。
紙とペンを使ってまずは完成させる
どれだけスキルが身についてきたとしても、デジタルツールに囚われるのではなく手書きでアイデアをまとめることは有効です。
手書きによる直感的な図面の作成は、構想を整理しやすくなります。作成した手書きのラフスケッチは、初期段階でのブレインストーミングやアイデアの共有にも応用が効くため、有効活用しましょう。
それでいて積極的にツールを活用する
ラフスケッチによって概要が固まったら、デジタルツールの出番です。LucidchartやDraw.ioなどのツールは、複雑なシステム構成を具体的に描画する上で役に立ちます。
またAWS専用のアイコンセットを活用することで、視覚的な一貫性を保ち、関係者への共有の際にも見やすさと良い印象をもたらすことができるでしょう。
まとめ:まずはAWS推奨のアプローチを自分のモノにするところから
この記事では、AWSの運用に際して知っておきたい、設計プロセスの基礎について解説しました。設計業務に際しては、初学者であってもいきなり多くの専門用語に囲まれたり、仕組みが不透明なフレームワークやツールを運用したりすることが日常茶飯事です。
AWS設計を求められた際には、基本的な用語や仕組みだけでも頭に入れておくことで、業務の品質やスピードを向上させることができます。今回の記事をリファレンスとして参考にしながら、強力なシステムの構築を進めましょう。