ヤマムギ

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時間は待っていただけるであろう想定です。

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


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

【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

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

 - AWS

ad

ad

  関連記事

Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)

Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …

DS18B20センサー+Raspberry Piで取得した温度をAmazon Kinesis FirehoseからS3へ格納してAthenaでクエリーしたのをQuickSightで可視化する

JAWS DAYS 2017でやりますハンズオンの「[IoTハンズオン] Ras …

RDS for MySQL のインスタンスタイプ変更

当ブログのデータベースは、RDS for MySQLです。 個人利用ですし、障害 …

JAWS FESTA 2017 Reverse X re:Birth

JAWS FESTA 2017 中四国 今年はブログタイトル「JAWS FEST …

AWS Lambda(Python3)でSelenium + Chrome Headless + でwebスクレイピングする

インターネット上に公開されている情報をDynamoDBにつっこみたいだけなので、 …

CloudFrontからのバーチャルホストなサイトのテストってどうしてます?

このブログの構成です。 AWSで構築しています。 4つのサイトを1つのEC2で配 …

AWS Step Functions まずはパラレルでLambdaを並列実行してみました

複数のlambdaの実行制御をLambdaでやってましたが、その部分をStep …

特定AWSアカウント特定リージョンのCloud9環境を削除するLambda(Python)

やりたいこと 特定アカウント内特定リージョン内のCloud9環境を全部削除したい …

JAWS-UG関西IoT専門支部 ✕ SORACOM UG 関西「Wio LTE + 絶対圧センサーで遊ぼう!」ワークショップにいってきた

JAWS-UG関西IoT専門支部 ✕ SORACOM UG 関西「Wio LTE …

Amazon API GatewayをLambda(Python)で削除する

やりたいこと 特定のAWSアカウント、特定のリージョン内のAPI Gateway …