特にプロダクション環境でウェブサービスを稼働させるときにトラフィックの多さから AWS サービスのクォータ(サービス制限)に該当する可能性がある🛑 AWS Well-Architected Framework (Reliability Pillar) でも REL01-BP01 ~ REL01-BP06 にクォータ関連のベストプラクティスが紹介されている.クォータを理解しつつ,Service Quotas を使ってクォータを管理・モニタリングすることが重要になる👌
クォータリクエストを自動化する
Service Quotas は API / AWS CLI / AWS SDK でサポートされている❗️よって,AWS SDK For Go に依存している Terraform AWS Provider の aws_servicequotas_service_quota リソースを使えば Service Quotas のクォータ増加リクエストを管理できる(命名規則とは言え aws_servicequotas_service_quota
はスゴイなぁーw ).
👾 quotas.tf
今回はサンプルとして AWS Lambda 関数のクォータ「同時実行数」をデフォルトの 1000
から 1500
に変更するクォータリクエストを追加する.
# AWS Lambda: Concurrent executions resource "aws_servicequotas_service_quota" "lambda_concurrent_executions" { service_code = "lambda" quota_code = "L-B99A9384" value = 1500 }
Before
After
実行するとクォータリクエストが「保留中」→「リクエスト済み」となる.同時にサポートケースも作られて Amazon Web Services: You have opened a new Support case: 000000000000000
というタイトルのメールが届く✉️
AWS CloudFormation 未サポート
少し意外ではあるけど,AWS CloudFormation (と AWS CDK) ではまだ Service Quotas がサポートされてなく,クォータを管理しにくいという課題がある.CloudFormation Public Coverage Roadmap には issue が起票されているけど,特にサポートされる流れではなさそうでツライ😇
Quota Monitor for AWS
関連するソリューションとして「Quota Monitor for AWS」もある.あくまで個人的にはソリューションは導入したくなく,マネージドサービスとして提供してくれれば使うのに〜という感じではあるけど,運用面まで考慮してニーズに合えば導入してみると良いのかなと思う👌