クラウド上でのインフラ設計・構築の基本

2023/04/26に公開

はじめに

アダコテックの kacky です。これまで社内のインフラ設計をほぼ自分一人でやってきましたが、メンバーも増えてきてそろそろ他のメンバーでもインフラ設計、構築をしようという機運が高まっています。そこで、インフラを実際どういう流れで構築すべきかを書き残すことにしました。本記事では、クラウド上でのインフラ設計・構築の基本について解説します。

要件定義

まず、インフラ設計・構築において重要なのは、要件定義です。以下のようなポイントをチェックしましょう。

  1. 何がしたいのか
  2. 旧システムの移行か、新規作成か
  3. 利用頻度
  4. 要求性能 (応答時間、スループット)
  5. 規模 (ユーザー数、同時接続数、データサイズ)
  6. 可用性 (1 分でも止まったらダメか、数時間止めても ok か)
  7. セキュリティ (内部利用 or 外部公開、ID 管理、権限管理、機密情報ありなし)

アーキテクチャ構想を練る

要件定義が完了したら、アーキテクチャの構想を練ります。デザインパターンに沿って検討しましょう。

  • 単一インスタンス構成: 最もシンプルな構成で、アプリケーションとデータベースが 1 つのインスタンスに配置されます。開発やテスト環境で利用されることが多いですが、本番環境ではスケーラビリティや耐障害性に問題があります。

  • 三層アーキテクチャ: Web 層、アプリケーション層、データベース層の 3 つの層に分けられる構成です。それぞれの層が独立してスケールアウトでき、負荷分散やセキュリティの観点で有効です。

  • マイクロサービスアーキテクチャ: アプリケーションを小さな独立したサービスに分割し、それぞれが個別にデプロイ・スケールできる構成です。コンテナ技術やオーケストレーションツールと組み合わせて利用されることが多いです。

  • サーバーレスアーキテクチャ: サーバー管理やスケーリングの負担をクラウドプロバイダに任せることができる構成です。AWS Lambda などの Function as a Service (FaaS) を利用して、イベント駆動型のアプリケーションを実現します。

  • キャッシュを活用したアーキテクチャ: よく使われるデータや静的コンテンツをキャッシュすることで、パフォーマンスを向上させる構成です。AWS の ElastiCache や CloudFront を利用して、データベースやアプリケーションサーバーへのアクセスを軽減します。

これらのデザインパターンは要件定義に応じて適切に選択・組み合わせることで、効果的なインフラアーキテクチャを構築できます。プロジェクトの目的やリソースに応じて、最適なアーキテクチャを選択し、詳細な設計に移行していきましょう。

図などに書き起こす

アーキテクチャの構想が固まったら、図に書き起こしましょう。

図を書くときは

  • トラフィックを処理するノードを配置する (EC2、DB、LoadBalancer、Cache、Cloudfront、S3... etc)
  • トラフィックの流れに沿ってノードを線でつなぐ
  • ノードをどこに配置するか (private サブネットか public サブネットか、リージョンはどこか)を枠で囲む

を意識して、ノードの配置やトラフィックの流れを明確にすることが重要です。

コストをざっくり見積もる

適切なインフラのサイズを選定し、コストを概算しましょう。まだどれくらいトラフィックが来るか不明な場合は、最初は小さいサイズで作成し、拡張性を持たせる設計にすると良いでしょう。あとは AWS 等のサイトから単価を参照して実際に稼働した場合のコスト見積もりを表で埋めます。

レビューを受ける

コスト算出が終わった段階でレビューを受けます。レビュアーは

  • 要件に沿ったアーキテクチャが選ばれているか
  • コストは成果(アウトカム)に見合っているか

といった観点でレビューします。良くない点はこの段階で指摘して修正していきます。

IaC (Infrastracture as Code)コーディング

レビューが完了したら、初めて IaC(例:Terraform)を使って実装に取り掛かります。デザインパターンに沿ったアーキテクチャであれば、自社のコードであったり、terraform module registry に実装の手助けになる module が転がっていたりするので探しましょう。

コードレビューを受ける

コードが完成したら、コードレビューを受けましょう。レビュアーは再利用性や設計との食い違いがないか確認します。

デプロイと動作確認

レビューが完了したら、デプロイし動作確認を行います。これでインフラ設計・構築の一連の流れが完了します。

モニタリングとアラート設定

インフラがデプロイされ、動作確認が終わったら、適切なモニタリングとアラート設定を行いましょう。これによって、問題が発生した際にすぐに対応できる体制を整えることができます。主要なメトリクスやアラートのしきい値を検討し、必要に応じてダッシュボードを作成しておくと便利です。

障害対応とバックアップ

万が一の障害に備えて、適切なバックアップやリカバリプランを用意しておくことが重要です。定期的なバックアップやデータの検証、障害発生時の対応手順などを事前に確認しておきましょう。

インフラの改善と最適化

インフラが運用される中で、新たな要件や性能改善のニーズが生じることがあります。その際には、インフラの改善や最適化を行い、適切なレスポンスを提供できるようにしましょう。また、クラウドサービスの新機能や最新の技術トレンドにも目を光らせ、適切なタイミングでアップデートを行うことが重要です。

まとめ

本記事では、クラウド上でのインフラ設計・構築の基本について解説しました。要件定義から始まり、アーキテクチャの構想、図による表現、コスト見積もり、レビュー、IaC の実装、コードレビュー、デプロイ、動作確認、モニタリング、アラート設定、障害対応、バックアップ、改善、最適化といった一連の流れを抑えることで、効果的なインフラ設計・構築を行うことができます。これらのステップを踏みながら、組織やプロジェクトに合わせた最適なインフラを構築しましょう。

最後に、アダコテックはエンジニアを含め、製造業の革新に取り組んでくださる仲間を募集しています。気になるポジションがありましたら気軽にエントリーください。

https://herp.careers/v1/adacotech

Discussion