AlexaスキルでCloudWatch Logsの課金が気になった時に見る覚書
Alexaスキルを自前のAWSアカウントで運用している場合、CloudWatch Logsで課金が発生していることが結構あります。 なぜCloudWatch Logs? Lambdaの実行ログが記録されるのがこのサービス […]
目次
Alexaスキルを自前のAWSアカウントで運用している場合、CloudWatch Logsで課金が発生していることが結構あります。
なぜCloudWatch Logs?
Lambdaの実行ログが記録されるのがこのサービスです。
ユーザー側で操作設定をしなくても、Lambda関数を実行した時に自動的に記録するためのLog Groupを作成してくれます。便利ですね。
ですが、このLambda実行時に自動生成されるLog Groupがなかなか曲者だったりします。
Lambda実行時に作られるLog Groupは無期限保存
サーバーを触ったことがあると、「ログを一定期間で削除してディスク容量を圧迫しないようにする」ようなタスクを経験されると思います。それのAWS版だと思ってもらえればわかりやすいかもしれません。
CloudWatch LogsのLog Groupの場合、保持期限を設定しておけば勝手に期限切れのログデータを削除してくれます。が、Lambdaが自動生成する場合、保持期限が設定されないため、無期限にログデータを持つことになります。
そしてCloudWatch Logsは使用量に応じた従量課金制で、その対象にはログのデータ量も含まれます。つまり放っておくと課金対象がどんどん増えていきます。
GB単位課金なので大事故にはなりにくい
とはいえ無料枠が5GB用意されており、保存しているログデータに対する課金も超過1GBあたり0.03USD(3円程度)です。
なのでスキルを大量に公開しているか、超人気スキルを複数公開しているなどでなければ目が飛び出るような金額の請求がここから発生することは考えにくいです。
とはいえ無期限保持のままだと、月日が立つごとにデータ量が増え続けます。「塵も積もれば山となる」とも言いますので、やはり保持期限は設定しておきましょう。
個人情報が含まれる恐れも
また、ログを無期限に保持することには個人情報の取り扱いからも問題となり得ます。
スキルのリクエスト内容やスキル内で呼び出しているAPIのレスポンスなどを記録している場合、多少の個人情報がログに残る可能性もあります。
GDPRを筆頭に個人情報保護に関してはこれから厳格になる可能性が高く、不用意にデータを持ち続けることはあまり推奨しません。
課金の面でも、個人情報の取り扱いの面でも、CloudWatch LogsのLogGroupは一定期間で削除する設定にしましょう。
Log Groupの保持期限変更について
Qiitaのこのあたりの記事を見ながらBashやPythonなどで操作するのが手早いかなと思います。
- CloudWatch ロググループの保持期間を一括で設定(上書き)する
https://qiita.com/shogomuranushi/items/22907a655d27c71b7dda - Amazon CloudFront & Lambda@Edgeが作るlogGroupの保存期間をスクリプトから一括でセット
https://qiita.com/sawanoboly/items/0cebb040a820cfd10300 - CloudWatchのログ保持期間を設定する + 古いログストリームを削除する
https://qiita.com/oke-py/items/2db52302eb17f5df5206
追記:2020/05/19
ASK CLIの次のリリース(V2.7.1以降)でセットアップした場合のCloudFormationテンプレートにCloudWatch LogsのLogGroupが追加される予定です。
該当PR: https://github.com/alexa/ask-cli/pull/199
これがリリースされると、以降ask new
でCloudFormationを利用したスキルをセットアップした場合に限りCloudWatch Logsのログ有効期限がデフォルトで14日となり、カスタマイズも容易になります。
ASK CDKもASK CLIもPull Requestに対するレスポンスがかなり早く、また丁寧な反応をもらえます。
「ん?」と思うことがあれば、是非積極的にPull Requestを出していきましょう 🙂