かべぎわブログ

技術的なことについてかけたらいいな…

AWSの設計におけるベストプラクティス

AWSでの設定におけるベストプラクティスみたいなものを自分なりにまとめてみました。

スケーラビリティを確保する

  • インフラをシームレスにスケールできることがAWSの利点。
  • AWSのすべてのレイヤーでスケーラビリティを活用するべき。
  • 理想的なシステムはスケールアウトするだけでなく、不要なインスタンスが稼働し続けないようにシステムをスケールダウンするようなシステム。

インフラ環境を自動化する

  • リソースのプロビジョニング、終了、設定は可能な限り自動化する。
  • 例えば異常のあるリソースの検出と代替リソースの起動を自動化する。
  • リソースの変更時に通知を受信するようにする。

リソースを使い捨てにする

  • 各インスタンスの設定を同一にし、リソースのデプロイを自動化する。
  • 使用していないリソースは削除する。
  • 固定IPアドレスはできるだけ利用せず、新しいIPアドレスに自動的に切り替える。
  • 古いインスタンスと新しいインスタンスをかんたんに置き換えられるようにしておく。

疎結合化する

  • 独立したサービスでアーキテクチャを設計する。
  • システムのレイヤー間にAWSのマネージドサービスを活用して疎結合化させる。
  • ELBとSQSを利用するとかんたんに疎結合に近づくことができる。

AWSのサービスを最大限利用して設計する

  • すべてをEC2インスタンスのサーバの内部で実施するのではなく、AWSサービスを利用することを検討する。
  • マネージドサービスを利用してサーバレス化させる。

データの特性にあったデータベースを選択する

  • 要件にあったデータベースを適切に選んで利用する。
  • Read/Writeやストレージのサイズ、レイテンシーなどを考慮する。
  • データベースにあわせて業務を決めるのではなく、業務をもとにデータベースを洗濯する。

SPOFをなくす

  • 一箇所の障害によってシステム全体が停止するのを避けるため、冗長性を保たせる。
  • 物理ハードが故障した場合でもサービスを維持し続けられるように設計する。

コスト効率をあげる

  • コストを最適化する。
  • リソースのサイズやタイプが適切かどうか確認する。
  • 使用されていないリソースを終了する。
  • マネージドサービスを積極的に利用し、利用料を下げる。

キャッシュを利用して通信料を抑える

  • CloudFrontなどのキャッシュサービスを利用する。
  • キャッシュを利用することで通信コストやレイテンシーなどを軽減することができる。

セキュリティを確保する

  • ユーザには権限は利用する最小の権限しか与えない。
  • データのやり取りは暗号化する。
  • アクセスログを記録する。

 

参考資料

AWS Black Belt Online Seminar 2016 クラウドのためのアーキテクチャ設計 -ベストプラクティス-