未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

AWS 学習履歴(4)~AWSアーキテクチャ設計・ベストプラクティス~

AWS学習履歴の趣旨

AWSでデプロイをしたことはあるものの、AWSの理解に足りない部分があるのが悔しいと思い、UdemyのAWS講座で勉強を開始しました。

以下の記事の続きです。

atora1992.hatenablog.com

学習内容を全て残すことは量が莫大になるので無理ですが、『重要かな?と思った部分を記録として残そう!』というのが趣旨です。

更新頻度は不定期ですが、地道に続けていこうかと思います。

応援よろしくお願いします。

AWSアーキテクチャ設計の基礎

AZの選択

1つのリージョンについて、2つのAZが基本。
マルチAZにサーバーやDBの冗長構成を確立し、高い可用性(システムがどれだけ継続して稼働できるかという能力)を実現する。
また、S3にDBのバックアップをとっていく。

VPC

atora1992.hatenablog.com

2つ以上のVPCが基本(小規模なシステムでは1つの方がいい場合もある)。

どのような方式でVPCを設置するのかは以下の2方式がある。

  • マルチVPC方式:2つのAZにまたいで、複数VPCで複数システムに分割する
  • マルチアカウント方式:アカウントごとにVPCをもつ。例えば、VPCで部署単位に分割するなど

サブネットの分割

パブリックサブネットとプライベートサブネットに分割して、インターネットアクセス範囲を定義する。
1つのAZに対して1対のサブネットが基本。

VPC間の接続

VPC Peeringを用いてVPC間を接続する。
VPCが多い時には、どことどこのVPCが繋がる必要があるのかを考えていく。

Well Architected Framework

AWSが提唱している設計原則。以下の5項目から成り立つ。

項目 説明
Reliability:信頼性 障害による中断・停止とそこからの復旧による影響を軽減させる
Performance Efficiency:パフォーマンス効率 システム要件を満たしつつ、リソースを活用してインフラを効率化する
Security:セキュリティ AWS内のデータ・システム・アセットの保護とモニタリングによりセキュリティを高める
Cost Optimization:コスト最適化 不必要なリソースの削減や最適な料金選択によりコストを削減する
Operational Excellence:運用上の優秀性 計画変更・予期せぬイベント発生時、自動化された運用実務・文書化されテストされレビューされた手順があること

全てに共通して言えることは、日々アップデートされるAWSリソースを用いて、インフラの設計もアップデート・改善させていくということかと思う。

また、アップデートして最適化させていく為にも、今の現状を把握することが重要になってくる。

上記の5つを念頭において、インフラを設計していくことが大事!

AWSベストプラクティス

AWSが提唱するインフラ設計におけるベストプラクティスは11ある。(Well Architected Frameworkを実現するための具体的な方法といったところだろうか)

  1. スケーラビリティの確保
  2. 環境の自動化
  3. 使い捨てリソースの使用
  4. コンポーネント疎結合
  5. サーバーでなくサービス(サーバレス)
  6. 最適なDB選択
  7. 増大するデータ量対応
  8. 単一障害点の排除
  9. コスト最適化
  10. キャッシュの利用
  11. セキュリティの確保

スケーラビリティの確保

需要変化に対応できるようにする。

e.g.
EC2 Auto Recovery, EC2 Auto Scaling, Cloud Watch, RDS, Dynamo DB

環境の自動化

主要プロセスの自動化により、システムの安定性・整合性・組織の効率性を改善させる。

e.g.
Cloud Formation, Codeシリーズ(構築自動化ツール), ECS, Elastic Beanstalk, OpsWorks, Cloud Watch

使い捨てリソースの利用

サーバーなどのコンポーネントを一時的リソースとして利用・設計する。

e.g.
EC2(すぐに作成できて、削除できる), Auto Scaling

コンポーネント疎結合

コンポーネント間の相互依存を減らし、1つのコンポーネントの障害・変更による全体への影響を軽減する。

e.g.
ELB, SNS, SQS

サーバーでなくサービス(サーバレス)

マネージド型サービスとサーバレスアーキテクチャにより、効率的な設計・運用を実現する。

e.g.
Lambda, SNS, SQS, ELB, SES, DynamoDB, Amazon API Gateway, Amazon Cognito

最適なDB選択

ワークロードに応じた最適なDBを利用する。

e.g.
RedShift, RDS, Dynamo DB, Aurora, Elastic Search

増大するデータ量対応

絶えず増加するデータの保持を効率的に実施する。(ビッグデータ/ IoTなど)

e.g.
S3, Kinesis, Glacier

単一障害点の排除

単一障害点とは、「その箇所が動かなくなると、システム全体に障害を引き起こしてしまうような点」のことをいう。
AWSサービスの多くは高可用性が担保されているが、EC2・RDSなどユーザーが設計する必要のある部分についてはユーザー側で高可用性を実現するよう設計する必要がある。

コスト最適化

リソースサイズの最適化・最適な料金プランの選択などにより、コストを最適化する。

キャッシュの利用

繰り返し取り出すようなデータ・コンテンツはキャッシュを利用する。

e.g.
Cloud Front, ElastiCache

セキュリティの確保

全て(リソース外も含めて)にセキュリティを実装する。


細かくプラクティスごとに例をつけましたが、それぞれの内容(全ては難しいですが)については今後触れていきたいと思いますので、少々お待ちください。

インフラの設計は考えることが多くて大変ですね。。
設計するにもそれぞれで用いるリソースを理解する必要がありますし。。

少しづつでも理解を進めて、インフラの設計ができるようになりたいです!

次の記事へ

atora1992.hatenablog.com