midnight in a perfect world

webエンジニアのメモ

 「Amazon Web Services エンタープライズ基盤設計の基本」を読む。

Amazon Web Services エンタープライズ基盤設計の基本

Amazon Web Services エンタープライズ基盤設計の基本

 

 AWSの設計パターンを学びたくて読む。試験対策に良いと聞いたのも要因。今udemiyで受けている講座の方が高度だが、試験対策という点で本書も試験問題を章ごとに出す形式で役には立つ。例によって、勉強になった部分の抜粋版。

1.Tips

  • S3でのデータ受信(IN)、S3から同一リージョン内のCloudFrontのエッジロケーションとEC2へのデータ送信(OUT)については料金は発生しない。
  • S3では新しいオブジェクトのPUTS(オブジェクトの新規作成)については「書き込み後の読みこみ」整合性を提供するが、PUT及びDELETEの上書き(オブジェクトの更新、削除)については結果整合性モデルを採用している。
  • 署名付URLを利用することで、アクセス許可を設定していないプライベートなコンテンツに対して、一時的に読み込み/書き込みの権限を与えることができる。有効期限も設定できる。署名付URLはAWSSDKで作成する。
  • 垂直スケーリングのメリットは「データとアプリケーションを変更せず、インスタンスタイプを変更するだけで対応できる」こと。性能に限界はあるけど。
  • マルチAZデペロイメント DBインスタンスの可用性を向上できる。マネージドコンソールやAPIから簡単にマルチAZデプロイメントを有効にすることが可能。
  • Amazon Auroraについて                         AmazonのRDSであり、MTSQLやPostgreSQLと互換性があるので、特に変更なしで移行が可能。特徴として、移行を前提とした、「SQLトランザクション処理」から「キャッシング」と「ロギングとストレージ」を分離させた3層のアーキテクチャを採用していることがある。
  • Proxy Protocolについて                          リクエストを送ってきたクライアントのIPアドレスを識別するのに実施。ELBはProxy Protocolをサポートしている。
  • CloudWatch Logsはアプリケーションのログを保存し、監視するサービスである。OSのシステムログからwebサーバのアクセスログまでほぼリアルタイムで監視できる。
  • オートスケール時の注意事項                       「ウォームアップ期間」を指定できる。勿論、ウォームアップ中はウーとスケールしない。テストとして利用。
  • RDSのストレージ                             スタンダードストレージからプロビジョンドIOPSストレージに変更することで、I/O性能を向上させることが出来る。Auroraは自動拡張する。
  • 一般的なRDB設計                                                                                                        スケールする場合は、書き込み用と読み込み用でサーバを分けること!書き込みはともかく、読みこみようはリードレプリカを増やすことでいくらでもスケール出来る。
  • 移行の時は、単純にRDSのリージョンをマルチAZを指定するだけで数分のダウンタイムで完了できる。
  • DynamoAmazonのスケーリングの限界から作られたNoSQL。結果整合性モデルによる可用性の向上、ハードウェアを追加するほど性能が向上する拡張性、シンプルなクエリーモデルなどが受けた。ただ、複雑なクエリー(Joinなど)やオンライントランザクションに対応していないので、「複雑な操作がいらないDB」に向いている。
  • キューでRDBの負荷急増を回避する                     メッセージキューイングとは、MQと略され、二つのコンポーネントがメッセージをやり取りするときにメッセージを格納する仕組みのこと。
  • SQSについて                               受信クライアントかが自身の都合に合わせて、ポーリングによってメッセージを受け取る。SNSとSQSを組み合わせると、特定のクライアント(サブスクライバー)にはメッセージを即時配信し、他のクライアントはポーリングでメッセージを受け取る、というアーキテクチャを設計可能。
  • web向け動画エンコード用、スマートフォン向け動画エンコード用、サムネイル作成用の仮想マシンは独立しているので、各処理の負荷に応じて個別にスケーリングできる。
  • EC2はコードを実行してなくても料金が発生するが、Lambdaではコード実行に使用した時間について100ミリ秒単位で支払する。
  • VPCRDBを使うより、データストアとしてDynamoDBを使う方がENI(Elastic Network Interface)の作成が不要でレイテンシがなくなるため、効率的。さらに、RDBには最大同時接続の問題が起こるが、Lambdaファンクションは水平方向のスケーラビリティを持っているので、100リクエストがあれば100台のコンテナを作成し、処理をほぼ同時に実行できる。
  • CloudFrontはエッジロケーション、リージョン別キャッシュという2段階のキャッシュ機構を備えており、パフォーマンスが大幅向上できる。
  • S3の署名付きURLを使うことで、APサーバでユーザ認証を行い、認可されたユーザに数分程度の有効期限を付けた署名付きURLでプライベートなアクセスを実現できる。
  • 加重ラウンドロビンはクライアントからの同一内容のDNSクエリに対して返す情報を重みづけして切り替える機能のこと。Route53をにて設定変更したWebサーバと元のサーバにトラフィックを5%だけ流すというA/Bテストができる。
  • CloudTrailとAWS Configを使って、IAMで制御できない内部ユーザの統制が出来る。Amazon SNSと連携すればきちんとしたログ管理や通知もできる。
  • 暗号鍵を作成・管理する「Amazon KMS」によって、色んなマネージドサービスと連携してデータのやり取りを暗号化させる。アプリに返されるのがマスターキーのIDのみで、マスターキーはKMSを出ることがないというのが重要。アプリはファイルを暗号化するたびに、マスターキーのIDを引数としてKMSNおGenerateDataKey APIを呼び出してKMSからデータキーを取得し、そのデータキーで暗号化する。データキー自体はアプリ側で廃棄する。復号するときは逆の動きを行う。暗号化ごとにデータキーが異なるので、漏えいしても復号できるファイルは一つだけである。
  • CloudFormationでは組み込み関数を使ってリソースの定義やオプションの指定を行う。