ヤマムギ

growing hard days.

*

AWS Lambda(Python)でDynamoDB テーブルを日次で削除/作成(オートスケーリング付き)

      2018/12/08

この記事はAWS #2 Advent Calendar 2018に参加した記事です。

Selenium, Headless ChromeとAWS Lambdaで夜な夜なスクレイピング」にも書きましたが、上記のようなアーキテクチャで、Alexaスキルの開発を進めていまして、元となる情報をwebとあるwebサイトから収集しています。
日時点での最新情報をDynamoDBに書き込んでいます。
洗い替えでかまわないので、テーブル名に日付け文字列を付加して、毎日作り直しています。
作り直しが完了すれば、スクレイピングを始めるという処理順番をStepFunctionsで設定しています。

DynamoDBテーブルを作るだけなら調べることなくさっさと終わったのですが、キャパシティユニットのオートスケーリングを有効にするところで、少し調べたので書き残します。

StepFunctions

一応StepFunctionsのステートマシンのJSONです。
順番に処理しているだけなのでシンプルです。

では、Lambdaのコードを見ていきますが、削除の前に作成から見ます。
作成したものを翌々日に削除するので、何を作成しているかから見たほうがわかりやすいからです。

テーブル作成(オートスケーリング付き)

現在、マネジメントコンソールでDynamoDBテーブルを作成すると、オートスケーリングがデフォルトで有効になります。
ですが、LambdaのSDK boto3ではそこまではやってくれません。

このLambdaは環境変数で、タイムゾーンをJSTにしています。
具体的にはLambdaの環境変数キーに TZ , 値に Asia/Toky としています。

そして、StepFunctionsはCloudWatch Eventsで23時にターゲットとして実行されています。
UTCでは9時間の時差があるので、Cron式で 0 14 * * ? としています。

それを踏まえた上で見ていきます。

まず最初に作成するテーブル名を決めます。
明日の日付が入るテーブル名にします。

そしてDynamoDBテーブルを作成します。

ローカルセカンダリインデックスを持つDynamoDBテーブルを作成しました。
waiterを使ってテーブルが作成完了するまで待ちます。

次にこのテーブルにRCU,WCUそれぞれのオートスケーリングを設定していきます。

オートスケーリングを設定するには、application-autoscaling クライアントが必要でした。
dynamodb:table:ReadCapacityUnits, dynamodb:table:WriteCapacityUnitsでそれぞれ設定します。

これで完了かと思うとそうではないのですね。
この段階ではスケールする枠だけが決まって、いつスケールするかの設定が入っていません。
そうです。スケーリングポリシーもCloudWatchアラームも設定されていません。

次にその設定をしていきます。

application-autoscaling クライアントのput_scaling_policyを使いました。

これでDynamoDBのオートスケーリングとCloudWatchのアラームも出来ました。

テーブル削除(CloudWatchアラームも削除)

次にテーブルを削除するコードを見ます。
DynamoDBのテーブルだけが削除されてアラームが残っていては余分なコストがかかってしまいます。
ですので、消し忘れのないようにCloudWatchアラームも削除します。

テーブルは2日間は保持しておくので、昨日の日付のテーブルを削除しています。

テーブルを削除します。
テーブルに追加したスケーラブルターゲットもあわせて削除されました。
でもこれだけではCloudWatchアラームが残ります。

オートスケーリングポリシーを削除します。

これで掃除完了です。


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

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

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

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

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

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

 - AWS , , ,

ad

ad

  関連記事

Redmineの添付ファイルをS3に同期する

RedmineをAWS上で構築するデザインを考えていて、せっかくなので冗長化しよ …

前からできましたっけ??CloudWatch Logsの保持設定を複数まとめて設定

AWSの個人アカウントで要らなさそうなリソースの断捨離をしてます。 CloudW …

リザーブドインスタンスはじめました

このブログも2014年9月にはじめたので、もうすぐ3年。 1件~17件とばらつき …

AWS CodeDeployからEC2 Auto Scalingにデプロイするチュートリアル

公式チュートリアルチュートリアル: アプリケーションを CodeDeployグル …

WordPressをAmazon CloudFrontで配信してついでにACM(AWS Certificate Manager)を使って常時SSL化する

当サイトの500と502の発生状況がドイヒーであるとの苦情をいただきまして、Am …

PyCharmにAWS Tool kitをインストールしてサンプルのLambda関数をデプロイして実行しました

この記事はJetBrainsIDE Advent Calendar 2018に参 …

サイトのHTTPステータスを5分おきにチェックして200以外ならSlackに通知する

すいません。ここ最近出費が重なりまして、某監視サービスのプランを有料プランからF …

RDSの証明書をrds-ca-2019に更新しました

クライアント接続で署名書使ってないので、必要ないのですが、古いままなのも気持ち悪 …

AWS CDK とにかくサンプルでやってみる

Cloud9でAWS CDK環境で作った環境でサンプルプロジェクトからのデプロイ …

AWS 認定クラウドプラクティショナーのサンプル問題

AWS認定クラウドプラクティショナのサンプル問題2018年9月25日現在で、英語 …