ablog

不器用で落着きのない技術者のメモ

Amazon DynamoDB の監視設計

アラート通知

ThrottledRequests
メトリクス 説明
ThrottledRequests リソース (テーブルやインデックスなど) でプロビジョニングされたスループットの上限を超える、DynamoDB へのリクエスト。リクエスト内で任意のイベントがプロビジョンドスループットの制限を超過した場合、ThrottledRequests は 1 ずつ増加します。たとえば、グローバルセカンダリインデックスを持つテーブルの項目を更新する場合、テーブルへの書き込みと、各インデックスへの書き込みという複数のイベントが発生します。1 つ以上のイベントが抑制されると、ThrottledRequests が 1 ずつ増加します。
(中略)
どのイベントがリクエストを抑制しているかを確認するには、ThrottledRequests と、そのテーブルとインデックスの ReadThrottleEvents と WriteThrottleEvents を比較してください。
注記
調整されたリクエストでは、HTTP 400 ステータスコードになります。これらのすべてのイベントは、ThrottledRequests メトリクスに反映されますが、UserErrors メトリクスには反映されません。
単位: Count
ディメンション: TableName, Operation
有効な統計:
-Sum
-SampleCount
  • プロビジョニングされたスループットの上限を超える、DynamoDB へのリクエス
  • ThrottledRequests が発生した場合は、ReadThrottleEvents、WriteThrottleEvents を確認することで、Read/Write のいずれもしくは両方でスロットリングが発生しているかを確認することができる。1リクエストのスロットリングで ThrottledRequests は 1 増える。1 リクエストで複数回のイベントが発生すると ReadThrottleEvents、WriteThrottleEvents は 2 以上増えることがある。
  • オンデマンドキャパシティモードでは自動的にスケールアウトするため基本的にスロットリングは発生しないが、急激なリクエスト増加などにより発生する可能性があるため、監視対象とすることを推奨。
    • テーブルにおける前のピークトラフィックの最大 2 倍まで瞬時に対応する。ただし、30 分以内に前のピークの 2 倍を超えた場合、スロットリングが発生する可能性がある。
SystemErrors
メトリクス 説明
SystemErrors 指定された期間中に HTTP 500 ステータスコードを生成する、DynamoDB または DynamoDB ストリームへのリクエスト。通常、HTTP 500 は内部サービスエラーを示します。
単位: Count
ディメンション: TableName, Operation
有効な統計:
-Sum
-SampleCount
DynamoDB メトリクスとディメンション - Amazon DynamoDB

モニタリング

ConsumedReadCapacityUnits
ConsumedWriteCapacityUnits
SuccessfulRequestLatency

作成済の Aurora クラスターの Performance Insights を有効化する

  • クラスター作成後に Performance Insights を有効化する場合は、[クラスターの変更] ではなく [インスタンスの変更] で有効化する。
  • Aurora MySQL では t2、t3 インスタンスクラスは Performance Insights はサポートされていない。
  • RDS MySQL から Aurora リードレプリカを作成して昇格した場合に、Performance Insights を有効化できないという相談を受けたことがあるが、t2、t3 インスタンスクラス意外であれば、[インスタンスの変更]から有効化することができる。

AWS Backup で Amazon DynamoDB のバックアップを定期的に取得する

AWS Backup で Amazon DynamoDB のバックアップを日次で取得してみた。
マネジメントコンソールで AWS Backup に移動してから以下の手順で作成した。

手順

バックアッププランを作成する
  • バックアップウインドウ: バックアップウインドウをカスタマイズ
    • バックアップウインドウの 開始時間 04:00 PM UTCJST 01:00)
    • 次の時間内に開始: 1時間
      • 開始時間からできるだけ早く開始されるよう設定
    • 次の時間内に完了: 18時間
      • バックアップに要する時間より長めにウィンドウを設定
  • 有効期限切れ: 作成後の日数=7
      • バックアップを保持する期間を設定

f:id:yohei-a:20210120072956p:plain

リソースを割り当てる
  • [リソースを割り当てる] をクリック

f:id:yohei-a:20210120073015p:plain

  • リソースを割り当てる
    • 割り当て単位: リソースID
    • リソースタイプ: DynamoDB
    • テーブル名: 対象のテーブル名を選択

f:id:yohei-a:20210120073033p:plain

Spark UI で参照している S3 のパスを変更する

CloudFormation で Spark UI 用に EC2 インスタンスを作成後に、参照する S3 のパスを変更する手順。

  • /opt/spark/conf/spark-defaults.conf の spark.history.fs.logDirectory を編集する
spark.eventLog.enabled                      true
spark.history.fs.logDirectory               s3a://spark-ui/ap-northeast-1/eventlog ★
spark.history.ui.port                       0
spark.ssl.historyServer.enabled             true
spark.ssl.historyServer.port                8192
spark.ssl.historyServer.keyStorePassword    ********
spark.ssl.historyServer.keyStore            /home/ec2-user/ec2-13-***-***-250.ap-northeast-1.compute.amazonaws.com.jks
  • Spark History Server を再起動する
$ sudo systemctl restart spark-history-server.service

CloudFormation で Spark UI 作成時にアタッチされる IAM ロール

Spark UI で Glue ジョブの結果を確認する手順 - ablog で、CloudFormation で Spark UI 用 EC2 を作成したときにアタッチされる IAM ロールに設定されている IAM ポリシーは以下の通り。

  • AWS 管理ポリシー
    • CloudWatchAgentServerPolicy
    • AmazonS3ReadOnlyAccess
  • root(インラインポリシー)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

06. CloudFront でカスタムドメインのSSL証明書を設定する

CloudFront

  • マネジメントコンソールで CloudFront にアクセスする。
  • [Create Distribution] をクリック、[Get Started] をクリック、以下の通り入力し、[Create Distribution] をクリック。
    • Origin Domain Name: portfolio.yoheia.com.s3.amazonaws.com
    • Origin ID: S3-portfolio.yoheia.com
    • Origin Custom Headers
      • Header Name: Referer
      • Value: 119a46ec6677cfb90e1704250a5db941 ※任意の文字列
  • Alternate Domain Names (CNAMEs): portfolio.yoheia.com
  • SSL Certificate: Custom SSL Certificate (example.com)
    • portfolio.yoheia.com
  • Default Root Object: index.html

f:id:yohei-a:20210117232856p:plain

Route 53

  • マネジメントコンソールで Route 53 にアクセスする。
  • portfolio.yoheia.com のエイリアスを新しく作成した CloudFront の Distribution に変更する。

f:id:yohei-a:20210117235247p:plain

05. カスタムドメインのSSL証明書を作成する

  • マネジメントコンソールで ACM にアクセスする。
  • [証明書のプロビジョニング]-[今すぐ始める] をクリック。

f:id:yohei-a:20210117224924p:plain

  • [パブリック証明書のリクエスト] を選択。

f:id:yohei-a:20210117225146p:plain

f:id:yohei-a:20210117225344p:plain

  • [DNS の検証]を選択。

f:id:yohei-a:20210117225452p:plain

  • [確定とリクエスト] をクリック。

f:id:yohei-a:20210117230029p:plain

  • [続行] をクリック。

f:id:yohei-a:20210117230147p:plain

  • [Route 53 でのレコードの作成] をクリック、Route 53 にレコードを作成する。

f:id:yohei-a:20210117230417p:plain

  • しばらくすると、[状況]が「発行済み」になる。

f:id:yohei-a:20210117230804p:plain