ヤマムギ

growing hard days.

*

ブログのアーキテクチャをコストベースで見直しました

      2020/01/09

当ブログはAWSで構築しています。
アーキテクチャをコストを最重視して見直しましたので、その結果を記録します。

2019年最終のアーキテクチャ

2019年は最終的に次のようなアーキテクチャになりました。

2019年12月コスト実績

  • EC2(t3.nano spot 2instance) $2.99
  • EBS $2.86
  • RDS(Aurora Serverless) $79.53
  • ELB $18.14
  • ElastiCache(t2.micro 1node) $19.34
  • S3 $0.45
  • WAF $ 2.05
  • CloudTrail $0.25
  • CloudWatch $0.69
  • Data Transfer $0.17
  • CloudFront $7.02

Total $146.14

RTOとRPO

  • ステータス障害時のRTO(目標復旧時間) 300秒
  • ステータス障害時のRPO(目標復旧時点) 0秒

  • AZ障害時のRTO(目標復旧時間) 300秒

  • AZ障害時のRPO(目標復旧時点) 0秒

障害ケースにもよるかとは思いますが、目標として。
Aurora Serverlessのフェイルオーバーは「このフェイルオーバーメカニズムは、Aurora プロビジョンドクラスターのフェイルオーバーよりも時間がかかります。 Aurora Serverless のフェイルオーバー時間は、AWS リージョン内の他の AZ の需要やキャパシティーの可用性によって異なるため、現在定義されていません。」
とのことなので、ひとまず300秒としています。
データ損失はない想定です。

Aurora Serverlessの停止におけるコスト削減

WordPress W3 Total Cache のDatabaseCacheをAmazon ElastiCacheのmemcachedに格納するや、Amazon Aurora Serverless のログをCloudWatch Logsに出力するに書きましたように、データベースへのコネクションを減らすことで、Aurora Serverlessが停止して、コスト削減を図れるのではないかと検討してみました。

停止はしますが、5分以内ぐらいでresumeしてます。
1日のうちでもそれほどの停止時間は発生していません。

メトリクスで見てみると、コネクションがない時間は、ACUも0にはなっているのですが、すぐに開始されているようです。
必ずしもコネクションゼロ=アイドル状態、ではないということなのだろうと思います。
WordPressではデータベースをアイドル状態にすることがそもそも難しいのか、もっとログを調査して突き詰めてみるべきか、とも思いましたが、今回はやめました。

2020年初頭のアーキテクチャ

そして、今現在はこうなりました。

2020年1月想定コスト

  • EC2(t3.nano spot 1instance) $1.5
  • EBS $1.5
  • RDS(Aurora Serverless) $23
  • S3 $0.45
  • CloudTrail $0.25
  • CloudWatch $0.3
  • Data Transfer $0.1
  • CloudFront $7.02

Total $34.3

RTOとRPO

  • ステータス障害時のRTO(復旧時間) 12時間
  • ステータス障害時のRPO(復旧時点) 24時間

AZどころか、ハードウェアやソフトウェアレベルの障害でも、これだけのRTOとRPOを許容した、ということですので、企業レベルのアプリケーションでは考えられない構成です。

障害発生時に、EC2インスタンスはAutoScallingではあるので、新しいインスタンスは起動するだろうという想定です。
EIPを付け替えて、復旧完了です。
これはイベントをキャッチして自動化することを検討しています。

RDSはシングルインスタンスなので、スナップショットから復元することを想定しています。
その作業は、日中は仕事しているので無理ですし、夜は寝ているので無理です。
12時間に1回ぐらいはそのタイミングもあるだろうと想定しています。

シングルインスタンスで障害発生やAZ障害のときの状態がどうなるかにもよりますが、ポイントタイムリカバリに頼れない想定で、RPOを24時間で見ています。

差額$100でこれらが買えるのならものすごく安い話です。
ですが、今回はブログ読者の方には申し訳ないですが、12時間は待っていただけるであろう想定です。

実際に障害が発生した際は、また当ブログでご案内したいと思います。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

「AWS教科書 AWS認定デベロッパーアソシエイト テキスト&問題集 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS

  関連記事

Amazon LinuxにRedmine をインストールする(手順整理版)

Amazon LinuxにRedmineをインストールしました手順を記載します。 …

オンプレミスに見立てたオハイオリージョンにVyOSインスタンスを起動して東京リージョンからVPN接続

AWSクイックスタートのActive Directory Domain Serv …

ALBのヘルスチェックでPHPとMySQL接続をチェック

当ブログで504エラーが発生して、オートスケーリングにより自動でインスタンスが置 …

Amazon Auroraのスナップショットの暗号化とリージョン間コピーを改めて試しました

Amazon Auroraデータベースを暗号化して、スナップショットを作成、クロ …

Backlogの課題チケット更新内容をMicrosoft Teamsに通知する(AWS Lambda Python)

BacklogにSlack連携が追加されました。 ですが、私の所属している会社で …

「re:CAP ~サーバーワークス re:Invent 2018 報告会~」でre:Invent2018について思われたことを聞かせていただいた

サーバーワークスさんのre:Invent re:CAPにおじゃましました。 re …

CloudFormation StackSetsでOrganizations組織のアカウントに一気にIAMロールを作成した

Organizationsで管理している各アカウントにIAMロールを作成したい場 …

AWS Lambda(Python)で生成した文字をAmazon Connectで音声を設定して発信する

Amazon Connectから発信する電話の音声を動的に設定します。 Lamb …

QuickSightのVisualizeをダッシュボード化して定期メール

「Backlogの実績工数をAmazon QuickSightで可視化してわかっ …

Aurora Serverless Data APIを有効にしてQuery Editorを使ってみました

Aurora ServerlessのMySQLでData APIを有効にして作成 …